import { readFile } from "node:fs/promises"; import { Injectable, Logger, NotFoundException } from "@nestjs/common"; import { LookupDbService } from "./entities/db-service/lookup.db.service"; @Injectable() export class LookupsService { private readonly logger = new Logger(LookupsService.name); constructor(private readonly lookupDbService: LookupDbService) {} /** * Returns stored `response` for a lookup document by `name` in the lookups collection. */ async getLookup(lookupName: string): Promise { const doc = await this.lookupDbService.findOne({ name: lookupName }); if (!doc) { this.logger.warn(`Lookup not found in database: ${lookupName}`); throw new NotFoundException(`Lookup "${lookupName}" not found`); } return doc.response; } async getAccidentCauses(): Promise { return await this.getLookup("accident-causes"); } async getAccidentReportType(): Promise { return await this.getLookup("accident-report-type"); } async getVehicleUseTypes(): Promise { return await this.getLookup("vehicle-use-types"); } async getDmgPayMethod(): Promise { return await this.getLookup("dmg-pay-method"); } async getDrivingLicenceTypes(): Promise { return await this.getLookup("driving-licence-types"); } async getAccidentCulpritType(): Promise { return await this.getLookup("accident-culprit-type"); } async getAccidentWay(): Promise<{ id: number; label: string }[]> { const raw: { id: number; persianLabel: string }[] = JSON.parse( await readFile("src/static/ACCIDENT_WAY.json", "utf-8"), ); return raw.map((item) => ({ id: item.id, label: item.persianLabel })); } async getAccidentReason(): Promise< { id: number; label: string; fanavaran: number }[] > { const raw: { id: number; persianLabel: string; fanavaranID: number }[] = JSON.parse(await readFile("src/static/ACCIDENT_REASON.json", "utf-8")); return raw.map((item) => ({ id: item.id, label: item.persianLabel, fanavaran: item.fanavaranID, })); } async getAccidentType(): Promise<{ id: number; label: string }[]> { const raw: { id: number; persianLabel: string }[] = JSON.parse( await readFile("src/static/ACCIDENT_TYPE.json", "utf-8"), ); return raw.map((item) => ({ id: item.id, label: item.persianLabel })); } async getAccidentFields(): Promise<{ accidentWay: { id: number; label: string }[]; accidentReason: { id: number; label: string; fanavaran: number }[]; accidentType: { id: number; label: string }[]; }> { const [accidentWay, accidentReason, accidentType] = await Promise.all([ this.getAccidentWay(), this.getAccidentReason(), this.getAccidentType(), ]); return { accidentWay, accidentReason, accidentType }; } }