A social knowledge tool for researchers built on ATProto
at development 1.4 kB view raw
1import { Controller } from '../../../../../shared/infrastructure/http/Controller'; 2import { Request, Response } from 'express'; 3import { GetNoteCardsForUrlUseCase } from '../../../application/useCases/queries/GetNoteCardsForUrlUseCase'; 4import { CardSortField, SortOrder } from '../../../domain/ICardQueryRepository'; 5 6export class GetNoteCardsForUrlController extends Controller { 7 constructor(private getNoteCardsForUrlUseCase: GetNoteCardsForUrlUseCase) { 8 super(); 9 } 10 11 async executeImpl(req: Request, res: Response): Promise<any> { 12 try { 13 const { url } = req.query; 14 const page = req.query.page 15 ? parseInt(req.query.page as string) 16 : undefined; 17 const limit = req.query.limit 18 ? parseInt(req.query.limit as string) 19 : undefined; 20 const sortBy = req.query.sortBy as CardSortField; 21 const sortOrder = req.query.sortOrder as SortOrder; 22 23 if (!url || typeof url !== 'string') { 24 return this.badRequest(res, 'URL query parameter is required'); 25 } 26 27 const result = await this.getNoteCardsForUrlUseCase.execute({ 28 url, 29 page, 30 limit, 31 sortBy, 32 sortOrder, 33 }); 34 35 if (result.isErr()) { 36 return this.fail(res, result.error); 37 } 38 39 return this.ok(res, result.value); 40 } catch (error: any) { 41 return this.fail(res, error); 42 } 43 } 44}