From 5c070d239e6daba6371a241bf9c7979022029961 Mon Sep 17 00:00:00 2001 From: yaschalew Date: Wed, 17 Jun 2026 11:09:38 +0300 Subject: [PATCH] fix save --- .../modules/vehicles/vehicles.repository.ts | 79 +++++++++++++++++++ .../backoffice/user-management | 1 + 2 files changed, 80 insertions(+) create mode 100644 apps/edr-freight-api/src/modules/vehicles/vehicles.repository.ts create mode 160000 apps/edr-freight-web/backoffice/user-management diff --git a/apps/edr-freight-api/src/modules/vehicles/vehicles.repository.ts b/apps/edr-freight-api/src/modules/vehicles/vehicles.repository.ts new file mode 100644 index 000000000..46950e0c9 --- /dev/null +++ b/apps/edr-freight-api/src/modules/vehicles/vehicles.repository.ts @@ -0,0 +1,79 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { BaseRepository } from '@edr/api-common'; +import { Vehicle } from './entities/vehicle.entity'; + +@Injectable() +export class VehiclesRepository extends BaseRepository { + constructor( + @InjectRepository(Vehicle) + repository: Repository, + ) { + super(repository); + } + + async findByPlateNumber(plateNumber: string): Promise { + return this.repository.findOne({ where: { plateNumber } }); + } + + async findVehicleById(id: string): Promise { + return this.repository.findOne({ where: { id } }); + } + + async findAllWithFilters(query: { + page?: number; + pageSize?: number; + search?: string; + status?: string; + sortBy?: string; + sortOrder?: 'ASC' | 'DESC'; + }) { + const page = query.page || 1; + const pageSize = query.pageSize || 10; + const skip = (page - 1) * pageSize; + + let queryBuilder = this.repository.createQueryBuilder('vehicle'); + + if (query.search) { + queryBuilder = queryBuilder.where( + '(vehicle.plateNumber ILIKE :search OR vehicle.manufacturer ILIKE :search OR vehicle.model ILIKE :search)', + { search: `%${query.search}%` }, + ); + } + + if (query.status) { + queryBuilder = queryBuilder.andWhere('vehicle.status = :status', { + status: query.status, + }); + } + + const sortBy = query.sortBy || 'createdAt'; + const sortOrder = query.sortOrder || 'DESC'; + + queryBuilder = queryBuilder + .orderBy(`vehicle.${sortBy}`, sortOrder) + .skip(skip) + .take(pageSize); + + const [data, total] = await queryBuilder.getManyAndCount(); + + return { + data, + total, + page, + pageSize, + totalPages: Math.ceil(total / pageSize), + }; + } + + async createVehicle(vehicleData: any): Promise { + const vehicle = this.repository.create(vehicleData); + const vehicles = await this.repository.save(vehicle); + return vehicles?.[0]; + } + + async updateVehicle(vehicle: Vehicle): Promise { + return (await this.repository.save(vehicle)) as Vehicle; + } +} diff --git a/apps/edr-freight-web/backoffice/user-management b/apps/edr-freight-web/backoffice/user-management new file mode 160000 index 000000000..172c528b1 --- /dev/null +++ b/apps/edr-freight-web/backoffice/user-management @@ -0,0 +1 @@ +Subproject commit 172c528b1ce1ded17b302fece8db38bb92eed451