diff --git a/src/modules/flight/flight.controller.ts b/src/modules/flight/flight.controller.ts index 22afc0f..f149902 100644 --- a/src/modules/flight/flight.controller.ts +++ b/src/modules/flight/flight.controller.ts @@ -397,6 +397,38 @@ export class FlightController extends Controller { } satisfies SingleResponse); } + async listAllClasses(req: Request, res: Response) { + const parseQueryResult = paginationQuerySchema.safeParse(req.query); + if (!parseQueryResult.success) { + return this.handleZodError(parseQueryResult.error, res, "query"); + } + const query = parseQueryResult.data; + + const count = await orm.em.count(FlightClass); + + const classes = await orm.em.find( + FlightClass, + {}, + { + limit: query.per_page, + offset: (query.page - 1) * query.per_page, + orderBy: { createdAt: "DESC" }, + populate: ["*"], + }, + ); + + return res.status(200).json({ + data: classes.map(this.mapper.mapClassEntityToResponse.bind(this.mapper)), + errors: null, + meta: { + page: query.page, + per_page: query.per_page, + total_pages: Math.ceil(count / query.per_page), + total_items: count, + }, + } satisfies ListResponse); + } + async listClasses(req: Request, res: Response) { const parseQueryResult = paginationQuerySchema.safeParse(req.query); if (!parseQueryResult.success) { @@ -654,6 +686,11 @@ export class FlightController extends Controller { isAdminMiddleware(this.jwtService, [AdminPermission.createFlightClass]), this.createClass.bind(this), ); + router.get( + "/classes", + createOrmContextMiddleware, + this.listAllClasses.bind(this), + ); router.get( "/:id/classes", createOrmContextMiddleware, diff --git a/src/modules/transportation/transportation.controller.ts b/src/modules/transportation/transportation.controller.ts index be44b64..481ae7e 100644 --- a/src/modules/transportation/transportation.controller.ts +++ b/src/modules/transportation/transportation.controller.ts @@ -268,6 +268,38 @@ export class TransportationController extends Controller { } satisfies SingleResponse); } + async listAllClasses(req: Request, res: Response) { + const parseQueryResult = paginationQuerySchema.safeParse(req.query); + if (!parseQueryResult.success) { + return this.handleZodError(parseQueryResult.error, res, "query"); + } + const query = parseQueryResult.data; + + const count = await orm.em.count(TransportationClass); + + const classes = await orm.em.find( + TransportationClass, + {}, + { + limit: query.per_page, + offset: (query.page - 1) * query.per_page, + orderBy: { createdAt: "DESC" }, + populate: ["*"], + }, + ); + + return res.status(200).json({ + data: classes.map(this.mapper.mapClassEntityToResponse.bind(this.mapper)), + errors: null, + meta: { + page: query.page, + per_page: query.per_page, + total_pages: Math.ceil(count / query.per_page), + total_items: count, + }, + } satisfies ListResponse); + } + async listClasses(req: Request, res: Response) { const parseQueryResult = paginationQuerySchema.safeParse(req.query); if (!parseQueryResult.success) { @@ -564,6 +596,11 @@ export class TransportationController extends Controller { ]), this.createClass.bind(this), ); + router.get( + "/classes", + createOrmContextMiddleware, + this.listAllClasses.bind(this), + ); router.get( "/:id/classes", createOrmContextMiddleware,