A social knowledge tool for researchers built on ATProto
at development 1.3 kB view raw
1import { err, Result } from '../../../shared/core/Result'; 2import { ICardRepository } from './ICardRepository'; 3import { ICollectionRepository } from './ICollectionRepository'; 4import { Card } from './Card'; 5import { CardId } from './value-objects/CardId'; 6import { CollectionId } from './value-objects/CollectionId'; 7import { CuratorId } from './value-objects/CuratorId'; 8 9export class LibraryService { 10 constructor( 11 private cardRepository: ICardRepository, 12 private collectionRepository: ICollectionRepository, 13 ) {} 14 15 async addCardToLibrary(card: Card): Promise<Result<void>> { 16 return await this.cardRepository.save(card); 17 } 18 19 async addCardToCollection( 20 cardId: CardId, 21 collectionId: CollectionId, 22 authorId: CuratorId, 23 ): Promise<Result<void>> { 24 const collectionResult = 25 await this.collectionRepository.findById(collectionId); 26 27 if (collectionResult.isErr()) { 28 return err(collectionResult.error); 29 } 30 31 const collection = collectionResult.value; 32 33 if (!collection) { 34 return err(new Error('Collection not found')); 35 } 36 37 const addResult = collection.addCard(cardId, authorId); 38 39 if (addResult.isErr()) { 40 return err(addResult.error); 41 } 42 43 return await this.collectionRepository.save(collection); 44 } 45}