basic services joins

This commit is contained in:
Julian Krauser 2025-05-28 17:32:07 +02:00
parent e404989a28
commit fcbfe560c3
13 changed files with 75 additions and 26 deletions

View file

@ -1,9 +1,10 @@
import { Column, ColumnType, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; import { Column, ColumnType, CreateDateColumn, Entity, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import { inspectionPlan } from "./inspectionPlan"; import { inspectionPlan } from "./inspectionPlan";
import { inspectionVersionedPlan } from "./inspectionVersionedPlan"; import { inspectionVersionedPlan } from "./inspectionVersionedPlan";
import { getTypeByORM } from "../../../migrations/ormHelper"; import { getTypeByORM } from "../../../migrations/ormHelper";
import { vehicle } from "../vehicle/vehicle"; import { vehicle } from "../vehicle/vehicle";
import { equipment } from "../equipment/equipment"; import { equipment } from "../equipment/equipment";
import { inspectionPointResult } from "./inspectionPointResult";
@Entity() @Entity()
export class inspection { export class inspection {
@ -61,4 +62,7 @@ export class inspection {
onUpdate: "RESTRICT", onUpdate: "RESTRICT",
}) })
vehicle: vehicle; vehicle: vehicle;
@OneToMany(() => inspectionPointResult, (ipr) => ipr.inspection)
pointResults: inspectionPointResult[];
} }

View file

