From 0220f468aceec91203474cf1e2422b29702fe988 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Tue, 8 Apr 2025 09:22:19 +0200 Subject: [PATCH] mission count visbility by permissions --- .../admin/operation/missionController.ts | 14 ++++++++++++-- src/service/operation/missionService.ts | 17 +++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/controller/admin/operation/missionController.ts b/src/controller/admin/operation/missionController.ts index 955c985..298d3d1 100644 --- a/src/controller/admin/operation/missionController.ts +++ b/src/controller/admin/operation/missionController.ts @@ -1,9 +1,11 @@ import { Request, Response } from "express"; import MissionService from "../../../service/operation/missionService"; import MissionFactory from "../../../factory/admin/operation/mission"; -import { DeleteMissionCommand, SyncMissionCommand } from "../../../command/operation/mission/missionCommand"; +import { DeleteMissionCommand } from "../../../command/operation/mission/missionCommand"; import MissionCommandHandler from "../../../command/operation/mission/missionCommandHandler"; import SocketServer from "../../../websocket"; +import PermissionHelper from "../../../helpers/permissionHelper"; +import moment from "moment"; /** * @description get all missions @@ -16,7 +18,15 @@ export async function getAllMissions(req: Request, res: Response): Promise let count = parseInt((req.query.count as string) ?? "25"); let noLimit = req.query.noLimit === "true"; - let [missions, total] = await MissionService.getAll({ offset, count, noLimit }); + let maxVisInDays = PermissionHelper.canValue(req.permissions, "maxVisInDays", true); + let maxVisByMissions = PermissionHelper.canValue(req.permissions, "maxVisByMissions", true); + + let [missions, total] = await MissionService.getAll({ + offset: maxVisByMissions != "" && parseInt(maxVisByMissions) <= 25 ? 0 : offset, + count: maxVisByMissions != "" ? Math.min(parseInt(maxVisByMissions), (offset + 1) * count) : count, + noLimit: maxVisByMissions != "" ? false : noLimit, + laterThan: maxVisInDays != "" ? moment().subtract(parseInt(maxVisInDays), "days").toDate() : undefined, + }); res.json({ missions: MissionFactory.mapToBaseShort(missions), diff --git a/src/service/operation/missionService.ts b/src/service/operation/missionService.ts index 7d4a941..923c12a 100644 --- a/src/service/operation/missionService.ts +++ b/src/service/operation/missionService.ts @@ -1,3 +1,4 @@ +import { Brackets, IsNull, MoreThanOrEqual } from "typeorm"; import { dataSource } from "../../data-source"; import { mission } from "../../entity/operation/mission"; import DatabaseActionException from "../../exceptions/databaseActionException"; @@ -11,20 +12,32 @@ export default abstract class MissionService { offset = 0, count = 25, noLimit = false, + laterThan = undefined, }: { offset?: number; count?: number; noLimit?: boolean; + laterThan?: Date; }): Promise<[Array, number]> { let query = dataSource.getRepository(mission).createQueryBuilder("mission"); + if (laterThan != undefined) { + query = query + .where( + new Brackets((qb) => { + qb.where({ mission_start: IsNull() }).andWhere({ createdAt: MoreThanOrEqual(laterThan) }); + }) + ) + .orWhere({ mission_start: MoreThanOrEqual(laterThan) }); + } + if (!noLimit) { query = query.offset(offset).limit(count); } return await query - .orderBy("mission.mission_start") - .addOrderBy("mission.createdAt") + .orderBy("mission.mission_start", "DESC") + .addOrderBy("mission.createdAt", "DESC") .getManyAndCount() .then((res) => { return res;