fetch available by mission

This commit is contained in:
Julian Krauser 2025-03-11 12:42:18 +01:00
parent cc811717e1
commit c09a14e6ff
10 changed files with 167 additions and 3 deletions

View file

@ -7,6 +7,7 @@ import {
UpdateEquipmentCommand, UpdateEquipmentCommand,
} from "../../../command/configuration/equipment/equipmentCommand"; } from "../../../command/configuration/equipment/equipmentCommand";
import EquipmentCommandHandler from "../../../command/configuration/equipment/equipmentCommandHandler"; import EquipmentCommandHandler from "../../../command/configuration/equipment/equipmentCommandHandler";
import MissionService from "../../../service/operation/missionService";
/** /**
* @description get all equipments * @description get all equipments
@ -63,6 +64,20 @@ export async function getEquipmentById(req: Request, res: Response): Promise<any
res.json(EquipmentFactory.mapToSingle(equipment)); res.json(EquipmentFactory.mapToSingle(equipment));
} }
/**
* @description get available equipments by missionId
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function getAvailabeEquipmentsByMission(req: Request, res: Response): Promise<any> {
const missionId = req.params.missionId;
let mission = await MissionService.getById(missionId);
let equipments = await EquipmentService.getAvailable(mission.mission_start ?? new Date());
res.json(EquipmentFactory.mapToBase(equipments));
}
/** /**
* @description create equipment * @description create equipment
* @param req {Request} Express req object * @param req {Request} Express req object

View file

@ -7,6 +7,7 @@ import {
UpdateForceCommand, UpdateForceCommand,
} from "../../../command/configuration/force/forceCommand"; } from "../../../command/configuration/force/forceCommand";
import ForceCommandHandler from "../../../command/configuration/force/forceCommandHandler"; import ForceCommandHandler from "../../../command/configuration/force/forceCommandHandler";
import MissionService from "../../../service/operation/missionService";
/** /**
* @description get all forces * @description get all forces
@ -63,6 +64,20 @@ export async function getForceById(req: Request, res: Response): Promise<any> {
res.json(ForceFactory.mapToSingle(force)); res.json(ForceFactory.mapToSingle(force));
} }
/**
* @description get available forces by missionId
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function getAvailabeForcesByMission(req: Request, res: Response): Promise<any> {
const missionId = req.params.missionId;
let mission = await MissionService.getById(missionId);
let forces = await ForceService.getAvailable(mission.mission_start ?? new Date());
res.json(ForceFactory.mapToBase(forces));
}
/** /**
* @description create force * @description create force
* @param req {Request} Express req object * @param req {Request} Express req object

View file

@ -7,6 +7,7 @@ import {
UpdateVehicleCommand, UpdateVehicleCommand,
} from "../../../command/configuration/vehicle/vehicleCommand"; } from "../../../command/configuration/vehicle/vehicleCommand";
import VehicleCommandHandler from "../../../command/configuration/vehicle/vehicleCommandHandler"; import VehicleCommandHandler from "../../../command/configuration/vehicle/vehicleCommandHandler";
import MissionService from "../../../service/operation/missionService";
/** /**
* @description get all vehicles * @description get all vehicles
@ -63,6 +64,20 @@ export async function getVehicleById(req: Request, res: Response): Promise<any>
res.json(VehicleFactory.mapToSingle(vehicle)); res.json(VehicleFactory.mapToSingle(vehicle));
} }
/**
* @description get available vehicles by missionId
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function getAvailabeVehiclesByMission(req: Request, res: Response): Promise<any> {
const missionId = req.params.missionId;
let mission = await MissionService.getById(missionId);
let vehicles = await VehicleService.getAvailable(mission.mission_start ?? new Date());
res.json(VehicleFactory.mapToBase(vehicles));
}
/** /**
* @description create vehicle * @description create vehicle
* @param req {Request} Express req object * @param req {Request} Express req object

View file

@ -4,6 +4,7 @@ import {
decommissionEquipmentById, decommissionEquipmentById,
deleteEquipmentById, deleteEquipmentById,
getAllEquipments, getAllEquipments,
getAvailabeEquipmentsByMission,
getEquipmentById, getEquipmentById,
getEquipmentsByIds, getEquipmentsByIds,
updateEquipmentById, updateEquipmentById,
@ -24,6 +25,10 @@ router.get("/:id", async (req: Request, res: Response) => {
await getEquipmentById(req, res); await getEquipmentById(req, res);
}); });
router.get("/available/:missionId", async (req: Request, res: Response) => {
await getAvailabeEquipmentsByMission(req, res);
});
router.post( router.post(
"/", "/",
PermissionHelper.passCheckMiddleware("create", "operation", "equipment"), PermissionHelper.passCheckMiddleware("create", "operation", "equipment"),

View file

@ -6,6 +6,7 @@ import {
getAllForces, getAllForces,
getForceById, getForceById,
getForcesByIds, getForcesByIds,
getAvailabeForcesByMission,
updateForceById, updateForceById,
} from "../../../controller/admin/configuration/forceController"; } from "../../../controller/admin/configuration/forceController";
import PermissionHelper from "../../../helpers/permissionHelper"; import PermissionHelper from "../../../helpers/permissionHelper";
@ -24,6 +25,10 @@ router.get("/:id", async (req: Request, res: Response) => {
await getForceById(req, res); await getForceById(req, res);
}); });
router.get("/available/:missionId", async (req: Request, res: Response) => {
await getAvailabeForcesByMission(req, res);
});
router.post( router.post(
"/", "/",
PermissionHelper.passCheckMiddleware("create", "operation", "force"), PermissionHelper.passCheckMiddleware("create", "operation", "force"),

View file

@ -4,6 +4,7 @@ import {
decommissionVehicleById, decommissionVehicleById,
deleteVehicleById, deleteVehicleById,
getAllVehicles, getAllVehicles,
getAvailabeVehiclesByMission,
getVehicleById, getVehicleById,
getVehiclesByIds, getVehiclesByIds,
updateVehicleById, updateVehicleById,
@ -24,6 +25,10 @@ router.get("/:id", async (req: Request, res: Response) => {
await getVehicleById(req, res); await getVehicleById(req, res);
}); });
router.get("/available/:missionId", async (req: Request, res: Response) => {
await getAvailabeVehiclesByMission(req, res);
});
router.post( router.post(
"/", "/",
PermissionHelper.passCheckMiddleware("create", "operation", "vehicle"), PermissionHelper.passCheckMiddleware("create", "operation", "vehicle"),

View file

@ -16,9 +16,30 @@ var router = express.Router({ mergeParams: true });
router.use("/mission", PermissionHelper.passCheckMiddleware("read", "operation", "mission"), mission); router.use("/mission", PermissionHelper.passCheckMiddleware("read", "operation", "mission"), mission);
router.use("/equipment", PermissionHelper.passCheckMiddleware("read", "configuration", "equipment"), equipment); router.use(
router.use("/force", PermissionHelper.passCheckMiddleware("read", "configuration", "force"), force); "/equipment",
router.use("/vehicle", PermissionHelper.passCheckMiddleware("read", "configuration", "vehicle"), vehicle); PermissionHelper.passCheckSomeMiddleware([
{ requiredPermissions: "read", section: "configuration", module: "equipment" },
{ requiredPermissions: "read", section: "operation", module: "mission" },
]),
equipment
);
router.use(
"/force",
PermissionHelper.passCheckSomeMiddleware([
{ requiredPermissions: "read", section: "configuration", module: "force" },
{ requiredPermissions: "read", section: "operation", module: "mission" },
]),
force
);
router.use(
"/vehicle",
PermissionHelper.passCheckSomeMiddleware([
{ requiredPermissions: "read", section: "configuration", module: "vehicle" },
{ requiredPermissions: "read", section: "operation", module: "mission" },
]),
vehicle
);
router.use("/role", PermissionHelper.passCheckMiddleware("read", "management", "role"), role); router.use("/role", PermissionHelper.passCheckMiddleware("read", "management", "role"), role);
router.use( router.use(

View file

@ -1,3 +1,4 @@
import { Brackets } from "typeorm";
import { dataSource } from "../../data-source"; import { dataSource } from "../../data-source";
import { equipment } from "../../entity/configuration/equipment"; import { equipment } from "../../entity/configuration/equipment";
import DatabaseActionException from "../../exceptions/databaseActionException"; import DatabaseActionException from "../../exceptions/databaseActionException";
@ -75,4 +76,30 @@ export default abstract class EquipmentService {
throw new DatabaseActionException("SELECT", "equipment", err); throw new DatabaseActionException("SELECT", "equipment", err);
}); });
} }
/**
* @description get available equipments
* @returns {Promise<Array<equipment>>}
*/
static async getAvailable(keyDate: Date): Promise<Array<equipment>> {
return await dataSource
.getRepository(equipment)
.createQueryBuilder("equipment")
.where("equipment.commissioned <= :keyDate_start", { keyDate_start: keyDate })
.andWhere(
new Brackets((qb) =>
qb
.where("equipment.decommissioned IS NULL")
.orWhere("equipment.decommissioned >= :keyDate_end", { keyDate_end: keyDate })
)
)
.orderBy("equipment.name")
.getMany()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "equipment", err);
});
}
} }