@ -4,7 +4,7 @@ import DatabaseActionException from "../../exceptions/databaseActionException";
export default abstract class DamageReportService { export default abstract class DamageReportService {
/** /**
* @description get all damageReport types * @description get all damageReports
* @returns {Promise<Array<damageReport>>} * @returns {Promise<Array<damageReport>>}
*/ */
static async getAll(): Promise<Array<damageReport>> { static async getAll(): Promise<Array<damageReport>> {

View file

@ -4,14 +4,15 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class EquipmentService { export default abstract class EquipmentService {
/** /**
* @description get all equipment types * @description get all equipment
* @returns {Promise<Array<equipment>>} * @returns {Promise<Array<equipment>>}
*/ */
static async getAll(): Promise<Array<equipment>> { static async getAll(): Promise<Array<equipment>> {
return await dataSource return await dataSource
.getRepository(equipment) .getRepository(equipment)
.createQueryBuilder("equipment") .createQueryBuilder("equipment")
.orderBy("type", "ASC") .leftJoinAndSelect("equipment.equipmentType", "equipmenttype")
.orderBy("name", "ASC")
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;
@ -29,6 +30,7 @@ export default abstract class EquipmentService {
return await dataSource return await dataSource
.getRepository(equipment) .getRepository(equipment)
.createQueryBuilder("equipment") .createQueryBuilder("equipment")
.leftJoinAndSelect("equipment.equipmentType", "equipmenttype")
.where({ id }) .where({ id })
.getOneOrFail() .getOneOrFail()
.then((res) => { .then((res) => {

View file

@ -4,7 +4,7 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class EquipmentTypeService { export default abstract class EquipmentTypeService {
/** /**
* @description get all equipment types * @description get all equipmentTypes
* @returns {Promise<Array<equipmentType>>} * @returns {Promise<Array<equipmentType>>}
*/ */
static async getAll(): Promise<Array<equipmentType>> { static async getAll(): Promise<Array<equipmentType>> {

View file

@ -1,17 +1,30 @@
import { dataSource } from "../../../data-source"; import { dataSource } from "../../../data-source";
import { inspectionPlan } from "../../../entity/unit/inspection/inspectionPlan"; import { inspectionPlan } from "../../../entity/unit/inspection/inspectionPlan";
import { DB_TYPE } from "../../../env.defaults";
import DatabaseActionException from "../../../exceptions/databaseActionException"; import DatabaseActionException from "../../../exceptions/databaseActionException";
export default abstract class InspectionPlanService { export default abstract class InspectionPlanService {
/** /**
* @description get all inspectionPlan types * @description get all inspectionPlans for related
* @returns {Promise<Array<inspectionPlan>>} * @returns {Promise<Array<inspectionPlan>>}
*/ */
static async getAll(): Promise<Array<inspectionPlan>> { static async getAllForRelated(
where: { equipmentId: string } | { vehicleId: string }
): Promise<Array<inspectionPlan>> {
return await dataSource return await dataSource
.getRepository(inspectionPlan) .getRepository(inspectionPlan)
.createQueryBuilder("inspectionPlan") .createQueryBuilder("inspectionPlan")
.orderBy("type", "ASC") .leftJoinAndMapOne(
"inspectionPlan.latestVersionedPlan",
"inspectionPlan.versionedPlans",
"latestVersionedPlan",
DB_TYPE == "postgres"
? 'latestVersionedPlan.inspectionPlanId = inspectionPlan.id AND latestVersionedPlan.version = (SELECT MAX("ivp"."start") FROM "inspection_versioned_plan" "ivp" WHERE "ivp"."inspectionPlanId" = "inspectionPlan"."id")'
: "latestVersionedPlan.inspectionPlanId = inspectionPlan.id AND latestVersionedPlan.version = (SELECT MAX(ivp.start) FROM inspection_versioned_plan ivp WHERE ivp.inspectionPlanId = inspectionPlan.id)"
)
.leftJoinAndSelect("latestVersionedPlan.inspectionPoints", "inspectionPoints")
.where(where)
.orderBy("title", "ASC")
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;
@ -29,6 +42,15 @@ export default abstract class InspectionPlanService {
return await dataSource return await dataSource
.getRepository(inspectionPlan) .getRepository(inspectionPlan)
.createQueryBuilder("inspectionPlan") .createQueryBuilder("inspectionPlan")
.leftJoinAndMapOne(
"inspectionPlan.latestVersionedPlan",
"inspectionPlan.versionedPlans",
"latestVersionedPlan",
DB_TYPE == "postgres"
? 'latestVersionedPlan.inspectionPlanId = inspectionPlan.id AND latestVersionedPlan.version = (SELECT MAX("ivp"."start") FROM "inspection_versioned_plan" "ivp" WHERE "ivp"."inspectionPlanId" = "inspectionPlan"."id")'
: "latestVersionedPlan.inspectionPlanId = inspectionPlan.id AND latestVersionedPlan.version = (SELECT MAX(ivp.start) FROM inspection_versioned_plan ivp WHERE ivp.inspectionPlanId = inspectionPlan.id)"
)
.leftJoinAndSelect("latestVersionedPlan.inspectionPoints", "inspectionPoints")
.where({ id }) .where({ id })
.getOneOrFail() .getOneOrFail()
.then((res) => { .then((res) => {

View file

@ -4,14 +4,15 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class InspectionPointResultService { export default abstract class InspectionPointResultService {
/** /**
* @description get all inspectionPointResult types * @description get all inspectionPointResults
* @returns {Promise<Array<inspectionPointResult>>} * @returns {Promise<Array<inspectionPointResult>>}
*/ */
static async getAll(): Promise<Array<inspectionPointResult>> { static async getAllForInspection(inspectionId: string): Promise<Array<inspectionPointResult>> {
return await dataSource return await dataSource
.getRepository(inspectionPointResult) .getRepository(inspectionPointResult)
.createQueryBuilder("inspectionPointResult") .createQueryBuilder("inspectionPointResult")
.orderBy("type", "ASC") .leftJoinAndSelect("inspectionPointResult.inspectionPoint", "inspectionPoint")
.where({ inspectionId })
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;
@ -29,6 +30,7 @@ export default abstract class InspectionPointResultService {
return await dataSource return await dataSource
.getRepository(inspectionPointResult) .getRepository(inspectionPointResult)
.createQueryBuilder("inspectionPointResult") .createQueryBuilder("inspectionPointResult")
.leftJoinAndSelect("inspectionPointResult.inspectionPoint", "inspectionPoint")
.where({ id }) .where({ id })
.getOneOrFail() .getOneOrFail()
.then((res) => { .then((res) => {

View file

@ -4,14 +4,15 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class InspectionPointService { export default abstract class InspectionPointService {
/** /**
* @description get all inspectionPoint types * @description get all inspectionPoints
* @returns {Promise<Array<inspectionPoint>>} * @returns {Promise<Array<inspectionPoint>>}
*/ */
static async getAll(): Promise<Array<inspectionPoint>> { static async getAllForVersionedPlan(versionedPlanId: string): Promise<Array<inspectionPoint>> {
return await dataSource return await dataSource
.getRepository(inspectionPoint) .getRepository(inspectionPoint)
.createQueryBuilder("inspectionPoint") .createQueryBuilder("inspectionPoint")
.orderBy("type", "ASC") .where({ versionedPlanId })
.orderBy("sort", "ASC")
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;

View file

@ -4,14 +4,20 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class InspectionService { export default abstract class InspectionService {
/** /**
* @description get all inspection types * @description get all inspections for related
* @returns {Promise<Array<inspection>>} * @returns {Promise<Array<inspection>>}
*/ */
static async getAll(): Promise<Array<inspection>> { static async getAllForRelated(where: { equipmentId: string } | { vehicleId: string }): Promise<Array<inspection>> {
return await dataSource return await dataSource
.getRepository(inspection) .getRepository(inspection)
.createQueryBuilder("inspection") .createQueryBuilder("inspection")
.orderBy("type", "ASC") .leftJoinAndSelect("inspection.inspectionPlan", "inspectionPlan")
.leftJoinAndSelect("inspection.inspectionVersionedPlan", "inspectionVersionedPlan")
.leftJoinAndSelect("inspectionVersionedPlan.inspectionPoints", "inspectionPoints")
.leftJoinAndSelect("inspection.pointResults", "pointResults")
.leftJoinAndSelect("pointResults.inspectionPoint", "inspectionPoint")
.where(where)
.orderBy("createdAt", "DESC")
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;
@ -29,6 +35,11 @@ export default abstract class InspectionService {
return await dataSource return await dataSource
.getRepository(inspection) .getRepository(inspection)
.createQueryBuilder("inspection") .createQueryBuilder("inspection")
.leftJoinAndSelect("inspection.inspectionPlan", "inspectionPlan")
.leftJoinAndSelect("inspection.inspectionVersionedPlan", "inspectionVersionedPlan")
.leftJoinAndSelect("inspectionVersionedPlan.inspectionPoints", "inspectionPoints")
.leftJoinAndSelect("inspection.pointResults", "pointResults")
.leftJoinAndSelect("pointResults.inspectionPoint", "inspectionPoint")
.where({ id }) .where({ id })
.getOneOrFail() .getOneOrFail()
.then((res) => { .then((res) => {

View file

@ -4,14 +4,16 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class InspectionVersionedPlanService { export default abstract class InspectionVersionedPlanService {
/** /**
* @description get all inspectionVersionedPlan types * @description get all inspectionVersionedPlans
* @returns {Promise<Array<inspectionVersionedPlan>>} * @returns {Promise<Array<inspectionVersionedPlan>>}
*/ */
static async getAll(): Promise<Array<inspectionVersionedPlan>> { static async getAllForInspectionPlan(inspectionPlanId: string): Promise<Array<inspectionVersionedPlan>> {
return await dataSource return await dataSource
.getRepository(inspectionVersionedPlan) .getRepository(inspectionVersionedPlan)
.createQueryBuilder("inspectionVersionedPlan") .createQueryBuilder("inspectionVersionedPlan")
.orderBy("type", "ASC") .leftJoinAndSelect("inspectionVersionedPlan.inspectionPoints", "inspectionPoints")
.where({ inspectionPlanId })
.orderBy("version", "ASC")
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;
@ -29,6 +31,7 @@ export default abstract class InspectionVersionedPlanService {
return await dataSource return await dataSource
.getRepository(inspectionVersionedPlan) .getRepository(inspectionVersionedPlan)
.createQueryBuilder("inspectionVersionedPlan") .createQueryBuilder("inspectionVersionedPlan")
.leftJoinAndSelect("inspectionVersionedPlan.inspectionPoints", "inspectionPoints")
.where({ id }) .where({ id })
.getOneOrFail() .getOneOrFail()
.then((res) => { .then((res) => {

View file

@ -4,14 +4,15 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class VehicleService { export default abstract class VehicleService {
/** /**
* @description get all vehicle types * @description get all vehicles
* @returns {Promise<Array<vehicle>>} * @returns {Promise<Array<vehicle>>}
*/ */
static async getAll(): Promise<Array<vehicle>> { static async getAll(): Promise<Array<vehicle>> {
return await dataSource return await dataSource
.getRepository(vehicle) .getRepository(vehicle)
.createQueryBuilder("vehicle") .createQueryBuilder("vehicle")
.orderBy("type", "ASC") .leftJoinAndSelect("vehicle.vehicleType", "vehicletype")
.orderBy("name", "ASC")
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;
@ -29,6 +30,7 @@ export default abstract class VehicleService {
return await dataSource return await dataSource
.getRepository(vehicle) .getRepository(vehicle)
.createQueryBuilder("vehicle") .createQueryBuilder("vehicle")
.leftJoinAndSelect("vehicle.vehicleType", "vehicletype")
.where({ id }) .where({ id })
.getOneOrFail() .getOneOrFail()
.then((res) => { .then((res) => {

View file

@ -4,7 +4,7 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class VehicleTypeService { export default abstract class VehicleTypeService {
/** /**
* @description get all vehicleType types * @description get all vehicleTypes
* @returns {Promise<Array<vehicleType>>} * @returns {Promise<Array<vehicleType>>}
*/ */
static async getAll(): Promise<Array<vehicleType>> { static async getAll(): Promise<Array<vehicleType>> {

View file

@ -4,14 +4,15 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class WearableService { export default abstract class WearableService {
/** /**
* @description get all wearable types * @description get all wearables
* @returns {Promise<Array<wearable>>} * @returns {Promise<Array<wearable>>}
*/ */
static async getAll(): Promise<Array<wearable>> { static async getAll(): Promise<Array<wearable>> {
return await dataSource return await dataSource
.getRepository(wearable) .getRepository(wearable)
.createQueryBuilder("wearable") .createQueryBuilder("wearable")
.orderBy("type", "ASC") .leftJoinAndSelect("wearable.wearableType", "wearabletype")
.orderBy("name", "ASC")
.getMany() .getMany()
.then((res) => { .then((res) => {
return res; return res;
@ -29,6 +30,7 @@ export default abstract class WearableService {
return await dataSource return await dataSource
.getRepository(wearable) .getRepository(wearable)
.createQueryBuilder("wearable") .createQueryBuilder("wearable")
.leftJoinAndSelect("wearable.wearableType", "wearabletype")
.where({ id }) .where({ id })
.getOneOrFail() .getOneOrFail()
.then((res) => { .then((res) => {

View file

@ -4,7 +4,7 @@ import DatabaseActionException from "../../../exceptions/databaseActionException
export default abstract class WearableTypeService { export default abstract class WearableTypeService {
/** /**
* @description get all wearableType types * @description get all wearableTypes
* @returns {Promise<Array<wearableType>>} * @returns {Promise<Array<wearableType>>}
*/ */
static async getAll(): Promise<Array<wearableType>> { static async getAll(): Promise<Array<wearableType>> {