A social knowledge tool for researchers built on ATProto
at development 1.7 kB view raw
1import { Controller } from '../../../../../shared/infrastructure/http/Controller'; 2import { Response } from 'express'; 3import { RemoveCardFromCollectionUseCase } from '../../../application/useCases/commands/RemoveCardFromCollectionUseCase'; 4import { AuthenticatedRequest } from '../../../../../shared/infrastructure/http/middleware/AuthMiddleware'; 5 6export class RemoveCardFromCollectionController extends Controller { 7 constructor( 8 private removeCardFromCollectionUseCase: RemoveCardFromCollectionUseCase, 9 ) { 10 super(); 11 } 12 13 async executeImpl(req: AuthenticatedRequest, res: Response): Promise<any> { 14 try { 15 const { cardId } = req.params; 16 const { collectionIds: collectionIdsParam } = req.query; 17 const curatorId = req.did; 18 19 if (!curatorId) { 20 return this.unauthorized(res); 21 } 22 23 if (!cardId) { 24 return this.badRequest(res, 'Card ID is required'); 25 } 26 27 if (!collectionIdsParam || typeof collectionIdsParam !== 'string') { 28 return this.badRequest( 29 res, 30 'Collection IDs query parameter is required', 31 ); 32 } 33 34 const collectionIds = collectionIdsParam 35 .split(',') 36 .filter((id) => id.trim() !== ''); 37 38 if (collectionIds.length === 0) { 39 return this.badRequest(res, 'At least one collection ID is required'); 40 } 41 42 const result = await this.removeCardFromCollectionUseCase.execute({ 43 cardId, 44 collectionIds, 45 curatorId, 46 }); 47 48 if (result.isErr()) { 49 return this.fail(res, result.error); 50 } 51 52 return this.ok(res, result.value); 53 } catch (error: any) { 54 return this.fail(res, error); 55 } 56 } 57}