This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

semble / src / shared / infrastructure / http / factories / UseCaseFactory.ts
12 kB 255 lines
1import { InitiateOAuthSignInUseCase } from '../../../../modules/user/application/use-cases/InitiateOAuthSignInUseCase'; 2import { CompleteOAuthSignInUseCase } from '../../../../modules/user/application/use-cases/CompleteOAuthSignInUseCase'; 3import { RefreshAccessTokenUseCase } from '../../../../modules/user/application/use-cases/RefreshAccessTokenUseCase'; 4import { AddUrlToLibraryUseCase } from '../../../../modules/cards/application/useCases/commands/AddUrlToLibraryUseCase'; 5import { AddCardToLibraryUseCase } from '../../../../modules/cards/application/useCases/commands/AddCardToLibraryUseCase'; 6import { AddCardToCollectionUseCase } from '../../../../modules/cards/application/useCases/commands/AddCardToCollectionUseCase'; 7import { UpdateNoteCardUseCase } from '../../../../modules/cards/application/useCases/commands/UpdateNoteCardUseCase'; 8import { UpdateUrlCardAssociationsUseCase } from '../../../../modules/cards/application/useCases/commands/UpdateUrlCardAssociationsUseCase'; 9import { RemoveCardFromLibraryUseCase } from '../../../../modules/cards/application/useCases/commands/RemoveCardFromLibraryUseCase'; 10import { RemoveCardFromCollectionUseCase } from '../../../../modules/cards/application/useCases/commands/RemoveCardFromCollectionUseCase'; 11import { GetUrlMetadataUseCase } from '../../../../modules/cards/application/useCases/queries/GetUrlMetadataUseCase'; 12import { GetUrlCardViewUseCase } from '../../../../modules/cards/application/useCases/queries/GetUrlCardViewUseCase'; 13import { GetLibrariesForCardUseCase } from '../../../../modules/cards/application/useCases/queries/GetLibrariesForCardUseCase'; 14import { GetUrlCardsUseCase } from '../../../../modules/cards/application/useCases/queries/GetUrlCardsUseCase'; 15import { CreateCollectionUseCase } from '../../../../modules/cards/application/useCases/commands/CreateCollectionUseCase'; 16import { UpdateCollectionUseCase } from '../../../../modules/cards/application/useCases/commands/UpdateCollectionUseCase'; 17import { DeleteCollectionUseCase } from '../../../../modules/cards/application/useCases/commands/DeleteCollectionUseCase'; 18import { GetCollectionPageUseCase } from '../../../../modules/cards/application/useCases/queries/GetCollectionPageUseCase'; 19import { Repositories } from './RepositoryFactory'; 20import { Services, SharedServices } from './ServiceFactory'; 21import { GetProfileUseCase } from 'src/modules/cards/application/useCases/queries/GetProfileUseCase'; 22import { LoginWithAppPasswordUseCase } from 'src/modules/user/application/use-cases/LoginWithAppPasswordUseCase'; 23import { LogoutUseCase } from 'src/modules/user/application/use-cases/LogoutUseCase'; 24import { GenerateExtensionTokensUseCase } from 'src/modules/user/application/use-cases/GenerateExtensionTokensUseCase'; 25import { GetGlobalFeedUseCase } from '../../../../modules/feeds/application/useCases/queries/GetGlobalFeedUseCase'; 26import { AddActivityToFeedUseCase } from '../../../../modules/feeds/application/useCases/commands/AddActivityToFeedUseCase'; 27import { GetCollectionsUseCase } from 'src/modules/cards/application/useCases/queries/GetCollectionsUseCase'; 28import { GetCollectionPageByAtUriUseCase } from 'src/modules/cards/application/useCases/queries/GetCollectionPageByAtUriUseCase'; 29import { GetUrlStatusForMyLibraryUseCase } from '../../../../modules/cards/application/useCases/queries/GetUrlStatusForMyLibraryUseCase'; 30import { GetLibrariesForUrlUseCase } from '../../../../modules/cards/application/useCases/queries/GetLibrariesForUrlUseCase'; 31import { GetCollectionsForUrlUseCase } from '../../../../modules/cards/application/useCases/queries/GetCollectionsForUrlUseCase'; 32import { GetNoteCardsForUrlUseCase } from '../../../../modules/cards/application/useCases/queries/GetNoteCardsForUrlUseCase'; 33import { IndexUrlForSearchUseCase } from '../../../../modules/search/application/useCases/commands/IndexUrlForSearchUseCase'; 34import { GetSimilarUrlsForUrlUseCase } from '../../../../modules/search/application/useCases/queries/GetSimilarUrlsForUrlUseCase'; 35 36export interface WorkerUseCases { 37 addActivityToFeedUseCase: AddActivityToFeedUseCase; 38 indexUrlForSearchUseCase: IndexUrlForSearchUseCase; 39} 40 41export interface UseCases { 42 // User use cases 43 loginWithAppPasswordUseCase: LoginWithAppPasswordUseCase; 44 logoutUseCase: LogoutUseCase; 45 initiateOAuthSignInUseCase: InitiateOAuthSignInUseCase; 46 completeOAuthSignInUseCase: CompleteOAuthSignInUseCase; 47 getProfileUseCase: GetProfileUseCase; 48 refreshAccessTokenUseCase: RefreshAccessTokenUseCase; 49 generateExtensionTokensUseCase: GenerateExtensionTokensUseCase; 50 // Card use cases 51 addUrlToLibraryUseCase: AddUrlToLibraryUseCase; 52 addCardToLibraryUseCase: AddCardToLibraryUseCase; 53 addCardToCollectionUseCase: AddCardToCollectionUseCase; 54 updateNoteCardUseCase: UpdateNoteCardUseCase; 55 updateUrlCardAssociationsUseCase: UpdateUrlCardAssociationsUseCase; 56 removeCardFromLibraryUseCase: RemoveCardFromLibraryUseCase; 57 removeCardFromCollectionUseCase: RemoveCardFromCollectionUseCase; 58 getUrlMetadataUseCase: GetUrlMetadataUseCase; 59 getUrlCardViewUseCase: GetUrlCardViewUseCase; 60 getLibrariesForCardUseCase: GetLibrariesForCardUseCase; 61 getMyUrlCardsUseCase: GetUrlCardsUseCase; 62 createCollectionUseCase: CreateCollectionUseCase; 63 updateCollectionUseCase: UpdateCollectionUseCase; 64 deleteCollectionUseCase: DeleteCollectionUseCase; 65 getCollectionPageUseCase: GetCollectionPageUseCase; 66 getCollectionPageByAtUriUseCase: GetCollectionPageByAtUriUseCase; 67 getCollectionsUseCase: GetCollectionsUseCase; 68 getUrlStatusForMyLibraryUseCase: GetUrlStatusForMyLibraryUseCase; 69 getLibrariesForUrlUseCase: GetLibrariesForUrlUseCase; 70 getCollectionsForUrlUseCase: GetCollectionsForUrlUseCase; 71 getNoteCardsForUrlUseCase: GetNoteCardsForUrlUseCase; 72 // Feed use cases 73 getGlobalFeedUseCase: GetGlobalFeedUseCase; 74 addActivityToFeedUseCase: AddActivityToFeedUseCase; 75 // Search use cases 76 getSimilarUrlsForUrlUseCase: GetSimilarUrlsForUrlUseCase; 77} 78 79export class UseCaseFactory { 80 static create(repositories: Repositories, services: Services): UseCases { 81 return this.createForWebApp(repositories, services); 82 } 83 84 static createForWebApp( 85 repositories: Repositories, 86 services: Services, 87 ): UseCases { 88 const getCollectionPageUseCase = new GetCollectionPageUseCase( 89 repositories.collectionRepository, 90 repositories.cardQueryRepository, 91 services.profileService, 92 ); 93 94 return { 95 // User use cases 96 loginWithAppPasswordUseCase: new LoginWithAppPasswordUseCase( 97 services.appPasswordProcessor, 98 services.tokenService, 99 repositories.userRepository, 100 services.userAuthService, 101 ), 102 logoutUseCase: new LogoutUseCase(services.tokenService), 103 initiateOAuthSignInUseCase: new InitiateOAuthSignInUseCase( 104 services.oauthProcessor, 105 ), 106 completeOAuthSignInUseCase: new CompleteOAuthSignInUseCase( 107 services.oauthProcessor, 108 services.tokenService, 109 repositories.userRepository, 110 services.userAuthService, 111 ), 112 getProfileUseCase: new GetProfileUseCase( 113 services.profileService, 114 services.identityResolutionService, 115 ), 116 refreshAccessTokenUseCase: new RefreshAccessTokenUseCase( 117 services.tokenService, 118 ), 119 generateExtensionTokensUseCase: new GenerateExtensionTokensUseCase( 120 services.tokenService, 121 ), 122 123 // Card use cases 124 addUrlToLibraryUseCase: new AddUrlToLibraryUseCase( 125 repositories.cardRepository, 126 services.metadataService, 127 services.cardLibraryService, 128 services.cardCollectionService, 129 services.eventPublisher, 130 ), 131 addCardToLibraryUseCase: new AddCardToLibraryUseCase( 132 repositories.cardRepository, 133 services.cardLibraryService, 134 services.cardCollectionService, 135 ), 136 addCardToCollectionUseCase: new AddCardToCollectionUseCase( 137 repositories.cardRepository, 138 services.cardCollectionService, 139 services.eventPublisher, 140 ), 141 updateNoteCardUseCase: new UpdateNoteCardUseCase( 142 repositories.cardRepository, 143 services.cardPublisher, 144 ), 145 updateUrlCardAssociationsUseCase: new UpdateUrlCardAssociationsUseCase( 146 repositories.cardRepository, 147 services.cardLibraryService, 148 services.cardCollectionService, 149 services.eventPublisher, 150 ), 151 removeCardFromLibraryUseCase: new RemoveCardFromLibraryUseCase( 152 repositories.cardRepository, 153 services.cardLibraryService, 154 ), 155 removeCardFromCollectionUseCase: new RemoveCardFromCollectionUseCase( 156 repositories.cardRepository, 157 services.cardCollectionService, 158 ), 159 getUrlMetadataUseCase: new GetUrlMetadataUseCase( 160 services.metadataService, 161 repositories.cardRepository, 162 ), 163 getUrlCardViewUseCase: new GetUrlCardViewUseCase( 164 repositories.cardQueryRepository, 165 services.profileService, 166 repositories.collectionRepository, 167 ), 168 getLibrariesForCardUseCase: new GetLibrariesForCardUseCase( 169 repositories.cardQueryRepository, 170 services.profileService, 171 ), 172 getMyUrlCardsUseCase: new GetUrlCardsUseCase( 173 repositories.cardQueryRepository, 174 services.identityResolutionService, 175 services.profileService, 176 ), 177 createCollectionUseCase: new CreateCollectionUseCase( 178 repositories.collectionRepository, 179 services.collectionPublisher, 180 ), 181 updateCollectionUseCase: new UpdateCollectionUseCase( 182 repositories.collectionRepository, 183 services.collectionPublisher, 184 ), 185 deleteCollectionUseCase: new DeleteCollectionUseCase( 186 repositories.collectionRepository, 187 services.collectionPublisher, 188 ), 189 getCollectionPageUseCase, 190 getCollectionPageByAtUriUseCase: new GetCollectionPageByAtUriUseCase( 191 services.identityResolutionService, 192 repositories.atUriResolutionService, 193 getCollectionPageUseCase, 194 services.configService.getAtProtoCollections().collection, 195 ), 196 getCollectionsUseCase: new GetCollectionsUseCase( 197 repositories.collectionQueryRepository, 198 services.profileService, 199 services.identityResolutionService, 200 ), 201 getUrlStatusForMyLibraryUseCase: new GetUrlStatusForMyLibraryUseCase( 202 repositories.cardRepository, 203 repositories.cardQueryRepository, 204 repositories.collectionQueryRepository, 205 repositories.collectionRepository, 206 services.profileService, 207 services.eventPublisher, 208 ), 209 getLibrariesForUrlUseCase: new GetLibrariesForUrlUseCase( 210 repositories.cardQueryRepository, 211 services.profileService, 212 ), 213 getCollectionsForUrlUseCase: new GetCollectionsForUrlUseCase( 214 repositories.collectionQueryRepository, 215 services.profileService, 216 repositories.collectionRepository, 217 ), 218 getNoteCardsForUrlUseCase: new GetNoteCardsForUrlUseCase( 219 repositories.cardQueryRepository, 220 services.profileService, 221 ), 222 223 // Feed use cases 224 getGlobalFeedUseCase: new GetGlobalFeedUseCase( 225 repositories.feedRepository, 226 services.profileService, 227 repositories.cardQueryRepository, 228 repositories.collectionRepository, 229 ), 230 addActivityToFeedUseCase: new AddActivityToFeedUseCase( 231 services.feedService, 232 ), 233 // Search use cases 234 getSimilarUrlsForUrlUseCase: new GetSimilarUrlsForUrlUseCase( 235 services.searchService, 236 ), 237 }; 238 } 239 240 static createForWorker( 241 repositories: Repositories, 242 services: SharedServices, 243 ): WorkerUseCases { 244 return { 245 // Feed use cases (only ones needed by workers) 246 addActivityToFeedUseCase: new AddActivityToFeedUseCase( 247 services.feedService, 248 ), 249 // Search use cases (only ones needed by workers) 250 indexUrlForSearchUseCase: new IndexUrlForSearchUseCase( 251 services.searchService, 252 ), 253 }; 254 } 255}