A social knowledge tool for researchers built on ATProto
1import { Controller } from '../../../../../shared/infrastructure/http/Controller';
2import { Request, Response } from 'express';
3import { GetUrlCardsUseCase } from '../../../application/useCases/queries/GetUrlCardsUseCase';
4import { CardSortField, SortOrder } from '../../../domain/ICardQueryRepository';
5
6export class GetUserUrlCardsController extends Controller {
7 constructor(private getUrlCardsUseCase: GetUrlCardsUseCase) {
8 super();
9 }
10
11 async executeImpl(req: Request, res: Response): Promise<any> {
12 try {
13 const { identifier } = req.params;
14 const { page, limit, sortBy, sortOrder } = req.query;
15
16 if (!identifier) {
17 return this.fail(res, 'Identifier (DID or handle) is required');
18 }
19
20 const result = await this.getUrlCardsUseCase.execute({
21 userId: identifier,
22 page: page ? parseInt(page as string) : undefined,
23 limit: limit ? parseInt(limit as string) : undefined,
24 sortBy: sortBy as CardSortField,
25 sortOrder: sortOrder as SortOrder,
26 });
27
28 if (result.isErr()) {
29 return this.fail(res, result.error);
30 }
31
32 return this.ok(res, result.value);
33 } catch (error: any) {
34 return this.fail(res, error);
35 }
36 }
37}