import type { Adapter } from 'oidc-provider'; import { PrismaAdapter } from './prisma.adapter'; import { RedisAdapter } from './redis.adapter'; import { RedisService } from '@/common/redis/redis.service'; import { PrismaService } from '@/prisma/prisma.service'; // Prisma 存储的模型 const PRISMA_MODELS = ['Client', 'Grant', 'RefreshToken']; // Redis 存储的模型 const REDIS_MODELS = [ 'AuthorizationCode', 'AccessToken', 'Session', 'Interaction', 'DeviceCode', 'BackchannelAuthenticationRequest', 'RegistrationAccessToken', 'ReplayDetection', 'PushedAuthorizationRequest', ]; /** * 创建混合适配器工厂 * 根据模型类型选择 Prisma 或 Redis 适配器 */ export function createAdapterFactory(prisma: PrismaService, redis: RedisService) { return (model: string): Adapter => { if (PRISMA_MODELS.includes(model)) { return new PrismaAdapter(prisma, model); } if (REDIS_MODELS.includes(model)) { return new RedisAdapter(redis, model); } // 默认使用 Redis 适配器 return new RedisAdapter(redis, model); }; }