A social knowledge tool for researchers built on ATProto
1import { Controller } from '../../../../../shared/infrastructure/http/Controller';
2import { Request, Response } from 'express';
3import { GetLibrariesForUrlUseCase } from '../../../application/useCases/queries/GetLibrariesForUrlUseCase';
4import { CardSortField, SortOrder } from '../../../domain/ICardQueryRepository';
5
6export class GetLibrariesForUrlController extends Controller {
7 constructor(private getLibrariesForUrlUseCase: GetLibrariesForUrlUseCase) {
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.getLibrariesForUrlUseCase.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}