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
24 kB 500 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 { GetGemActivityFeedUseCase } from '../../../../modules/feeds/application/useCases/queries/GetGemActivityFeedUseCase'; 27import { AddActivityToFeedUseCase } from '../../../../modules/feeds/application/useCases/commands/AddActivityToFeedUseCase'; 28import { GetCollectionsUseCase } from 'src/modules/cards/application/useCases/queries/GetCollectionsUseCase'; 29import { SearchCollectionsUseCase } from 'src/modules/cards/application/useCases/queries/SearchCollectionsUseCase'; 30import { GetOpenCollectionsWithContributorUseCase } from 'src/modules/cards/application/useCases/queries/GetOpenCollectionsWithContributorUseCase'; 31import { GetCollectionPageByAtUriUseCase } from 'src/modules/cards/application/useCases/queries/GetCollectionPageByAtUriUseCase'; 32import { GetUrlStatusForMyLibraryUseCase } from '../../../../modules/cards/application/useCases/queries/GetUrlStatusForMyLibraryUseCase'; 33import { GetLibrariesForUrlUseCase } from '../../../../modules/cards/application/useCases/queries/GetLibrariesForUrlUseCase'; 34import { GetCollectionsForUrlUseCase } from '../../../../modules/cards/application/useCases/queries/GetCollectionsForUrlUseCase'; 35import { GetNoteCardsForUrlUseCase } from '../../../../modules/cards/application/useCases/queries/GetNoteCardsForUrlUseCase'; 36import { IndexUrlForSearchUseCase } from '../../../../modules/search/application/useCases/commands/IndexUrlForSearchUseCase'; 37import { GetSimilarUrlsForUrlUseCase } from '../../../../modules/search/application/useCases/queries/GetSimilarUrlsForUrlUseCase'; 38import { SemanticSearchUrlsUseCase } from '../../../../modules/search/application/useCases/queries/SemanticSearchUrlsUseCase'; 39import { SearchBskyPostsForUrlUseCase } from '../../../../modules/search/application/use-cases/SearchBskyPostsForUrlUseCase'; 40import { SearchAtProtoAccountsUseCase } from '../../../../modules/search/application/use-cases/SearchAtProtoAccountsUseCase'; 41import { SearchLeafletDocsForUrlUseCase } from '../../../../modules/search/application/use-cases/SearchLeafletDocsForUrlUseCase'; 42import { ProcessCardFirehoseEventUseCase } from '../../../../modules/atproto/application/useCases/ProcessCardFirehoseEventUseCase'; 43import { ProcessCollectionFirehoseEventUseCase } from '../../../../modules/atproto/application/useCases/ProcessCollectionFirehoseEventUseCase'; 44import { ProcessCollectionLinkFirehoseEventUseCase } from '../../../../modules/atproto/application/useCases/ProcessCollectionLinkFirehoseEventUseCase'; 45import { ProcessMarginBookmarkFirehoseEventUseCase } from '../../../../modules/atproto/application/useCases/ProcessMarginBookmarkFirehoseEventUseCase'; 46import { ProcessMarginCollectionFirehoseEventUseCase } from '../../../../modules/atproto/application/useCases/ProcessMarginCollectionFirehoseEventUseCase'; 47import { ProcessMarginCollectionItemFirehoseEventUseCase } from '../../../../modules/atproto/application/useCases/ProcessMarginCollectionItemFirehoseEventUseCase'; 48import { ProcessCollectionLinkRemovalFirehoseEventUseCase } from '../../../../modules/atproto/application/useCases/ProcessCollectionLinkRemovalFirehoseEventUseCase'; 49import { GetMyNotificationsUseCase } from '../../../../modules/notifications/application/useCases/queries/GetMyNotificationsUseCase'; 50import { GetUnreadNotificationCountUseCase } from '../../../../modules/notifications/application/useCases/queries/GetUnreadNotificationCountUseCase'; 51import { MarkNotificationsAsReadUseCase } from '../../../../modules/notifications/application/useCases/commands/MarkNotificationsAsReadUseCase'; 52import { MarkAllNotificationsAsReadUseCase } from '../../../../modules/notifications/application/useCases/commands/MarkAllNotificationsAsReadUseCase'; 53import { CreateNotificationUseCase } from '../../../../modules/notifications/application/useCases/commands/CreateNotificationUseCase'; 54import { SyncAccountDataUseCase } from '../../../../modules/sync/application/useCases/SyncAccountDataUseCase'; 55 56export interface WorkerUseCases { 57 addActivityToFeedUseCase: AddActivityToFeedUseCase; 58 indexUrlForSearchUseCase: IndexUrlForSearchUseCase; 59 createNotificationUseCase: CreateNotificationUseCase; 60 syncAccountDataUseCase: SyncAccountDataUseCase; 61 // Firehose-specific use cases 62 addUrlToLibraryUseCase: AddUrlToLibraryUseCase; 63 updateUrlCardAssociationsUseCase: UpdateUrlCardAssociationsUseCase; 64 removeCardFromLibraryUseCase: RemoveCardFromLibraryUseCase; 65 createCollectionUseCase: CreateCollectionUseCase; 66 updateCollectionUseCase: UpdateCollectionUseCase; 67 deleteCollectionUseCase: DeleteCollectionUseCase; 68 processCardFirehoseEventUseCase: ProcessCardFirehoseEventUseCase; 69 processCollectionFirehoseEventUseCase: ProcessCollectionFirehoseEventUseCase; 70 processCollectionLinkFirehoseEventUseCase: ProcessCollectionLinkFirehoseEventUseCase; 71 processMarginBookmarkFirehoseEventUseCase: ProcessMarginBookmarkFirehoseEventUseCase; 72 processMarginCollectionFirehoseEventUseCase: ProcessMarginCollectionFirehoseEventUseCase; 73 processMarginCollectionItemFirehoseEventUseCase: ProcessMarginCollectionItemFirehoseEventUseCase; 74 processCollectionLinkRemovalFirehoseEventUseCase: ProcessCollectionLinkRemovalFirehoseEventUseCase; 75} 76 77export interface UseCases { 78 // User use cases 79 loginWithAppPasswordUseCase: LoginWithAppPasswordUseCase; 80 logoutUseCase: LogoutUseCase; 81 initiateOAuthSignInUseCase: InitiateOAuthSignInUseCase; 82 completeOAuthSignInUseCase: CompleteOAuthSignInUseCase; 83 getProfileUseCase: GetProfileUseCase; 84 refreshAccessTokenUseCase: RefreshAccessTokenUseCase; 85 generateExtensionTokensUseCase: GenerateExtensionTokensUseCase; 86 // Card use cases 87 addUrlToLibraryUseCase: AddUrlToLibraryUseCase; 88 addCardToLibraryUseCase: AddCardToLibraryUseCase; 89 addCardToCollectionUseCase: AddCardToCollectionUseCase; 90 updateNoteCardUseCase: UpdateNoteCardUseCase; 91 updateUrlCardAssociationsUseCase: UpdateUrlCardAssociationsUseCase; 92 removeCardFromLibraryUseCase: RemoveCardFromLibraryUseCase; 93 removeCardFromCollectionUseCase: RemoveCardFromCollectionUseCase; 94 getUrlMetadataUseCase: GetUrlMetadataUseCase; 95 getUrlCardViewUseCase: GetUrlCardViewUseCase; 96 getLibrariesForCardUseCase: GetLibrariesForCardUseCase; 97 getMyUrlCardsUseCase: GetUrlCardsUseCase; 98 createCollectionUseCase: CreateCollectionUseCase; 99 updateCollectionUseCase: UpdateCollectionUseCase; 100 deleteCollectionUseCase: DeleteCollectionUseCase; 101 getCollectionPageUseCase: GetCollectionPageUseCase; 102 getCollectionPageByAtUriUseCase: GetCollectionPageByAtUriUseCase; 103 getCollectionsUseCase: GetCollectionsUseCase; 104 searchCollectionsUseCase: SearchCollectionsUseCase; 105 getOpenCollectionsWithContributorUseCase: GetOpenCollectionsWithContributorUseCase; 106 getUrlStatusForMyLibraryUseCase: GetUrlStatusForMyLibraryUseCase; 107 getLibrariesForUrlUseCase: GetLibrariesForUrlUseCase; 108 getCollectionsForUrlUseCase: GetCollectionsForUrlUseCase; 109 getNoteCardsForUrlUseCase: GetNoteCardsForUrlUseCase; 110 // Feed use cases 111 getGlobalFeedUseCase: GetGlobalFeedUseCase; 112 getGemActivityFeedUseCase: GetGemActivityFeedUseCase; 113 addActivityToFeedUseCase: AddActivityToFeedUseCase; 114 // Search use cases 115 getSimilarUrlsForUrlUseCase: GetSimilarUrlsForUrlUseCase; 116 semanticSearchUrlsUseCase: SemanticSearchUrlsUseCase; 117 searchBskyPostsForUrlUseCase: SearchBskyPostsForUrlUseCase; 118 searchAtProtoAccountsUseCase: SearchAtProtoAccountsUseCase; 119 searchLeafletDocsForUrlUseCase: SearchLeafletDocsForUrlUseCase; 120 // Notification use cases 121 getMyNotificationsUseCase: GetMyNotificationsUseCase; 122 getUnreadNotificationCountUseCase: GetUnreadNotificationCountUseCase; 123 markNotificationsAsReadUseCase: MarkNotificationsAsReadUseCase; 124 markAllNotificationsAsReadUseCase: MarkAllNotificationsAsReadUseCase; 125} 126 127export class UseCaseFactory { 128 static create(repositories: Repositories, services: Services): UseCases { 129 return this.createForWebApp(repositories, services); 130 } 131 132 static createForWebApp( 133 repositories: Repositories, 134 services: Services, 135 ): UseCases { 136 const getCollectionPageUseCase = new GetCollectionPageUseCase( 137 repositories.collectionRepository, 138 repositories.cardQueryRepository, 139 services.profileService, 140 ); 141 142 return { 143 // User use cases 144 loginWithAppPasswordUseCase: new LoginWithAppPasswordUseCase( 145 services.appPasswordProcessor, 146 services.tokenService, 147 repositories.userRepository, 148 services.userAuthService, 149 ), 150 logoutUseCase: new LogoutUseCase(services.tokenService), 151 initiateOAuthSignInUseCase: new InitiateOAuthSignInUseCase( 152 services.oauthProcessor, 153 ), 154 completeOAuthSignInUseCase: new CompleteOAuthSignInUseCase( 155 services.oauthProcessor, 156 services.tokenService, 157 repositories.userRepository, 158 services.userAuthService, 159 ), 160 getProfileUseCase: new GetProfileUseCase( 161 services.profileService, 162 services.identityResolutionService, 163 ), 164 refreshAccessTokenUseCase: new RefreshAccessTokenUseCase( 165 services.tokenService, 166 ), 167 generateExtensionTokensUseCase: new GenerateExtensionTokensUseCase( 168 services.tokenService, 169 ), 170 171 // Card use cases 172 addUrlToLibraryUseCase: new AddUrlToLibraryUseCase( 173 repositories.cardRepository, 174 services.metadataService, 175 services.cardLibraryService, 176 services.cardCollectionService, 177 services.eventPublisher, 178 ), 179 addCardToLibraryUseCase: new AddCardToLibraryUseCase( 180 repositories.cardRepository, 181 services.cardLibraryService, 182 services.cardCollectionService, 183 ), 184 addCardToCollectionUseCase: new AddCardToCollectionUseCase( 185 repositories.cardRepository, 186 services.cardCollectionService, 187 services.eventPublisher, 188 ), 189 updateNoteCardUseCase: new UpdateNoteCardUseCase( 190 repositories.cardRepository, 191 services.cardPublisher, 192 ), 193 updateUrlCardAssociationsUseCase: new UpdateUrlCardAssociationsUseCase( 194 repositories.cardRepository, 195 services.cardLibraryService, 196 services.cardCollectionService, 197 services.eventPublisher, 198 ), 199 removeCardFromLibraryUseCase: new RemoveCardFromLibraryUseCase( 200 repositories.cardRepository, 201 services.cardLibraryService, 202 services.eventPublisher, 203 ), 204 removeCardFromCollectionUseCase: new RemoveCardFromCollectionUseCase( 205 repositories.cardRepository, 206 services.cardCollectionService, 207 services.eventPublisher, 208 ), 209 getUrlMetadataUseCase: new GetUrlMetadataUseCase( 210 services.metadataService, 211 repositories.cardRepository, 212 ), 213 getUrlCardViewUseCase: new GetUrlCardViewUseCase( 214 repositories.cardQueryRepository, 215 services.profileService, 216 repositories.collectionRepository, 217 ), 218 getLibrariesForCardUseCase: new GetLibrariesForCardUseCase( 219 repositories.cardQueryRepository, 220 services.profileService, 221 ), 222 getMyUrlCardsUseCase: new GetUrlCardsUseCase( 223 repositories.cardQueryRepository, 224 services.identityResolutionService, 225 services.profileService, 226 ), 227 createCollectionUseCase: new CreateCollectionUseCase( 228 repositories.collectionRepository, 229 services.collectionPublisher, 230 ), 231 updateCollectionUseCase: new UpdateCollectionUseCase( 232 repositories.collectionRepository, 233 services.collectionPublisher, 234 ), 235 deleteCollectionUseCase: new DeleteCollectionUseCase( 236 repositories.collectionRepository, 237 services.collectionPublisher, 238 ), 239 getCollectionPageUseCase, 240 getCollectionPageByAtUriUseCase: new GetCollectionPageByAtUriUseCase( 241 services.identityResolutionService, 242 repositories.atUriResolutionService, 243 getCollectionPageUseCase, 244 services.configService.getAtProtoCollections().collection, 245 services.configService.getAtProtoCollections().marginCollection, 246 ), 247 getCollectionsUseCase: new GetCollectionsUseCase( 248 repositories.collectionQueryRepository, 249 services.profileService, 250 services.identityResolutionService, 251 ), 252 searchCollectionsUseCase: new SearchCollectionsUseCase( 253 repositories.collectionQueryRepository, 254 services.profileService, 255 services.identityResolutionService, 256 ), 257 getOpenCollectionsWithContributorUseCase: 258 new GetOpenCollectionsWithContributorUseCase( 259 repositories.collectionQueryRepository, 260 services.profileService, 261 services.identityResolutionService, 262 ), 263 getUrlStatusForMyLibraryUseCase: new GetUrlStatusForMyLibraryUseCase( 264 repositories.cardRepository, 265 repositories.cardQueryRepository, 266 repositories.collectionQueryRepository, 267 repositories.collectionRepository, 268 services.profileService, 269 services.eventPublisher, 270 ), 271 getLibrariesForUrlUseCase: new GetLibrariesForUrlUseCase( 272 repositories.cardQueryRepository, 273 services.profileService, 274 ), 275 getCollectionsForUrlUseCase: new GetCollectionsForUrlUseCase( 276 repositories.collectionQueryRepository, 277 services.profileService, 278 repositories.collectionRepository, 279 ), 280 getNoteCardsForUrlUseCase: new GetNoteCardsForUrlUseCase( 281 repositories.cardQueryRepository, 282 services.profileService, 283 ), 284 285 // Feed use cases 286 getGlobalFeedUseCase: new GetGlobalFeedUseCase( 287 repositories.feedRepository, 288 services.profileService, 289 repositories.cardQueryRepository, 290 repositories.collectionRepository, 291 ), 292 getGemActivityFeedUseCase: new GetGemActivityFeedUseCase( 293 repositories.feedRepository, 294 services.profileService, 295 repositories.cardQueryRepository, 296 repositories.collectionRepository, 297 repositories.collectionQueryRepository, 298 ), 299 addActivityToFeedUseCase: new AddActivityToFeedUseCase( 300 services.feedService, 301 repositories.cardRepository, 302 repositories.followsRepository, 303 repositories.feedRepository, 304 ), 305 // Search use cases 306 getSimilarUrlsForUrlUseCase: new GetSimilarUrlsForUrlUseCase( 307 services.searchService, 308 ), 309 semanticSearchUrlsUseCase: new SemanticSearchUrlsUseCase( 310 services.searchService, 311 services.identityResolutionService, 312 ), 313 searchBskyPostsForUrlUseCase: new SearchBskyPostsForUrlUseCase( 314 services.atProtoAgentService, 315 ), 316 searchAtProtoAccountsUseCase: new SearchAtProtoAccountsUseCase( 317 services.atProtoAgentService, 318 ), 319 searchLeafletDocsForUrlUseCase: new SearchLeafletDocsForUrlUseCase( 320 services.leafletSearchService, 321 repositories.cardQueryRepository, 322 ), 323 // Notification use cases 324 getMyNotificationsUseCase: new GetMyNotificationsUseCase( 325 repositories.notificationRepository, 326 services.profileService, 327 repositories.cardQueryRepository, 328 repositories.collectionRepository, 329 ), 330 getUnreadNotificationCountUseCase: new GetUnreadNotificationCountUseCase( 331 repositories.notificationRepository, 332 ), 333 markNotificationsAsReadUseCase: new MarkNotificationsAsReadUseCase( 334 repositories.notificationRepository, 335 ), 336 markAllNotificationsAsReadUseCase: new MarkAllNotificationsAsReadUseCase( 337 repositories.notificationRepository, 338 ), 339 }; 340 } 341 342 static createForWorker( 343 repositories: Repositories, 344 services: SharedServices, 345 ): WorkerUseCases { 346 // ======================================== 347 // LEVEL 1: Leaf use cases (no use case dependencies) 348 // ======================================== 349 350 // Feed use cases 351 const addActivityToFeedUseCase = new AddActivityToFeedUseCase( 352 services.feedService, 353 repositories.cardRepository, 354 repositories.followsRepository, 355 repositories.feedRepository, 356 ); 357 358 // Search use cases 359 const indexUrlForSearchUseCase = new IndexUrlForSearchUseCase( 360 services.searchService, 361 ); 362 363 // Notification use cases 364 const createNotificationUseCase = new CreateNotificationUseCase( 365 services.notificationService, 366 ); 367 368 // Card library use cases 369 const addUrlToLibraryUseCase = new AddUrlToLibraryUseCase( 370 repositories.cardRepository, 371 services.metadataService, 372 services.cardLibraryService, 373 services.cardCollectionService, 374 services.eventPublisher, 375 ); 376 377 const updateUrlCardAssociationsUseCase = 378 new UpdateUrlCardAssociationsUseCase( 379 repositories.cardRepository, 380 services.cardLibraryService, 381 services.cardCollectionService, 382 services.eventPublisher, 383 ); 384 385 const removeCardFromLibraryUseCase = new RemoveCardFromLibraryUseCase( 386 repositories.cardRepository, 387 services.cardLibraryService, 388 services.eventPublisher, 389 ); 390 391 // Collection use cases 392 const createCollectionUseCase = new CreateCollectionUseCase( 393 repositories.collectionRepository, 394 services.collectionPublisher, 395 ); 396 397 const updateCollectionUseCase = new UpdateCollectionUseCase( 398 repositories.collectionRepository, 399 services.collectionPublisher, 400 ); 401 402 const deleteCollectionUseCase = new DeleteCollectionUseCase( 403 repositories.collectionRepository, 404 services.collectionPublisher, 405 ); 406 407 // ======================================== 408 // LEVEL 2: Process use cases (depend on Level 1) 409 // ======================================== 410 411 const processCardFirehoseEventUseCase = new ProcessCardFirehoseEventUseCase( 412 repositories.atUriResolutionService, 413 addUrlToLibraryUseCase, 414 updateUrlCardAssociationsUseCase, 415 removeCardFromLibraryUseCase, 416 repositories.cardRepository, 417 ); 418 419 const processCollectionFirehoseEventUseCase = 420 new ProcessCollectionFirehoseEventUseCase( 421 repositories.atUriResolutionService, 422 createCollectionUseCase, 423 updateCollectionUseCase, 424 deleteCollectionUseCase, 425 ); 426 427 const processCollectionLinkFirehoseEventUseCase = 428 new ProcessCollectionLinkFirehoseEventUseCase( 429 repositories.atUriResolutionService, 430 updateUrlCardAssociationsUseCase, 431 ); 432 433 const processCollectionLinkRemovalFirehoseEventUseCase = 434 new ProcessCollectionLinkRemovalFirehoseEventUseCase( 435 repositories.atUriResolutionService, 436 updateUrlCardAssociationsUseCase, 437 ); 438 439 const processMarginBookmarkFirehoseEventUseCase = 440 new ProcessMarginBookmarkFirehoseEventUseCase( 441 repositories.atUriResolutionService, 442 addUrlToLibraryUseCase, 443 removeCardFromLibraryUseCase, 444 ); 445 446 const processMarginCollectionFirehoseEventUseCase = 447 new ProcessMarginCollectionFirehoseEventUseCase( 448 repositories.atUriResolutionService, 449 createCollectionUseCase, 450 updateCollectionUseCase, 451 deleteCollectionUseCase, 452 ); 453 454 const processMarginCollectionItemFirehoseEventUseCase = 455 new ProcessMarginCollectionItemFirehoseEventUseCase( 456 repositories.atUriResolutionService, 457 updateUrlCardAssociationsUseCase, 458 ); 459 460 // ======================================== 461 // LEVEL 3: Sync use cases (depend on Level 2) 462 // ======================================== 463 464 const syncAccountDataUseCase = new SyncAccountDataUseCase( 465 repositories.syncStatusRepository, 466 services.atProtoRepoService, 467 repositories.atUriResolutionService, 468 processMarginBookmarkFirehoseEventUseCase, 469 processMarginCollectionFirehoseEventUseCase, 470 processMarginCollectionItemFirehoseEventUseCase, 471 ); 472 473 // ======================================== 474 // Return all use cases 475 // ======================================== 476 477 return { 478 // Level 1 479 addActivityToFeedUseCase, 480 indexUrlForSearchUseCase, 481 createNotificationUseCase, 482 addUrlToLibraryUseCase, 483 updateUrlCardAssociationsUseCase, 484 removeCardFromLibraryUseCase, 485 createCollectionUseCase, 486 updateCollectionUseCase, 487 deleteCollectionUseCase, 488 // Level 2 489 processCardFirehoseEventUseCase, 490 processCollectionFirehoseEventUseCase, 491 processCollectionLinkFirehoseEventUseCase, 492 processCollectionLinkRemovalFirehoseEventUseCase, 493 processMarginBookmarkFirehoseEventUseCase, 494 processMarginCollectionFirehoseEventUseCase, 495 processMarginCollectionItemFirehoseEventUseCase, 496 // Level 3 497 syncAccountDataUseCase, 498 }; 499 } 500}