This repository has no description
1import { Result } from '../../../shared/core/Result';
2import { Collection, CollectionAccessType } from './Collection';
3import { CollectionId } from './value-objects/CollectionId';
4import { CardId } from './value-objects/CardId';
5import { CuratorId } from './value-objects/CuratorId';
6import { PublishedRecordId } from './value-objects/PublishedRecordId';
7
8export interface ICollectionRepository {
9 findById(id: CollectionId): Promise<Result<Collection | null>>;
10 findByIds(ids: CollectionId[]): Promise<Result<Collection[]>>;
11 findByCuratorId(curatorId: CuratorId): Promise<Result<Collection[]>>;
12 findByCardId(cardId: CardId): Promise<Result<Collection[]>>;
13 findByCuratorIdContainingCard(
14 authorId: CuratorId,
15 cardId: CardId,
16 ): Promise<Result<Collection[]>>;
17 findContainingCardAddedBy(
18 cardId: CardId,
19 addedBy: CuratorId,
20 ): Promise<Result<Collection[]>>;
21
22 // Create a new collection (initial insert only)
23 create(collection: Collection): Promise<Result<void>>;
24
25 // Update an existing collection using pending commands
26 save(collection: Collection): Promise<Result<void>>;
27
28 delete(collectionId: CollectionId): Promise<Result<void>>;
29
30 // Lightweight update for collection metadata only
31 updateMetadata(
32 collectionId: CollectionId,
33 updates: {
34 name?: string;
35 description?: string;
36 accessType?: CollectionAccessType;
37 publishedRecordId?: PublishedRecordId;
38 },
39 ): Promise<Result<void>>;
40
41 // Batch operation for efficient multi-collection updates
42 addCardToMultipleCollections(
43 cardId: CardId,
44 collectionIds: CollectionId[],
45 curatorId: CuratorId,
46 viaCardId?: CardId,
47 publishedRecordIds?: Map<string, string>,
48 ): Promise<Result<void>>;
49}