View file

@ -1,3 +1,4 @@
import { Brackets } from "typeorm";
import { dataSource } from "../../data-source"; import { dataSource } from "../../data-source";
import { force } from "../../entity/configuration/force"; import { force } from "../../entity/configuration/force";
import DatabaseActionException from "../../exceptions/databaseActionException"; import DatabaseActionException from "../../exceptions/databaseActionException";
@ -77,4 +78,32 @@ export default abstract class ForceService {
throw new DatabaseActionException("SELECT", "force", err); throw new DatabaseActionException("SELECT", "force", err);
}); });
} }
/**
* @description get available forces
* @returns {Promise<Array<force>>}
*/
static async getAvailable(keyDate: Date): Promise<Array<force>> {
return await dataSource
.getRepository(force)
.createQueryBuilder("force")
.where("force.commissioned <= :keyDate_start", { keyDate_start: keyDate })
.andWhere(
new Brackets((qb) =>
qb
.where("force.decommissioned IS NULL")
.orWhere("force.decommissioned >= :keyDate_end", { keyDate_end: keyDate })
)
)
.orderBy("force.lastname")
.addOrderBy("force.firstname")
.addOrderBy("force.nameaffix")
.getMany()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "force", err);
});
}
} }

View file

@ -1,3 +1,4 @@
import { Brackets } from "typeorm";
import { dataSource } from "../../data-source"; import { dataSource } from "../../data-source";
import { vehicle } from "../../entity/configuration/vehicle"; import { vehicle } from "../../entity/configuration/vehicle";
import DatabaseActionException from "../../exceptions/databaseActionException"; import DatabaseActionException from "../../exceptions/databaseActionException";
@ -75,4 +76,30 @@ export default abstract class VehicleService {
throw new DatabaseActionException("SELECT", "vehicle", err); throw new DatabaseActionException("SELECT", "vehicle", err);
}); });
} }
/**
* @description get available vehicles
* @returns {Promise<Array<vehicle>>}
*/
static async getAvailable(keyDate: Date): Promise<Array<vehicle>> {
return await dataSource
.getRepository(vehicle)
.createQueryBuilder("vehicle")
.where("vehicle.commissioned <= :keyDate_start", { keyDate_start: keyDate })
.andWhere(
new Brackets((qb) =>
qb
.where("vehicle.decommissioned IS NULL")
.orWhere("vehicle.decommissioned >= :keyDate_end", { keyDate_end: keyDate })
)
)
.orderBy("vehicle.name")
.getMany()
.then((res) => {
return res;
})
.catch((err) => {
throw new DatabaseActionException("SELECT", "vehicle", err);
});
}
} }