base data CRUD
This commit is contained in:
parent
cfec116f2c
commit
0d9aed947e
33 changed files with 1128 additions and 320 deletions
20
src/command/configuration/equipment/equipmentCommand.ts
Normal file
20
src/command/configuration/equipment/equipmentCommand.ts
Normal file
|
@ -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;
|
||||
}
|
|
@ -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<number>}
|
||||
*/
|
||||
static async create(createEquipment: CreateEquipmentCommand): Promise<number> {
|
||||
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<void>}
|
||||
*/
|
||||
static async update(updateEquipment: UpdateEquipmentCommand): Promise<void> {
|
||||
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<void>}
|
||||
*/
|
||||
static async delete(deleteEquipment: DeleteEquipmentCommand): Promise<void> {
|
||||
return await dataSource
|
||||
.createQueryBuilder()
|
||||
.delete()
|
||||
.from(equipment)
|
||||
.where("id = :id", { id: deleteEquipment.id })
|
||||
.execute()
|
||||
.then(() => {})
|
||||
.catch((err) => {
|
||||
throw new DatabaseActionException("DELETE", "equipment", err);
|
||||
});
|
||||
}
|
||||
}
|
22
src/command/configuration/force/forceCommand.ts
Normal file
22
src/command/configuration/force/forceCommand.ts
Normal file
|
@ -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;
|
||||
}
|
76
src/command/configuration/force/forceCommandHandler.ts
Normal file
76
src/command/configuration/force/forceCommandHandler.ts
Normal file
|
@ -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<number>}
|
||||
*/
|
||||
static async create(createForce: CreateForceCommand): Promise<number> {
|
||||
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<void>}
|
||||
*/
|
||||
static async update(updateForce: UpdateForceCommand): Promise<void> {
|
||||
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<void>}
|
||||
*/
|
||||
static async delete(deleteForce: DeleteForceCommand): Promise<void> {
|
||||
return await dataSource
|
||||
.createQueryBuilder()
|
||||
.delete()
|
||||
.from(force)
|
||||
.where("id = :id", { id: deleteForce.id })
|
||||
.execute()
|
||||
.then(() => {})
|
||||
.catch((err) => {
|
||||
throw new DatabaseActionException("DELETE", "force", err);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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<number>}
|
||||
*/
|
||||
static async create(createMember: CreateMemberCommand): Promise<number> {
|
||||
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<void>}
|
||||
*/
|
||||
static async update(updateMember: UpdateMemberCommand): Promise<void> {
|
||||
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<void>}
|
||||
*/
|
||||
static async delete(deleteMember: DeleteMemberCommand): Promise<void> {
|
||||
return await dataSource
|
||||
.createQueryBuilder()
|
||||
.delete()
|
||||
.from(member)
|
||||
.where("id = :id", { id: deleteMember.id })
|
||||
.execute()
|
||||
.then(() => {})
|
||||
.catch((err) => {
|
||||
throw new DatabaseActionException("DELETE", "member", err);
|
||||
});
|
||||
}
|
||||
}
|
20
src/command/configuration/vehicle/vehicleCommand.ts
Normal file
20
src/command/configuration/vehicle/vehicleCommand.ts
Normal file
|
@ -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;
|
||||
}
|
74
src/command/configuration/vehicle/vehicleCommandHandler.ts
Normal file
74
src/command/configuration/vehicle/vehicleCommandHandler.ts
Normal file
|
@ -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<number>}
|
||||
*/
|
||||
static async create(createVehicle: CreateVehicleCommand): Promise<number> {
|
||||
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<void>}
|
||||
*/
|
||||
static async update(updateVehicle: UpdateVehicleCommand): Promise<void> {
|
||||
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<void>}
|
||||
*/
|
||||
static async delete(deleteVehicle: DeleteVehicleCommand): Promise<void> {
|
||||
return await dataSource
|
||||
.createQueryBuilder()
|
||||
.delete()
|
||||
.from(vehicle)
|
||||
.where("id = :id", { id: deleteVehicle.id })
|
||||
.execute()
|
||||
.then(() => {})
|
||||
.catch((err) => {
|
||||
throw new DatabaseActionException("DELETE", "vehicle", err);
|
||||
});
|
||||
}
|
||||
}
|
133
src/controller/admin/configuration/equipmentController.ts
Normal file
133
src/controller/admin/configuration/equipmentController.ts
Normal file
|
@ -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<any> {
|
||||
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<any> {
|
||||
let ids = req.body.ids as Array<string>;
|
||||
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
const equipmentId = req.params.id;
|
||||
|
||||
let deleteEquipment: DeleteEquipmentCommand = {
|
||||
id: equipmentId,
|
||||
};
|
||||
await EquipmentCommandHandler.delete(deleteEquipment);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
137
src/controller/admin/configuration/forceController.ts
Normal file
137
src/controller/admin/configuration/forceController.ts
Normal file
|
@ -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<any> {
|
||||
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<any> {
|
||||
let ids = req.body.ids as Array<string>;
|
||||
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
const forceId = req.params.id;
|
||||
|
||||
let deleteForce: DeleteForceCommand = {
|
||||
id: forceId,
|
||||
};
|
||||
await ForceCommandHandler.delete(deleteForce);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
|
@ -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<any> {
|
||||
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<any> {
|
||||
let ids = req.body.ids as Array<string>;
|
||||
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
const memberId = req.params.id;
|
||||
|
||||
let deleteMember: DeleteMemberCommand = {
|
||||
id: memberId,
|
||||
};
|
||||
await MemberCommandHandler.delete(deleteMember);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
133
src/controller/admin/configuration/vehicleController.ts
Normal file
133
src/controller/admin/configuration/vehicleController.ts
Normal file
|
@ -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<any> {
|
||||
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<any> {
|
||||
let ids = req.body.ids as Array<string>;
|
||||
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
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<any> {
|
||||
const vehicleId = req.params.id;
|
||||
|
||||
let deleteVehicle: DeleteVehicleCommand = {
|
||||
id: vehicleId,
|
||||
};
|
||||
await VehicleCommandHandler.delete(deleteVehicle);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { Column, Entity, PrimaryColumn } from "typeorm";
|
||||
|
||||
@Entity()
|
||||
export class member {
|
||||
export class force {
|
||||
@PrimaryColumn({ generated: "uuid" })
|
||||
id: string;
|
||||
|
29
src/factory/admin/configuration/equipment.ts
Normal file
29
src/factory/admin/configuration/equipment.ts
Normal file
|
@ -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<equipment>} records
|
||||
* @returns {Array<EquipmentViewModel>}
|
||||
*/
|
||||
public static mapToBase(records: Array<equipment>): Array<EquipmentViewModel> {
|
||||
return records.map((r) => this.mapToSingle(r));
|
||||
}
|
||||
}
|
30
src/factory/admin/configuration/force.ts
Normal file
30
src/factory/admin/configuration/force.ts
Normal file
|
@ -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<force>} records
|
||||
* @returns {Array<ForceViewModel>}
|
||||
*/
|
||||
public static mapToBase(records: Array<force>): Array<ForceViewModel> {
|
||||
return records.map((r) => this.mapToSingle(r));
|
||||
}
|
||||
}
|
|
@ -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<member>} records
|
||||
* @returns {Array<MemberViewModel>}
|
||||
*/
|
||||
public static mapToBase(records: Array<member>): Array<MemberViewModel> {
|
||||
return records.map((r) => this.mapToSingle(r));
|
||||
}
|
||||
}
|
29
src/factory/admin/configuration/vehicle.ts
Normal file
29
src/factory/admin/configuration/vehicle.ts
Normal file
|
@ -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<vehicle>} records
|
||||
* @returns {Array<VehicleViewModel>}
|
||||
*/
|
||||
public static mapToBase(records: Array<vehicle>): Array<VehicleViewModel> {
|
||||
return records.map((r) => this.mapToSingle(r));
|
||||
}
|
||||
}
|
|
@ -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<string>;
|
||||
|
@ -21,12 +21,12 @@ export type BackupFileContentSection = Array<any> | { [key: string]: Array<any>
|
|||
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<Array<any> | { [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<Array<any>> {
|
||||
private static async getForceData(collectIds: boolean): Promise<Array<any>> {
|
||||
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<any> }> {
|
||||
|
@ -205,12 +205,12 @@ export default abstract class BackupHelper {
|
|||
data: BackupFileContentSection,
|
||||
collectedIds: boolean
|
||||
): Promise<void> {
|
||||
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<any>): Promise<void> {
|
||||
await this.transactionManager.getRepository("member").save(data);
|
||||
private static async setForceData(data: Array<any>): Promise<void> {
|
||||
await this.transactionManager.getRepository("force").save(data);
|
||||
}
|
||||
private static async setUser(data: { [key: string]: Array<any> }): Promise<void> {
|
||||
let usedRoles = (data?.["user"] ?? [])
|
||||
|
|
|
@ -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<void> {
|
||||
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);
|
||||
|
|
|
@ -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 },
|
||||
|
|
50
src/routes/admin/configuration/equipment.ts
Normal file
50
src/routes/admin/configuration/equipment.ts
Normal file
|
@ -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;
|
|
@ -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);
|
||||
}
|
||||
);
|
||||
|
50
src/routes/admin/configuration/vehicle.ts
Normal file
50
src/routes/admin/configuration/vehicle.ts
Normal file
|
@ -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;
|
|
@ -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(
|
||||
|
|
78
src/service/configuration/equipmentService.ts
Normal file
78
src/service/configuration/equipmentService.ts
Normal file
|
@ -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<equipment>, number]>}
|
||||
*/
|
||||
static async getAll({
|
||||
offset = 0,
|
||||
count = 25,
|
||||
search = "",
|
||||
noLimit = false,
|
||||
ids = [],
|
||||
}: {
|
||||
offset?: number;
|
||||
count?: number;
|
||||
search?: string;
|
||||
noLimit?: boolean;
|
||||
ids?: Array<string>;
|
||||
}): Promise<[Array<equipment>, 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<equipment>}
|
||||
*/
|
||||
static async getById(id: string): Promise<equipment> {
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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<member>, number]>}
|
||||
* @description get all forces
|
||||
* @returns {Promise<[Array<force>, number]>}
|
||||
*/
|
||||
static async getAll({
|
||||
offset = 0,
|
||||
|
@ -19,19 +19,19 @@ export default abstract class MemberService {
|
|||
search?: string;
|
||||
noLimit?: boolean;
|
||||
ids?: Array<string>;
|
||||
}): Promise<[Array<member>, number]> {
|
||||
let query = dataSource.getRepository(member).createQueryBuilder("member");
|
||||
}): Promise<[Array<force>, 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<member>}
|
||||
* @returns {Promise<force>}
|
||||
*/
|
||||
static async getById(id: string): Promise<member> {
|
||||
static async getById(id: string): Promise<force> {
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
78
src/service/configuration/vehicleService.ts
Normal file
78
src/service/configuration/vehicleService.ts
Normal file
|
@ -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<vehicle>, number]>}
|
||||
*/
|
||||
static async getAll({
|
||||
offset = 0,
|
||||
count = 25,
|
||||
search = "",
|
||||
noLimit = false,
|
||||
ids = [],
|
||||
}: {
|
||||
offset?: number;
|
||||
count?: number;
|
||||
search?: string;
|
||||
noLimit?: boolean;
|
||||
ids?: Array<string>;
|
||||
}): Promise<[Array<vehicle>, 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<vehicle>}
|
||||
*/
|
||||
static async getById(id: string): Promise<vehicle> {
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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<PermissionSection> = ["operation", "configuration", "management"];
|
||||
export const permissionModules: Array<PermissionModule> = ["mission", "force", "user", "role", "backup"];
|
||||
export const permissionModules: Array<PermissionModule> = [
|
||||
"mission",
|
||||
"force",
|
||||
"vehicle",
|
||||
"equipment",
|
||||
"user",
|
||||
"role",
|
||||
"backup",
|
||||
];
|
||||
export const permissionTypes: Array<PermissionType> = ["read", "create", "update", "delete"];
|
||||
export const sectionsAndModules: SectionsAndModulesObject = {
|
||||
operation: ["mission"],
|
||||
configuration: ["force"],
|
||||
configuration: ["force", "vehicle", "equipment"],
|
||||
management: ["user", "role", "backup"],
|
||||
};
|
||||
|
|
8
src/viewmodel/admin/configuration/equipment.models.ts
Normal file
8
src/viewmodel/admin/configuration/equipment.models.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
export interface EquipmentViewModel {
|
||||
id: string;
|
||||
code?: string;
|
||||
type?: string;
|
||||
name: string;
|
||||
commissioned: Date;
|
||||
decommissioned?: Date;
|
||||
}
|
9
src/viewmodel/admin/configuration/force.models.ts
Normal file
9
src/viewmodel/admin/configuration/force.models.ts
Normal file
|
@ -0,0 +1,9 @@
|
|||
export interface ForceViewModel {
|
||||
id: string;
|
||||
internalId?: string;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
nameaffix: string;
|
||||
commissioned: Date;
|
||||
decommissioned?: Date;
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
export interface MemberViewModel {
|
||||
id: string;
|
||||
firstname: string;
|
||||
lastname: string;
|
||||
nameaffix: string;
|
||||
}
|
8
src/viewmodel/admin/configuration/vehicle.models.ts
Normal file
8
src/viewmodel/admin/configuration/vehicle.models.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
export interface VehicleViewModel {
|
||||
id: string;
|
||||
code?: string;
|
||||
type?: string;
|
||||
name: string;
|
||||
commissioned: Date;
|
||||
decommissioned?: Date;
|
||||
}
|
Loading…
Add table
Reference in a new issue