A social knowledge tool for researchers built on ATProto
at development 116 lines 6.6 kB view raw
1import { DatabaseFactory } from '../../database/DatabaseFactory'; 2import { EnvironmentConfigService } from '../../config/EnvironmentConfigService'; 3import { DrizzleUserRepository } from '../../../../modules/user/infrastructure/repositories/DrizzleUserRepository'; 4import { DrizzleTokenRepository } from '../../../../modules/user/infrastructure/repositories/DrizzleTokenRepository'; 5import { DrizzleCardRepository } from '../../../../modules/cards/infrastructure/repositories/DrizzleCardRepository'; 6import { DrizzleCardQueryRepository } from '../../../../modules/cards/infrastructure/repositories/DrizzleCardQueryRepository'; 7import { DrizzleCollectionRepository } from '../../../../modules/cards/infrastructure/repositories/DrizzleCollectionRepository'; 8import { DrizzleCollectionQueryRepository } from '../../../../modules/cards/infrastructure/repositories/DrizzleCollectionQueryRepository'; 9import { DrizzleAppPasswordSessionRepository } from 'src/modules/atproto/infrastructure/repositories/DrizzleAppPasswordSessionRepository'; 10import { InMemoryCardRepository } from '../../../../modules/cards/tests/utils/InMemoryCardRepository'; 11import { InMemoryCardQueryRepository } from '../../../../modules/cards/tests/utils/InMemoryCardQueryRepository'; 12import { InMemoryCollectionRepository } from '../../../../modules/cards/tests/utils/InMemoryCollectionRepository'; 13import { InMemoryCollectionQueryRepository } from '../../../../modules/cards/tests/utils/InMemoryCollectionQueryRepository'; 14import { InMemoryUserRepository } from '../../../../modules/user/tests/infrastructure/InMemoryUserRepository'; 15import { InMemoryTokenRepository } from '../../../../modules/user/tests/infrastructure/InMemoryTokenRepository'; 16import { InMemoryAppPasswordSessionRepository } from '../../../../modules/atproto/tests/infrastructure/InMemoryAppPasswordSessionRepository'; 17import { ICardRepository } from 'src/modules/cards/domain/ICardRepository'; 18import { ICardQueryRepository } from 'src/modules/cards/domain/ICardQueryRepository'; 19import { ICollectionRepository } from 'src/modules/cards/domain/ICollectionRepository'; 20import { ICollectionQueryRepository } from 'src/modules/cards/domain/ICollectionQueryRepository'; 21import { IUserRepository } from 'src/modules/user/domain/repositories/IUserRepository'; 22import { ITokenRepository } from 'src/modules/user/domain/repositories/ITokenRepository'; 23import { IAppPasswordSessionRepository } from 'src/modules/atproto/infrastructure/repositories/IAppPasswordSessionRepository'; 24import { DrizzleStateStore } from '../../../../modules/user/infrastructure/services/DrizzleStateStore'; 25import { DrizzleSessionStore } from '../../../../modules/user/infrastructure/services/DrizzleSessionStore'; 26import { InMemoryStateStore } from '../../../../modules/user/tests/infrastructure/InMemoryStateStore'; 27import { InMemorySessionStore } from '../../../../modules/user/tests/infrastructure/InMemorySessionStore'; 28import { 29 NodeSavedStateStore, 30 NodeSavedSessionStore, 31} from '@atproto/oauth-client-node'; 32import { DrizzleFeedRepository } from '../../../../modules/feeds/infrastructure/repositories/DrizzleFeedRepository'; 33import { InMemoryFeedRepository } from '../../../../modules/feeds/tests/infrastructure/InMemoryFeedRepository'; 34import { IFeedRepository } from '../../../../modules/feeds/domain/IFeedRepository'; 35import { IAtUriResolutionService } from '../../../../modules/cards/domain/services/IAtUriResolutionService'; 36import { DrizzleAtUriResolutionService } from '../../../../modules/cards/infrastructure/services/DrizzleAtUriResolutionService'; 37import { InMemoryAtUriResolutionService } from '../../../../modules/cards/tests/utils/InMemoryAtUriResolutionService'; 38 39export interface Repositories { 40 userRepository: IUserRepository; 41 tokenRepository: ITokenRepository; 42 cardRepository: ICardRepository; 43 cardQueryRepository: ICardQueryRepository; 44 collectionRepository: ICollectionRepository; 45 collectionQueryRepository: ICollectionQueryRepository; 46 appPasswordSessionRepository: IAppPasswordSessionRepository; 47 feedRepository: IFeedRepository; 48 atUriResolutionService: IAtUriResolutionService; 49 oauthStateStore: NodeSavedStateStore; 50 oauthSessionStore: NodeSavedSessionStore; 51} 52 53export class RepositoryFactory { 54 static create(configService: EnvironmentConfigService): Repositories { 55 const useMockRepos = process.env.USE_MOCK_REPOS === 'true'; 56 57 if (useMockRepos) { 58 // Create in-memory repositories 59 const userRepository = new InMemoryUserRepository(); 60 const tokenRepository = new InMemoryTokenRepository(); 61 const cardRepository = new InMemoryCardRepository(); 62 const collectionRepository = new InMemoryCollectionRepository(); 63 const cardQueryRepository = new InMemoryCardQueryRepository( 64 cardRepository, 65 collectionRepository, 66 ); 67 const collectionQueryRepository = new InMemoryCollectionQueryRepository( 68 collectionRepository, 69 cardRepository, 70 ); 71 const appPasswordSessionRepository = 72 new InMemoryAppPasswordSessionRepository(); 73 const feedRepository = InMemoryFeedRepository.getInstance(); 74 const atUriResolutionService = new InMemoryAtUriResolutionService( 75 collectionRepository, 76 ); 77 const oauthStateStore = new InMemoryStateStore(); 78 const oauthSessionStore = new InMemorySessionStore(); 79 80 return { 81 userRepository, 82 tokenRepository, 83 cardRepository, 84 cardQueryRepository, 85 collectionRepository, 86 collectionQueryRepository, 87 appPasswordSessionRepository, 88 feedRepository, 89 atUriResolutionService, 90 oauthStateStore, 91 oauthSessionStore, 92 }; 93 } 94 95 const db = DatabaseFactory.createConnection( 96 configService.getDatabaseConfig(), 97 ); 98 99 const oauthStateStore = new DrizzleStateStore(db); 100 const oauthSessionStore = new DrizzleSessionStore(db); 101 102 return { 103 userRepository: new DrizzleUserRepository(db), 104 tokenRepository: new DrizzleTokenRepository(db), 105 cardRepository: new DrizzleCardRepository(db), 106 cardQueryRepository: new DrizzleCardQueryRepository(db), 107 collectionRepository: new DrizzleCollectionRepository(db), 108 collectionQueryRepository: new DrizzleCollectionQueryRepository(db), 109 appPasswordSessionRepository: new DrizzleAppPasswordSessionRepository(db), 110 feedRepository: new DrizzleFeedRepository(db), 111 atUriResolutionService: new DrizzleAtUriResolutionService(db), 112 oauthStateStore, 113 oauthSessionStore, 114 }; 115 } 116}