This repository has no description
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}