import { Injectable } from '@nestjs/common'; import { MatcherRepository } from '../../../database/domain/matcher-repository'; import { Ad } from '../../domain/entities/ad'; import { DatabaseException } from '../../../database/exceptions/database.exception'; @Injectable() export class AdRepository extends MatcherRepository { protected model = 'ad'; async createAd(ad: Partial): Promise { try { const affectedRowNumber = await this.createWithFields( this.createFields(ad), ); if (affectedRowNumber == 1) { return this.findOneByUuid(ad.uuid); } throw new DatabaseException(); } catch (e) { throw e; } } private createFields(ad: Partial): Partial { return { uuid: `'${ad.uuid}'`, userUuid: `'${ad.userUuid}'`, driver: ad.driver ? 'true' : 'false', passenger: ad.passenger ? 'true' : 'false', frequency: `'${ad.frequency}'`, fromDate: `'${ad.fromDate.getFullYear()}-${ad.fromDate.getMonth()}-${ad.fromDate.getDate()}'`, toDate: `'${ad.toDate.getFullYear()}-${ad.toDate.getMonth()}-${ad.toDate.getDate()}'`, monTime: ad.monTime ? `'${ad.monTime.getFullYear()}-${ad.monTime.getMonth()}-${ad.monTime.getDate()}T${ad.monTime.getHours()}:${ad.monTime.getMinutes()}Z'` : 'NULL', tueTime: ad.tueTime ? `'${ad.tueTime.getFullYear()}-${ad.tueTime.getMonth()}-${ad.tueTime.getDate()}T${ad.tueTime.getHours()}:${ad.tueTime.getMinutes()}Z'` : 'NULL', wedTime: ad.wedTime ? `'${ad.wedTime.getFullYear()}-${ad.wedTime.getMonth()}-${ad.wedTime.getDate()}T${ad.wedTime.getHours()}:${ad.wedTime.getMinutes()}Z'` : 'NULL', thuTime: ad.thuTime ? `'${ad.thuTime.getFullYear()}-${ad.thuTime.getMonth()}-${ad.thuTime.getDate()}T${ad.thuTime.getHours()}:${ad.thuTime.getMinutes()}Z'` : 'NULL', friTime: ad.friTime ? `'${ad.friTime.getFullYear()}-${ad.friTime.getMonth()}-${ad.friTime.getDate()}T${ad.friTime.getHours()}:${ad.friTime.getMinutes()}Z'` : 'NULL', satTime: ad.satTime ? `'${ad.satTime.getFullYear()}-${ad.satTime.getMonth()}-${ad.satTime.getDate()}T${ad.satTime.getHours()}:${ad.satTime.getMinutes()}Z'` : 'NULL', sunTime: ad.sunTime ? `'${ad.sunTime.getFullYear()}-${ad.sunTime.getMonth()}-${ad.sunTime.getDate()}T${ad.sunTime.getHours()}:${ad.sunTime.getMinutes()}Z'` : 'NULL', monMargin: ad.monMargin, tueMargin: ad.tueMargin, wedMargin: ad.wedMargin, thuMargin: ad.thuMargin, friMargin: ad.friMargin, satMargin: ad.satMargin, sunMargin: ad.sunMargin, fwdAzimuth: ad.fwdAzimuth, backAzimuth: ad.backAzimuth, driverDuration: ad.driverDuration ?? 'NULL', driverDistance: ad.driverDistance ?? 'NULL', passengerDuration: ad.passengerDuration ?? 'NULL', passengerDistance: ad.passengerDistance ?? 'NULL', waypoints: ad.waypoints, direction: ad.direction, seatsDriver: ad.seatsDriver, seatsPassenger: ad.seatsPassenger, seatsUsed: ad.seatsUsed ?? 0, strict: ad.strict, }; } } type AdFields = { uuid: string; userUuid: string; driver: string; passenger: string; frequency: string; fromDate: string; toDate: string; monTime: string; tueTime: string; wedTime: string; thuTime: string; friTime: string; satTime: string; sunTime: string; monMargin: number; tueMargin: number; wedMargin: number; thuMargin: number; friMargin: number; satMargin: number; sunMargin: number; driverDuration?: number | 'NULL'; driverDistance?: number | 'NULL'; passengerDuration?: number | 'NULL'; passengerDistance?: number | 'NULL'; waypoints: string; direction: string; fwdAzimuth: number; backAzimuth: number; seatsDriver?: number; seatsPassenger?: number; seatsUsed?: number; strict: boolean; createdAt: string; updatedAt: string; };