diff --git a/src/command/configuration/equipment/equipmentCommand.ts b/src/command/configuration/equipment/equipmentCommand.ts new file mode 100644 index 0000000..675cef1 --- /dev/null +++ b/src/command/configuration/equipment/equipmentCommand.ts @@ -0,0 +1,20 @@ +export interface CreateEquipmentCommand { + code?: string; + type?: string; + name: string; + commissioned?: Date; + decommissioned?: Date; +} + +export interface UpdateEquipmentCommand { + id: string; + code?: string; + type?: string; + name: string; + commissioned?: Date; + decommissioned?: Date; +} + +export interface DeleteEquipmentCommand { + id: string; +} diff --git a/src/command/configuration/equipment/equipmentCommandHandler.ts b/src/command/configuration/equipment/equipmentCommandHandler.ts new file mode 100644 index 0000000..4d43368 --- /dev/null +++ b/src/command/configuration/equipment/equipmentCommandHandler.ts @@ -0,0 +1,74 @@ +import { dataSource } from "../../../data-source"; +import { equipment } from "../../../entity/configuration/equipment"; +import DatabaseActionException from "../../../exceptions/databaseActionException"; +import { CreateEquipmentCommand, DeleteEquipmentCommand, UpdateEquipmentCommand } from "./equipmentCommand"; + +export default abstract class EquipmentCommandHandler { + /** + * @description create equipment + * @param {CreateEquipmentCommand} createEquipment + * @returns {Promise} + */ + static async create(createEquipment: CreateEquipmentCommand): Promise { + return await dataSource + .createQueryBuilder() + .insert() + .into(equipment) + .values({ + code: createEquipment.code, + type: createEquipment.type, + name: createEquipment.name, + commissioned: createEquipment.commissioned, + decommissioned: createEquipment.decommissioned, + }) + .execute() + .then((result) => { + return result.identifiers[0].id; + }) + .catch((err) => { + throw new DatabaseActionException("CREATE", "equipment", err); + }); + } + + /** + * @description update equipment + * @param {UpdateEquipmentCommand} updateEquipment + * @returns {Promise} + */ + static async update(updateEquipment: UpdateEquipmentCommand): Promise { + return await dataSource + .createQueryBuilder() + .update(equipment) + .set({ + code: updateEquipment.code, + type: updateEquipment.type, + name: updateEquipment.name, + commissioned: updateEquipment.commissioned, + decommissioned: updateEquipment.decommissioned, + }) + .where("id = :id", { id: updateEquipment.id }) + .execute() + .then(() => {}) + .catch((err) => { + throw new DatabaseActionException("UPDATE", "equipment", err); + }); + } + + /** + * @description delete equipment + * @param {DeleteEquipmentCommand} deleteEquipment + * @returns {Promise} + */ + static async delete(deleteEquipment: DeleteEquipmentCommand): Promise { + return await dataSource + .createQueryBuilder() + .delete() + .from(equipment) + .where("id = :id", { id: deleteEquipment.id }) + .execute() + .then(() => {}) + .catch((err) => { + throw new DatabaseActionException("DELETE", "equipment", err); + }); + } +} diff --git a/src/command/configuration/force/forceCommand.ts b/src/command/configuration/force/forceCommand.ts new file mode 100644 index 0000000..ff7cbbc --- /dev/null +++ b/src/command/configuration/force/forceCommand.ts @@ -0,0 +1,22 @@ +export interface CreateForceCommand { + internalId?: string; + firstname: string; + lastname: string; + nameaffix: string; + commissioned?: Date; + decommissioned?: Date; +} + +export interface UpdateForceCommand { + id: string; + internalId?: string; + firstname: string; + lastname: string; + nameaffix: string; + commissioned?: Date; + decommissioned?: Date; +} + +export interface DeleteForceCommand { + id: string; +} diff --git a/src/command/configuration/force/forceCommandHandler.ts b/src/command/configuration/force/forceCommandHandler.ts new file mode 100644 index 0000000..59fda38 --- /dev/null +++ b/src/command/configuration/force/forceCommandHandler.ts @@ -0,0 +1,76 @@ +import { dataSource } from "../../../data-source"; +import { force } from "../../../entity/configuration/force"; +import DatabaseActionException from "../../../exceptions/databaseActionException"; +import { CreateForceCommand, DeleteForceCommand, UpdateForceCommand } from "./forceCommand"; + +export default abstract class ForceCommandHandler { + /** + * @description create force + * @param {CreateForceCommand} createForce + * @returns {Promise} + */ + static async create(createForce: CreateForceCommand): Promise { + return await dataSource + .createQueryBuilder() + .insert() + .into(force) + .values({ + internalId: createForce.internalId, + firstname: createForce.firstname, + lastname: createForce.lastname, + nameaffix: createForce.nameaffix, + commissioned: createForce.commissioned, + decommissioned: createForce.decommissioned, + }) + .execute() + .then((result) => { + return result.identifiers[0].id; + }) + .catch((err) => { + throw new DatabaseActionException("CREATE", "force", err); + }); + } + + /** + * @description update force + * @param {UpdateForceCommand} updateForce + * @returns {Promise} + */ + static async update(updateForce: UpdateForceCommand): Promise { + return await dataSource + .createQueryBuilder() + .update(force) + .set({ + internalId: updateForce.internalId, + firstname: updateForce.firstname, + lastname: updateForce.lastname, + nameaffix: updateForce.nameaffix, + commissioned: updateForce.commissioned, + decommissioned: updateForce.decommissioned, + }) + .where("id = :id", { id: updateForce.id }) + .execute() + .then(() => {}) + .catch((err) => { + throw new DatabaseActionException("UPDATE", "force", err); + }); + } + + /** + * @description delete force + * @param {DeleteForceCommand} deleteForce + * @returns {Promise} + */ + static async delete(deleteForce: DeleteForceCommand): Promise { + return await dataSource + .createQueryBuilder() + .delete() + .from(force) + .where("id = :id", { id: deleteForce.id }) + .execute() + .then(() => {}) + .catch((err) => { + throw new DatabaseActionException("DELETE", "force", err); + }); + } +} diff --git a/src/command/configuration/member/memberCommand.ts b/src/command/configuration/member/memberCommand.ts deleted file mode 100644 index f5c03d1..0000000 --- a/src/command/configuration/member/memberCommand.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface CreateMemberCommand { - salutationId: number; - firstname: string; - lastname: string; - nameaffix: string; - birthdate: Date; - internalId?: string; -} - -export interface UpdateMemberCommand { - id: string; - salutationId: number; - firstname: string; - lastname: string; - nameaffix: string; - birthdate: Date; - internalId?: string; -} - -export interface DeleteMemberCommand { - id: string; -} diff --git a/src/command/configuration/member/memberCommandHandler.ts b/src/command/configuration/member/memberCommandHandler.ts deleted file mode 100644 index 0b0eb69..0000000 --- a/src/command/configuration/member/memberCommandHandler.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { dataSource } from "../../../data-source"; -import { member } from "../../../entity/configuration/member"; -import DatabaseActionException from "../../../exceptions/databaseActionException"; -import { CreateMemberCommand, DeleteMemberCommand, UpdateMemberCommand } from "./memberCommand"; - -export default abstract class MemberCommandHandler { - /** - * @description create member - * @param {CreateMemberCommand} createMember - * @returns {Promise} - */ - static async create(createMember: CreateMemberCommand): Promise { - return await dataSource - .createQueryBuilder() - .insert() - .into(member) - .values({ - firstname: createMember.firstname, - lastname: createMember.lastname, - nameaffix: createMember.nameaffix, - }) - .execute() - .then((result) => { - return result.identifiers[0].id; - }) - .catch((err) => { - throw new DatabaseActionException("CREATE", "member", err); - }); - } - - /** - * @description update member - * @param {UpdateMemberCommand} updateMember - * @returns {Promise} - */ - static async update(updateMember: UpdateMemberCommand): Promise { - return await dataSource - .createQueryBuilder() - .update(member) - .set({ - firstname: updateMember.firstname, - lastname: updateMember.lastname, - nameaffix: updateMember.nameaffix, - }) - .where("id = :id", { id: updateMember.id }) - .execute() - .then(() => {}) - .catch((err) => { - throw new DatabaseActionException("UPDATE", "member", err); - }); - } - - /** - * @description delete member - * @param {DeleteMemberCommand} deleteMember - * @returns {Promise} - */ - static async delete(deleteMember: DeleteMemberCommand): Promise { - return await dataSource - .createQueryBuilder() - .delete() - .from(member) - .where("id = :id", { id: deleteMember.id }) - .execute() - .then(() => {}) - .catch((err) => { - throw new DatabaseActionException("DELETE", "member", err); - }); - } -} diff --git a/src/command/configuration/vehicle/vehicleCommand.ts b/src/command/configuration/vehicle/vehicleCommand.ts new file mode 100644 index 0000000..c2eb562 --- /dev/null +++ b/src/command/configuration/vehicle/vehicleCommand.ts @@ -0,0 +1,20 @@ +export interface CreateVehicleCommand { + code?: string; + type?: string; + name: string; + commissioned?: Date; + decommissioned?: Date; +} + +export interface UpdateVehicleCommand { + id: string; + code?: string; + type?: string; + name: string; + commissioned?: Date; + decommissioned?: Date; +} + +export interface DeleteVehicleCommand { + id: string; +} diff --git a/src/command/configuration/vehicle/vehicleCommandHandler.ts b/src/command/configuration/vehicle/vehicleCommandHandler.ts new file mode 100644 index 0000000..1fe4eb7 --- /dev/null +++ b/src/command/configuration/vehicle/vehicleCommandHandler.ts @@ -0,0 +1,74 @@ +import { dataSource } from "../../../data-source"; +import { vehicle } from "../../../entity/configuration/vehicle"; +import DatabaseActionException from "../../../exceptions/databaseActionException"; +import { CreateVehicleCommand, DeleteVehicleCommand, UpdateVehicleCommand } from "./vehicleCommand"; + +export default abstract class VehicleCommandHandler { + /** + * @description create vehicle + * @param {CreateVehicleCommand} createVehicle + * @returns {Promise} + */ + static async create(createVehicle: CreateVehicleCommand): Promise { + return await dataSource + .createQueryBuilder() + .insert() + .into(vehicle) + .values({ + code: createVehicle.code, + type: createVehicle.type, + name: createVehicle.name, + commissioned: createVehicle.commissioned, + decommissioned: createVehicle.decommissioned, + }) + .execute() + .then((result) => { + return result.identifiers[0].id; + }) + .catch((err) => { + throw new DatabaseActionException("CREATE", "vehicle", err); + }); + } + + /** + * @description update vehicle + * @param {UpdateVehicleCommand} updateVehicle + * @returns {Promise} + */ + static async update(updateVehicle: UpdateVehicleCommand): Promise { + return await dataSource + .createQueryBuilder() + .update(vehicle) + .set({ + code: updateVehicle.code, + type: updateVehicle.type, + name: updateVehicle.name, + commissioned: updateVehicle.commissioned, + decommissioned: updateVehicle.decommissioned, + }) + .where("id = :id", { id: updateVehicle.id }) + .execute() + .then(() => {}) + .catch((err) => { + throw new DatabaseActionException("UPDATE", "vehicle", err); + }); + } + + /** + * @description delete vehicle + * @param {DeleteVehicleCommand} deleteVehicle + * @returns {Promise} + */ + static async delete(deleteVehicle: DeleteVehicleCommand): Promise { + return await dataSource + .createQueryBuilder() + .delete() + .from(vehicle) + .where("id = :id", { id: deleteVehicle.id }) + .execute() + .then(() => {}) + .catch((err) => { + throw new DatabaseActionException("DELETE", "vehicle", err); + }); + } +} diff --git a/src/controller/admin/configuration/equipmentController.ts b/src/controller/admin/configuration/equipmentController.ts new file mode 100644 index 0000000..8529665 --- /dev/null +++ b/src/controller/admin/configuration/equipmentController.ts @@ -0,0 +1,133 @@ +import { Request, Response } from "express"; +import EquipmentService from "../../../service/configuration/equipmentService"; +import EquipmentFactory from "../../../factory/admin/configuration/equipment"; +import { + CreateEquipmentCommand, + DeleteEquipmentCommand, + UpdateEquipmentCommand, +} from "../../../command/configuration/equipment/equipmentCommand"; +import EquipmentCommandHandler from "../../../command/configuration/equipment/equipmentCommandHandler"; + +/** + * @description get all equipments + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getAllEquipments(req: Request, res: Response): Promise { + let offset = parseInt((req.query.offset as string) ?? "0"); + let count = parseInt((req.query.count as string) ?? "25"); + let search = (req.query.search as string) ?? ""; + let noLimit = req.query.noLimit === "true"; + let ids = ((req.query.ids ?? "") as string).split(",").filter((i) => i); + + let [equipments, total] = await EquipmentService.getAll({ offset, count, search, noLimit, ids }); + + res.json({ + equipments: EquipmentFactory.mapToBase(equipments), + total: total, + offset: offset, + count: count, + }); +} + +/** + * @description get equipments by Ids + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getEquipmentsByIds(req: Request, res: Response): Promise { + let ids = req.body.ids as Array; + + let [equipments, total] = await EquipmentService.getAll({ noLimit: true, ids }); + + res.json({ + equipments: EquipmentFactory.mapToBase(equipments), + total: total, + offset: 0, + count: total, + }); +} + +/** + * @description get equipment by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getEquipmentById(req: Request, res: Response): Promise { + const equipmentId = req.params.id; + let equipment = await EquipmentService.getById(equipmentId); + + res.json(EquipmentFactory.mapToSingle(equipment)); +} + +/** + * @description create equipment + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function createEquipment(req: Request, res: Response): Promise { + const code = req.body.code || null; + const type = req.body.type || null; + const name = req.body.name; + const commissioned = req.body.commissioned || undefined; + const decommissioned = req.body.decommissioned || undefined; + + let createEquipment: CreateEquipmentCommand = { + code, + type, + name, + commissioned, + decommissioned, + }; + let equipmentId = await EquipmentCommandHandler.create(createEquipment); + + res.status(200).send(equipmentId); +} + +/** + * @description update equipment by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function updateEquipmentById(req: Request, res: Response): Promise { + const equipmentId = req.params.id; + const code = req.body.code || null; + const type = req.body.type || null; + const name = req.body.name; + const commissioned = req.body.commissioned || undefined; + const decommissioned = req.body.decommissioned || undefined; + + let updateEquipment: UpdateEquipmentCommand = { + id: equipmentId, + code, + type, + name, + commissioned, + decommissioned, + }; + await EquipmentCommandHandler.update(updateEquipment); + + res.sendStatus(204); +} + +/** + * @description delete equipment by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function deleteEquipmentById(req: Request, res: Response): Promise { + const equipmentId = req.params.id; + + let deleteEquipment: DeleteEquipmentCommand = { + id: equipmentId, + }; + await EquipmentCommandHandler.delete(deleteEquipment); + + res.sendStatus(204); +} diff --git a/src/controller/admin/configuration/forceController.ts b/src/controller/admin/configuration/forceController.ts new file mode 100644 index 0000000..789de1e --- /dev/null +++ b/src/controller/admin/configuration/forceController.ts @@ -0,0 +1,137 @@ +import { Request, Response } from "express"; +import ForceService from "../../../service/configuration/forceService"; +import ForceFactory from "../../../factory/admin/configuration/force"; +import { + CreateForceCommand, + DeleteForceCommand, + UpdateForceCommand, +} from "../../../command/configuration/force/forceCommand"; +import ForceCommandHandler from "../../../command/configuration/force/forceCommandHandler"; + +/** + * @description get all forces + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getAllForces(req: Request, res: Response): Promise { + let offset = parseInt((req.query.offset as string) ?? "0"); + let count = parseInt((req.query.count as string) ?? "25"); + let search = (req.query.search as string) ?? ""; + let noLimit = req.query.noLimit === "true"; + let ids = ((req.query.ids ?? "") as string).split(",").filter((i) => i); + + let [forces, total] = await ForceService.getAll({ offset, count, search, noLimit, ids }); + + res.json({ + forces: ForceFactory.mapToBase(forces), + total: total, + offset: offset, + count: count, + }); +} + +/** + * @description get forces by Ids + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getForcesByIds(req: Request, res: Response): Promise { + let ids = req.body.ids as Array; + + let [forces, total] = await ForceService.getAll({ noLimit: true, ids }); + + res.json({ + forces: ForceFactory.mapToBase(forces), + total: total, + offset: 0, + count: total, + }); +} + +/** + * @description get force by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getForceById(req: Request, res: Response): Promise { + const forceId = req.params.id; + let force = await ForceService.getById(forceId); + + res.json(ForceFactory.mapToSingle(force)); +} + +/** + * @description create force + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function createForce(req: Request, res: Response): Promise { + const internalId = req.body.internalId || null; + const firstname = req.body.firstname; + const lastname = req.body.lastname; + const nameaffix = req.body.nameaffix; + const commissioned = req.body.commissioned || undefined; + const decommissioned = req.body.decommissioned || undefined; + + let createForce: CreateForceCommand = { + firstname, + lastname, + nameaffix, + internalId, + commissioned, + decommissioned, + }; + let forceId = await ForceCommandHandler.create(createForce); + + res.status(200).send(forceId); +} + +/** + * @description update force by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function updateForceById(req: Request, res: Response): Promise { + const forceId = req.params.id; + const internalId = req.body.internalId || null; + const firstname = req.body.firstname; + const lastname = req.body.lastname; + const nameaffix = req.body.nameaffix; + const commissioned = req.body.commissioned || undefined; + const decommissioned = req.body.decommissioned || undefined; + + let updateForce: UpdateForceCommand = { + id: forceId, + firstname, + lastname, + nameaffix, + internalId, + commissioned, + decommissioned, + }; + await ForceCommandHandler.update(updateForce); + + res.sendStatus(204); +} + +/** + * @description delete force by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function deleteForceById(req: Request, res: Response): Promise { + const forceId = req.params.id; + + let deleteForce: DeleteForceCommand = { + id: forceId, + }; + await ForceCommandHandler.delete(deleteForce); + + res.sendStatus(204); +} diff --git a/src/controller/admin/configuration/memberController.ts b/src/controller/admin/configuration/memberController.ts deleted file mode 100644 index 8225c98..0000000 --- a/src/controller/admin/configuration/memberController.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { Request, Response } from "express"; -import MemberService from "../../../service/configuration/memberService"; -import MemberFactory from "../../../factory/admin/configuration/member"; -import { - CreateMemberCommand, - DeleteMemberCommand, - UpdateMemberCommand, -} from "../../../command/configuration/member/memberCommand"; -import MemberCommandHandler from "../../../command/configuration/member/memberCommandHandler"; - -/** - * @description get all members - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function getAllMembers(req: Request, res: Response): Promise { - let offset = parseInt((req.query.offset as string) ?? "0"); - let count = parseInt((req.query.count as string) ?? "25"); - let search = (req.query.search as string) ?? ""; - let noLimit = req.query.noLimit === "true"; - let ids = ((req.query.ids ?? "") as string).split(",").filter((i) => i); - - let [members, total] = await MemberService.getAll({ offset, count, search, noLimit, ids }); - - res.json({ - members: MemberFactory.mapToBase(members), - total: total, - offset: offset, - count: count, - }); -} - -/** - * @description get members by Ids - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function getMembersByIds(req: Request, res: Response): Promise { - let ids = req.body.ids as Array; - - let [members, total] = await MemberService.getAll({ noLimit: true, ids }); - - res.json({ - members: MemberFactory.mapToBase(members), - total: total, - offset: 0, - count: total, - }); -} - -/** - * @description get member by id - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function getMemberById(req: Request, res: Response): Promise { - const memberId = req.params.id; - let member = await MemberService.getById(memberId); - - res.json(MemberFactory.mapToSingle(member)); -} - -/** - * @description create member - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function createMember(req: Request, res: Response): Promise { - const salutationId = parseInt(req.body.salutationId); - const firstname = req.body.firstname; - const lastname = req.body.lastname; - const nameaffix = req.body.nameaffix; - const birthdate = req.body.birthdate; - const internalId = req.body.internalId || null; - - let createMember: CreateMemberCommand = { - salutationId, - firstname, - lastname, - nameaffix, - birthdate, - internalId, - }; - let memberId = await MemberCommandHandler.create(createMember); - - res.status(200).send(memberId); -} - -/** - * @description update member by id - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function updateMemberById(req: Request, res: Response): Promise { - const memberId = req.params.id; - const salutationId = parseInt(req.body.salutationId); - const firstname = req.body.firstname; - const lastname = req.body.lastname; - const nameaffix = req.body.nameaffix; - const birthdate = req.body.birthdate; - const internalId = req.body.internalId || null; - - let updateMember: UpdateMemberCommand = { - id: memberId, - salutationId, - firstname, - lastname, - nameaffix, - birthdate, - internalId, - }; - await MemberCommandHandler.update(updateMember); - - res.sendStatus(204); -} - -/** - * @description delete member by id - * @param req {Request} Express req object - * @param res {Response} Express res object - * @returns {Promise<*>} - */ -export async function deleteMemberById(req: Request, res: Response): Promise { - const memberId = req.params.id; - - let deleteMember: DeleteMemberCommand = { - id: memberId, - }; - await MemberCommandHandler.delete(deleteMember); - - res.sendStatus(204); -} diff --git a/src/controller/admin/configuration/vehicleController.ts b/src/controller/admin/configuration/vehicleController.ts new file mode 100644 index 0000000..ac17265 --- /dev/null +++ b/src/controller/admin/configuration/vehicleController.ts @@ -0,0 +1,133 @@ +import { Request, Response } from "express"; +import VehicleService from "../../../service/configuration/vehicleService"; +import VehicleFactory from "../../../factory/admin/configuration/vehicle"; +import { + CreateVehicleCommand, + DeleteVehicleCommand, + UpdateVehicleCommand, +} from "../../../command/configuration/vehicle/vehicleCommand"; +import VehicleCommandHandler from "../../../command/configuration/vehicle/vehicleCommandHandler"; + +/** + * @description get all vehicles + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getAllVehicles(req: Request, res: Response): Promise { + let offset = parseInt((req.query.offset as string) ?? "0"); + let count = parseInt((req.query.count as string) ?? "25"); + let search = (req.query.search as string) ?? ""; + let noLimit = req.query.noLimit === "true"; + let ids = ((req.query.ids ?? "") as string).split(",").filter((i) => i); + + let [vehicles, total] = await VehicleService.getAll({ offset, count, search, noLimit, ids }); + + res.json({ + vehicles: VehicleFactory.mapToBase(vehicles), + total: total, + offset: offset, + count: count, + }); +} + +/** + * @description get vehicles by Ids + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getVehiclesByIds(req: Request, res: Response): Promise { + let ids = req.body.ids as Array; + + let [vehicles, total] = await VehicleService.getAll({ noLimit: true, ids }); + + res.json({ + vehicles: VehicleFactory.mapToBase(vehicles), + total: total, + offset: 0, + count: total, + }); +} + +/** + * @description get vehicle by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getVehicleById(req: Request, res: Response): Promise { + const vehicleId = req.params.id; + let vehicle = await VehicleService.getById(vehicleId); + + res.json(VehicleFactory.mapToSingle(vehicle)); +} + +/** + * @description create vehicle + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function createVehicle(req: Request, res: Response): Promise { + const code = req.body.code || null; + const type = req.body.type || null; + const name = req.body.name; + const commissioned = req.body.commissioned || undefined; + const decommissioned = req.body.decommissioned || undefined; + + let createVehicle: CreateVehicleCommand = { + code, + type, + name, + commissioned, + decommissioned, + }; + let vehicleId = await VehicleCommandHandler.create(createVehicle); + + res.status(200).send(vehicleId); +} + +/** + * @description update vehicle by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function updateVehicleById(req: Request, res: Response): Promise { + const vehicleId = req.params.id; + const code = req.body.code || null; + const type = req.body.type || null; + const name = req.body.name; + const commissioned = req.body.commissioned || undefined; + const decommissioned = req.body.decommissioned || undefined; + + let updateVehicle: UpdateVehicleCommand = { + id: vehicleId, + code, + type, + name, + commissioned, + decommissioned, + }; + await VehicleCommandHandler.update(updateVehicle); + + res.sendStatus(204); +} + +/** + * @description delete vehicle by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function deleteVehicleById(req: Request, res: Response): Promise { + const vehicleId = req.params.id; + + let deleteVehicle: DeleteVehicleCommand = { + id: vehicleId, + }; + await VehicleCommandHandler.delete(deleteVehicle); + + res.sendStatus(204); +} diff --git a/src/data-source.ts b/src/data-source.ts index 3585264..6fe9083 100644 --- a/src/data-source.ts +++ b/src/data-source.ts @@ -9,7 +9,7 @@ import { invite } from "./entity/management/invite"; import { userPermission } from "./entity/management/user_permission"; import { role } from "./entity/management/role"; import { rolePermission } from "./entity/management/role_permission"; -import { member } from "./entity/configuration/member"; +import { force } from "./entity/configuration/force"; import { reset } from "./entity/reset"; import { CreateSchema1739697068682 } from "./migrations/1739697068682-CreateSchema"; @@ -24,7 +24,7 @@ const dataSource = new DataSource({ synchronize: false, logging: process.env.NODE_ENV ? true : ["schema", "error", "warn", "log", "migration"], bigNumberStrings: false, - entities: [user, refresh, invite, reset, userPermission, role, rolePermission, member], + entities: [user, refresh, invite, reset, userPermission, role, rolePermission, force], migrations: [CreateSchema1739697068682], migrationsRun: true, migrationsTransactionMode: "each", diff --git a/src/entity/configuration/member.ts b/src/entity/configuration/force.ts similarity index 96% rename from src/entity/configuration/member.ts rename to src/entity/configuration/force.ts index 82588c9..ed116a9 100644 --- a/src/entity/configuration/member.ts +++ b/src/entity/configuration/force.ts @@ -1,7 +1,7 @@ import { Column, Entity, PrimaryColumn } from "typeorm"; @Entity() -export class member { +export class force { @PrimaryColumn({ generated: "uuid" }) id: string; diff --git a/src/factory/admin/configuration/equipment.ts b/src/factory/admin/configuration/equipment.ts new file mode 100644 index 0000000..07fb46c --- /dev/null +++ b/src/factory/admin/configuration/equipment.ts @@ -0,0 +1,29 @@ +import { equipment } from "../../../entity/configuration/equipment"; +import { EquipmentViewModel } from "../../../viewmodel/admin/configuration/equipment.models"; + +export default abstract class EquipmentFactory { + /** + * @description map record to equipment + * @param {equipment} record + * @returns {EquipmentViewModel} + */ + public static mapToSingle(record: equipment): EquipmentViewModel { + return { + id: record.id, + code: record.code, + type: record.type, + name: record.name, + commissioned: record.commissioned, + decommissioned: record.decommissioned, + }; + } + + /** + * @description map records to equipment + * @param {Array} records + * @returns {Array} + */ + public static mapToBase(records: Array): Array { + return records.map((r) => this.mapToSingle(r)); + } +} diff --git a/src/factory/admin/configuration/force.ts b/src/factory/admin/configuration/force.ts new file mode 100644 index 0000000..5757506 --- /dev/null +++ b/src/factory/admin/configuration/force.ts @@ -0,0 +1,30 @@ +import { force } from "../../../entity/configuration/force"; +import { ForceViewModel } from "../../../viewmodel/admin/configuration/force.models"; + +export default abstract class ForceFactory { + /** + * @description map record to force + * @param {force} record + * @returns {ForceViewModel} + */ + public static mapToSingle(record: force): ForceViewModel { + return { + id: record.id, + internalId: record.internalId, + firstname: record.firstname, + lastname: record.lastname, + nameaffix: record.nameaffix, + commissioned: record.commissioned, + decommissioned: record.decommissioned, + }; + } + + /** + * @description map records to force + * @param {Array} records + * @returns {Array} + */ + public static mapToBase(records: Array): Array { + return records.map((r) => this.mapToSingle(r)); + } +} diff --git a/src/factory/admin/configuration/member.ts b/src/factory/admin/configuration/member.ts deleted file mode 100644 index 469af18..0000000 --- a/src/factory/admin/configuration/member.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { member } from "../../../entity/configuration/member"; -import { MemberViewModel } from "../../../viewmodel/admin/configuration/member.models"; - -export default abstract class MemberFactory { - /** - * @description map record to member - * @param {member} record - * @returns {MemberViewModel} - */ - public static mapToSingle(record: member): MemberViewModel { - return { - id: record?.id, - firstname: record?.firstname, - lastname: record?.lastname, - nameaffix: record?.nameaffix, - }; - } - - /** - * @description map records to member - * @param {Array} records - * @returns {Array} - */ - public static mapToBase(records: Array): Array { - return records.map((r) => this.mapToSingle(r)); - } -} diff --git a/src/factory/admin/configuration/vehicle.ts b/src/factory/admin/configuration/vehicle.ts new file mode 100644 index 0000000..e064df7 --- /dev/null +++ b/src/factory/admin/configuration/vehicle.ts @@ -0,0 +1,29 @@ +import { vehicle } from "../../../entity/configuration/vehicle"; +import { VehicleViewModel } from "../../../viewmodel/admin/configuration/vehicle.models"; + +export default abstract class VehicleFactory { + /** + * @description map record to vehicle + * @param {vehicle} record + * @returns {VehicleViewModel} + */ + public static mapToSingle(record: vehicle): VehicleViewModel { + return { + id: record.id, + code: record.code, + type: record.type, + name: record.name, + commissioned: record.commissioned, + decommissioned: record.decommissioned, + }; + } + + /** + * @description map records to vehicle + * @param {Array} records + * @returns {Array} + */ + public static mapToBase(records: Array): Array { + return records.map((r) => this.mapToSingle(r)); + } +} diff --git a/src/helpers/backupHelper.ts b/src/helpers/backupHelper.ts index f50e307..0e386fd 100644 --- a/src/helpers/backupHelper.ts +++ b/src/helpers/backupHelper.ts @@ -7,7 +7,7 @@ import UserService from "../service/management/userService"; import { BACKUP_COPIES, BACKUP_INTERVAL } from "../env.defaults"; import DatabaseActionException from "../exceptions/databaseActionException"; -export type BackupSection = "member" | "user"; +export type BackupSection = "force" | "user"; export type BackupSectionRefered = { [key in BackupSection]?: Array; @@ -21,12 +21,12 @@ export type BackupFileContentSection = Array | { [key: string]: Array export default abstract class BackupHelper { // ! Order matters because of foreign keys private static readonly backupSection: Array<{ type: BackupSection; orderOnInsert: number; orderOnClear: number }> = [ - { type: "member", orderOnInsert: 2, orderOnClear: 2 }, + { type: "force", orderOnInsert: 2, orderOnClear: 2 }, { type: "user", orderOnInsert: 1, orderOnClear: 1 }, ]; private static readonly backupSectionRefered: BackupSectionRefered = { - member: ["member"], + force: ["force"], user: ["user", "user_permission", "role", "role_permission", "invite"], }; @@ -152,8 +152,8 @@ export default abstract class BackupHelper { collectIds: boolean ): Promise | { [key: string]: any }> { switch (section) { - case "member": - return await this.getMemberData(collectIds); + case "force": + return await this.getForceData(collectIds); case "user": return await this.getUser(collectIds); default: @@ -161,11 +161,11 @@ export default abstract class BackupHelper { } } - private static async getMemberData(collectIds: boolean): Promise> { + private static async getForceData(collectIds: boolean): Promise> { return await dataSource - .getRepository("member") - .createQueryBuilder("member") - .select([...(collectIds ? ["member.id"] : []), "member.firstname", "member.lastname", "member.nameaffix"]) + .getRepository("force") + .createQueryBuilder("force") + .select([...(collectIds ? ["force.id"] : []), "force.firstname", "force.lastname", "force.nameaffix"]) .getMany(); } private static async getUser(collectIds: boolean): Promise<{ [key: string]: Array }> { @@ -205,12 +205,12 @@ export default abstract class BackupHelper { data: BackupFileContentSection, collectedIds: boolean ): Promise { - if (section == "member" && Array.isArray(data)) await this.setMemberData(data); + if (section == "force" && Array.isArray(data)) await this.setForceData(data); if (section == "user" && !Array.isArray(data)) await this.setUser(data); } - private static async setMemberData(data: Array): Promise { - await this.transactionManager.getRepository("member").save(data); + private static async setForceData(data: Array): Promise { + await this.transactionManager.getRepository("force").save(data); } private static async setUser(data: { [key: string]: Array }): Promise { let usedRoles = (data?.["user"] ?? []) diff --git a/src/migrations/1739697068682-CreateSchema.ts b/src/migrations/1739697068682-CreateSchema.ts index be4d74f..f23f746 100644 --- a/src/migrations/1739697068682-CreateSchema.ts +++ b/src/migrations/1739697068682-CreateSchema.ts @@ -9,7 +9,7 @@ import { user_roles_table, user_table, } from "./baseSchemaTables/admin"; -import { equipment_table, member_table, vehicle_table } from "./baseSchemaTables/configuration"; +import { equipment_table, force_table, vehicle_table } from "./baseSchemaTables/configuration"; export class CreateSchema1739697068682 implements MigrationInterface { name = "CreateSchema1739697068682"; @@ -24,7 +24,7 @@ export class CreateSchema1739697068682 implements MigrationInterface { await queryRunner.createTable(user_permission_table, true, true, true); await queryRunner.createTable(refresh_table, true, true, true); - await queryRunner.createTable(member_table, true, true, true); + await queryRunner.createTable(force_table, true, true, true); await queryRunner.createTable(equipment_table, true, true, true); await queryRunner.createTable(vehicle_table, true, true, true); } @@ -32,7 +32,7 @@ export class CreateSchema1739697068682 implements MigrationInterface { public async down(queryRunner: QueryRunner): Promise { await queryRunner.dropTable("vehicle", true, true, true); await queryRunner.dropTable("equipment", true, true, true); - await queryRunner.dropTable("member", true, true, true); + await queryRunner.dropTable("force", true, true, true); await queryRunner.dropTable("refresh", true, true, true); await queryRunner.dropTable("user_permission", true, true, true); diff --git a/src/migrations/baseSchemaTables/configuration.ts b/src/migrations/baseSchemaTables/configuration.ts index 12f299b..df6cd74 100644 --- a/src/migrations/baseSchemaTables/configuration.ts +++ b/src/migrations/baseSchemaTables/configuration.ts @@ -1,8 +1,8 @@ import { Table } from "typeorm"; import { getDefaultByORM, getTypeByORM, isUUIDPrimary } from "../ormHelper"; -export const member_table = new Table({ - name: "member", +export const force_table = new Table({ + name: "force", columns: [ { name: "id", ...getTypeByORM("uuid"), ...isUUIDPrimary }, { name: "internalId", ...getTypeByORM("varchar", true), default: getDefaultByORM("null"), isUnique: true }, diff --git a/src/routes/admin/configuration/equipment.ts b/src/routes/admin/configuration/equipment.ts new file mode 100644 index 0000000..1441e01 --- /dev/null +++ b/src/routes/admin/configuration/equipment.ts @@ -0,0 +1,50 @@ +import express, { Request, Response } from "express"; +import { + createEquipment, + deleteEquipmentById, + getAllEquipments, + getEquipmentById, + getEquipmentsByIds, + updateEquipmentById, +} from "../../../controller/admin/configuration/equipmentController"; +import PermissionHelper from "../../../helpers/permissionHelper"; + +var router = express.Router({ mergeParams: true }); + +router.get("/", async (req: Request, res: Response) => { + await getAllEquipments(req, res); +}); + +router.post("/ids", async (req: Request, res: Response) => { + await getEquipmentsByIds(req, res); +}); + +router.get("/:id", async (req: Request, res: Response) => { + await getEquipmentById(req, res); +}); + +router.post( + "/", + PermissionHelper.passCheckMiddleware("create", "operation", "equipment"), + async (req: Request, res: Response) => { + await createEquipment(req, res); + } +); + +router.patch( + "/:id", + PermissionHelper.passCheckMiddleware("update", "operation", "equipment"), + async (req: Request, res: Response) => { + await updateEquipmentById(req, res); + } +); + +router.delete( + "/:id", + PermissionHelper.passCheckMiddleware("delete", "operation", "equipment"), + async (req: Request, res: Response) => { + await deleteEquipmentById(req, res); + } +); + +export default router; diff --git a/src/routes/admin/configuration/member.ts b/src/routes/admin/configuration/force.ts similarity index 68% rename from src/routes/admin/configuration/member.ts rename to src/routes/admin/configuration/force.ts index 661a3b4..cf7f78b 100644 --- a/src/routes/admin/configuration/member.ts +++ b/src/routes/admin/configuration/force.ts @@ -1,33 +1,33 @@ import express, { Request, Response } from "express"; import { - createMember, - deleteMemberById, - getAllMembers, - getMemberById, - getMembersByIds, - updateMemberById, -} from "../../../controller/admin/configuration/memberController"; + createForce, + deleteForceById, + getAllForces, + getForceById, + getForcesByIds, + updateForceById, +} from "../../../controller/admin/configuration/forceController"; import PermissionHelper from "../../../helpers/permissionHelper"; var router = express.Router({ mergeParams: true }); router.get("/", async (req: Request, res: Response) => { - await getAllMembers(req, res); + await getAllForces(req, res); }); router.post("/ids", async (req: Request, res: Response) => { - await getMembersByIds(req, res); + await getForcesByIds(req, res); }); router.get("/:id", async (req: Request, res: Response) => { - await getMemberById(req, res); + await getForceById(req, res); }); router.post( "/", PermissionHelper.passCheckMiddleware("create", "operation", "force"), async (req: Request, res: Response) => { - await createMember(req, res); + await createForce(req, res); } ); @@ -35,7 +35,7 @@ router.patch( "/:id", PermissionHelper.passCheckMiddleware("update", "operation", "force"), async (req: Request, res: Response) => { - await updateMemberById(req, res); + await updateForceById(req, res); } ); @@ -43,7 +43,7 @@ router.delete( "/:id", PermissionHelper.passCheckMiddleware("delete", "operation", "force"), async (req: Request, res: Response) => { - await deleteMemberById(req, res); + await deleteForceById(req, res); } ); diff --git a/src/routes/admin/configuration/vehicle.ts b/src/routes/admin/configuration/vehicle.ts new file mode 100644 index 0000000..22427e8 --- /dev/null +++ b/src/routes/admin/configuration/vehicle.ts @@ -0,0 +1,50 @@ +import express, { Request, Response } from "express"; +import { + createVehicle, + deleteVehicleById, + getAllVehicles, + getVehicleById, + getVehiclesByIds, + updateVehicleById, +} from "../../../controller/admin/configuration/vehicleController"; +import PermissionHelper from "../../../helpers/permissionHelper"; + +var router = express.Router({ mergeParams: true }); + +router.get("/", async (req: Request, res: Response) => { + await getAllVehicles(req, res); +}); + +router.post("/ids", async (req: Request, res: Response) => { + await getVehiclesByIds(req, res); +}); + +router.get("/:id", async (req: Request, res: Response) => { + await getVehicleById(req, res); +}); + +router.post( + "/", + PermissionHelper.passCheckMiddleware("create", "operation", "vehicle"), + async (req: Request, res: Response) => { + await createVehicle(req, res); + } +); + +router.patch( + "/:id", + PermissionHelper.passCheckMiddleware("update", "operation", "vehicle"), + async (req: Request, res: Response) => { + await updateVehicleById(req, res); + } +); + +router.delete( + "/:id", + PermissionHelper.passCheckMiddleware("delete", "operation", "vehicle"), + async (req: Request, res: Response) => { + await deleteVehicleById(req, res); + } +); + +export default router; diff --git a/src/routes/admin/index.ts b/src/routes/admin/index.ts index 68d488c..3156c22 100644 --- a/src/routes/admin/index.ts +++ b/src/routes/admin/index.ts @@ -1,7 +1,9 @@ import express from "express"; import PermissionHelper from "../../helpers/permissionHelper"; -import member from "./configuration/member"; +import equipment from "./configuration/equipment"; +import force from "./configuration/force"; +import vehicle from "./configuration/vehicle"; import role from "./management/role"; import user from "./management/user"; @@ -10,7 +12,9 @@ import backup from "./management/backup"; var router = express.Router({ mergeParams: true }); -router.use("/member", PermissionHelper.passCheckMiddleware("read", "configuration", "force"), member); +router.use("/equipment", PermissionHelper.passCheckMiddleware("read", "configuration", "equipment"), equipment); +router.use("/force", PermissionHelper.passCheckMiddleware("read", "configuration", "force"), force); +router.use("/vehicle", PermissionHelper.passCheckMiddleware("read", "configuration", "vehicle"), vehicle); router.use("/role", PermissionHelper.passCheckMiddleware("read", "management", "role"), role); router.use( diff --git a/src/service/configuration/equipmentService.ts b/src/service/configuration/equipmentService.ts new file mode 100644 index 0000000..03321ff --- /dev/null +++ b/src/service/configuration/equipmentService.ts @@ -0,0 +1,78 @@ +import { dataSource } from "../../data-source"; +import { equipment } from "../../entity/configuration/equipment"; +import DatabaseActionException from "../../exceptions/databaseActionException"; + +export default abstract class EquipmentService { + /** + * @description get all equipments + * @returns {Promise<[Array, number]>} + */ + static async getAll({ + offset = 0, + count = 25, + search = "", + noLimit = false, + ids = [], + }: { + offset?: number; + count?: number; + search?: string; + noLimit?: boolean; + ids?: Array; + }): Promise<[Array, number]> { + let query = dataSource.getRepository(equipment).createQueryBuilder("equipment"); + + if (search != "") { + search.split(" ").forEach((term, index) => { + const searchQuery = `%${term}%`; + const dynamic = "searchQuery" + Math.random().toString(36).substring(2); + if (index == 0) { + query = query.where(`equipment.name LIKE :${dynamic}`, { + [dynamic]: searchQuery, + }); + } else { + query = query.orWhere(`equipment.name LIKE :${dynamic}`, { + [dynamic]: searchQuery, + }); + } + }); + } + + if (ids.length != 0) { + query = query.where("equipment.id IN (:...ids)", { ids: ids }); + } + + if (!noLimit) { + query = query.offset(offset).limit(count); + } + + return await query + .orderBy("equipment.name") + .getManyAndCount() + .then((res) => { + return res; + }) + .catch((err) => { + throw new DatabaseActionException("SELECT", "equipment", err); + }); + } + + /** + * @description get equipment by id + * @param {string} id + * @returns {Promise} + */ + static async getById(id: string): Promise { + return dataSource + .getRepository(equipment) + .createQueryBuilder("equipment") + .where("equipment.id = :id", { id: id }) + .getOneOrFail() + .then((res) => { + return res; + }) + .catch((err) => { + throw new DatabaseActionException("SELECT", "equipment", err); + }); + } +} diff --git a/src/service/configuration/memberService.ts b/src/service/configuration/forceService.ts similarity index 52% rename from src/service/configuration/memberService.ts rename to src/service/configuration/forceService.ts index e8eddc6..ae514ba 100644 --- a/src/service/configuration/memberService.ts +++ b/src/service/configuration/forceService.ts @@ -1,11 +1,11 @@ import { dataSource } from "../../data-source"; -import { member } from "../../entity/configuration/member"; +import { force } from "../../entity/configuration/force"; import DatabaseActionException from "../../exceptions/databaseActionException"; -export default abstract class MemberService { +export default abstract class ForceService { /** - * @description get all members - * @returns {Promise<[Array, number]>} + * @description get all forces + * @returns {Promise<[Array, number]>} */ static async getAll({ offset = 0, @@ -19,19 +19,19 @@ export default abstract class MemberService { search?: string; noLimit?: boolean; ids?: Array; - }): Promise<[Array, number]> { - let query = dataSource.getRepository(member).createQueryBuilder("member"); + }): Promise<[Array, number]> { + let query = dataSource.getRepository(force).createQueryBuilder("force"); if (search != "") { search.split(" ").forEach((term, index) => { const searchQuery = `%${term}%`; const dynamic = "searchQuery" + Math.random().toString(36).substring(2); if (index == 0) { - query = query.where(`member.firstname LIKE :${dynamic} OR member.lastname LIKE :${dynamic}`, { + query = query.where(`force.firstname LIKE :${dynamic} OR force.lastname LIKE :${dynamic}`, { [dynamic]: searchQuery, }); } else { - query = query.orWhere(`member.firstname LIKE :${dynamic} OR member.lastname LIKE :${dynamic}`, { + query = query.orWhere(`force.firstname LIKE :${dynamic} OR force.lastname LIKE :${dynamic}`, { [dynamic]: searchQuery, }); } @@ -39,7 +39,7 @@ export default abstract class MemberService { } if (ids.length != 0) { - query = query.where("member.id IN (:...ids)", { ids: ids }); + query = query.where("force.id IN (:...ids)", { ids: ids }); } if (!noLimit) { @@ -47,34 +47,34 @@ export default abstract class MemberService { } return await query - .orderBy("member.lastname") - .addOrderBy("member.firstname") - .addOrderBy("member.nameaffix") + .orderBy("force.lastname") + .addOrderBy("force.firstname") + .addOrderBy("force.nameaffix") .getManyAndCount() .then((res) => { return res; }) .catch((err) => { - throw new DatabaseActionException("SELECT", "member", err); + throw new DatabaseActionException("SELECT", "force", err); }); } /** - * @description get member by id + * @description get force by id * @param {string} id - * @returns {Promise} + * @returns {Promise} */ - static async getById(id: string): Promise { + static async getById(id: string): Promise { return dataSource - .getRepository(member) - .createQueryBuilder("member") - .where("member.id = :id", { id: id }) + .getRepository(force) + .createQueryBuilder("force") + .where("force.id = :id", { id: id }) .getOneOrFail() .then((res) => { return res; }) .catch((err) => { - throw new DatabaseActionException("SELECT", "member", err); + throw new DatabaseActionException("SELECT", "force", err); }); } } diff --git a/src/service/configuration/vehicleService.ts b/src/service/configuration/vehicleService.ts new file mode 100644 index 0000000..1d7a5e2 --- /dev/null +++ b/src/service/configuration/vehicleService.ts @@ -0,0 +1,78 @@ +import { dataSource } from "../../data-source"; +import { vehicle } from "../../entity/configuration/vehicle"; +import DatabaseActionException from "../../exceptions/databaseActionException"; + +export default abstract class VehicleService { + /** + * @description get all vehicles + * @returns {Promise<[Array, number]>} + */ + static async getAll({ + offset = 0, + count = 25, + search = "", + noLimit = false, + ids = [], + }: { + offset?: number; + count?: number; + search?: string; + noLimit?: boolean; + ids?: Array; + }): Promise<[Array, number]> { + let query = dataSource.getRepository(vehicle).createQueryBuilder("vehicle"); + + if (search != "") { + search.split(" ").forEach((term, index) => { + const searchQuery = `%${term}%`; + const dynamic = "searchQuery" + Math.random().toString(36).substring(2); + if (index == 0) { + query = query.where(`vehicle.name LIKE :${dynamic}`, { + [dynamic]: searchQuery, + }); + } else { + query = query.orWhere(`vehicle.name LIKE :${dynamic}`, { + [dynamic]: searchQuery, + }); + } + }); + } + + if (ids.length != 0) { + query = query.where("vehicle.id IN (:...ids)", { ids: ids }); + } + + if (!noLimit) { + query = query.offset(offset).limit(count); + } + + return await query + .orderBy("vehicle.name") + .getManyAndCount() + .then((res) => { + return res; + }) + .catch((err) => { + throw new DatabaseActionException("SELECT", "vehicle", err); + }); + } + + /** + * @description get vehicle by id + * @param {string} id + * @returns {Promise} + */ + static async getById(id: string): Promise { + return dataSource + .getRepository(vehicle) + .createQueryBuilder("vehicle") + .where("vehicle.id = :id", { id: id }) + .getOneOrFail() + .then((res) => { + return res; + }) + .catch((err) => { + throw new DatabaseActionException("SELECT", "vehicle", err); + }); + } +} diff --git a/src/type/permissionTypes.ts b/src/type/permissionTypes.ts index 5581de5..75a8595 100644 --- a/src/type/permissionTypes.ts +++ b/src/type/permissionTypes.ts @@ -1,6 +1,6 @@ export type PermissionSection = "operation" | "configuration" | "management"; -export type PermissionModule = "mission" | "force" | "user" | "role" | "backup"; +export type PermissionModule = "mission" | "force" | "vehicle" | "equipment" | "user" | "role" | "backup"; export type PermissionType = "read" | "create" | "update" | "delete"; @@ -24,10 +24,18 @@ export type SectionsAndModulesObject = { }; export const permissionSections: Array = ["operation", "configuration", "management"]; -export const permissionModules: Array = ["mission", "force", "user", "role", "backup"]; +export const permissionModules: Array = [ + "mission", + "force", + "vehicle", + "equipment", + "user", + "role", + "backup", +]; export const permissionTypes: Array = ["read", "create", "update", "delete"]; export const sectionsAndModules: SectionsAndModulesObject = { operation: ["mission"], - configuration: ["force"], + configuration: ["force", "vehicle", "equipment"], management: ["user", "role", "backup"], }; diff --git a/src/viewmodel/admin/configuration/equipment.models.ts b/src/viewmodel/admin/configuration/equipment.models.ts new file mode 100644 index 0000000..092e4c0 --- /dev/null +++ b/src/viewmodel/admin/configuration/equipment.models.ts @@ -0,0 +1,8 @@ +export interface EquipmentViewModel { + id: string; + code?: string; + type?: string; + name: string; + commissioned: Date; + decommissioned?: Date; +} diff --git a/src/viewmodel/admin/configuration/force.models.ts b/src/viewmodel/admin/configuration/force.models.ts new file mode 100644 index 0000000..77562b6 --- /dev/null +++ b/src/viewmodel/admin/configuration/force.models.ts @@ -0,0 +1,9 @@ +export interface ForceViewModel { + id: string; + internalId?: string; + firstname: string; + lastname: string; + nameaffix: string; + commissioned: Date; + decommissioned?: Date; +} diff --git a/src/viewmodel/admin/configuration/member.models.ts b/src/viewmodel/admin/configuration/member.models.ts deleted file mode 100644 index f06b8ba..0000000 --- a/src/viewmodel/admin/configuration/member.models.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface MemberViewModel { - id: string; - firstname: string; - lastname: string; - nameaffix: string; -} diff --git a/src/viewmodel/admin/configuration/vehicle.models.ts b/src/viewmodel/admin/configuration/vehicle.models.ts new file mode 100644 index 0000000..5ea9347 --- /dev/null +++ b/src/viewmodel/admin/configuration/vehicle.models.ts @@ -0,0 +1,8 @@ +export interface VehicleViewModel { + id: string; + code?: string; + type?: string; + name: string; + commissioned: Date; + decommissioned?: Date; +}