mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 14:08:11 +00:00
100 lines
3.4 KiB
TypeScript
100 lines
3.4 KiB
TypeScript
import { Injectable, NotFoundException } from '@nestjs/common';
|
|
import { WorkOrderRepository } from './work-order.repository';
|
|
import { PartRepository } from './part.repository';
|
|
import { WarrantyRepository } from './warranty.repository';
|
|
import { WorkOrder, WorkOrderStatus } from './entities/work-order.entity';
|
|
import { Part } from './entities/part.entity';
|
|
import { Warranty } from './entities/warranty.entity';
|
|
import {
|
|
CreateWorkOrderDto,
|
|
UpdateWorkOrderDto,
|
|
CreatePartDto,
|
|
UpdatePartDto,
|
|
CreateWarrantyDto,
|
|
} from './dto/create-maintenance-depth.dto';
|
|
|
|
@Injectable()
|
|
export class MaintenanceDepthService {
|
|
constructor(
|
|
private readonly workOrderRepository: WorkOrderRepository,
|
|
private readonly partRepository: PartRepository,
|
|
private readonly warrantyRepository: WarrantyRepository,
|
|
) {}
|
|
|
|
// ---- Work Orders ----
|
|
|
|
async createWorkOrder(dto: CreateWorkOrderDto): Promise<WorkOrder> {
|
|
return this.workOrderRepository.create({
|
|
...dto,
|
|
openedAt: dto.openedAt ? new Date(dto.openedAt) : new Date(),
|
|
closedAt: dto.closedAt ? new Date(dto.closedAt) : undefined,
|
|
});
|
|
}
|
|
|
|
async findWorkOrders(filters: { vehicleId?: string; status?: WorkOrderStatus }) {
|
|
return this.workOrderRepository.findFiltered(filters);
|
|
}
|
|
|
|
async findWorkOrderById(id: string): Promise<WorkOrder> {
|
|
const workOrder = await this.workOrderRepository.findById(id);
|
|
if (!workOrder) throw new NotFoundException(`Work order ${id} not found`);
|
|
return workOrder;
|
|
}
|
|
|
|
async updateWorkOrder(id: string, dto: UpdateWorkOrderDto): Promise<WorkOrder> {
|
|
await this.findWorkOrderById(id);
|
|
const updated = await this.workOrderRepository.update(id, {
|
|
...dto,
|
|
closedAt: dto.closedAt ? new Date(dto.closedAt) : undefined,
|
|
});
|
|
return updated!;
|
|
}
|
|
|
|
async deleteWorkOrder(id: string): Promise<{ id: string; deleted: boolean }> {
|
|
await this.findWorkOrderById(id);
|
|
await this.workOrderRepository.softDelete(id);
|
|
return { id, deleted: true };
|
|
}
|
|
|
|
// ---- Parts / Tires ----
|
|
|
|
async createPart(dto: CreatePartDto): Promise<Part> {
|
|
return this.partRepository.create({ ...dto });
|
|
}
|
|
|
|
async findParts(filters: { category?: string; lowStock?: boolean }) {
|
|
return this.partRepository.findFiltered(filters);
|
|
}
|
|
|
|
async updatePart(id: string, dto: UpdatePartDto): Promise<Part> {
|
|
const part = await this.partRepository.findById(id);
|
|
if (!part) throw new NotFoundException(`Part ${id} not found`);
|
|
const updated = await this.partRepository.update(id, { ...dto });
|
|
return updated!;
|
|
}
|
|
|
|
async deletePart(id: string): Promise<{ id: string; deleted: boolean }> {
|
|
const part = await this.partRepository.findById(id);
|
|
if (!part) throw new NotFoundException(`Part ${id} not found`);
|
|
await this.partRepository.softDelete(id);
|
|
return { id, deleted: true };
|
|
}
|
|
|
|
// ---- Warranties ----
|
|
|
|
async createWarranty(dto: CreateWarrantyDto): Promise<Warranty> {
|
|
return this.warrantyRepository.create({ ...dto });
|
|
}
|
|
|
|
async findWarranties(filters: { vehicleId?: string }) {
|
|
return this.warrantyRepository.findFiltered(filters);
|
|
}
|
|
|
|
async deleteWarranty(id: string): Promise<{ id: string; deleted: boolean }> {
|
|
const warranty = await this.warrantyRepository.findById(id);
|
|
if (!warranty) throw new NotFoundException(`Warranty ${id} not found`);
|
|
await this.warrantyRepository.softDelete(id);
|
|
return { id, deleted: true };
|
|
}
|
|
}
|