import { Injectable } from '@nestjs/common'; import { DatabaseRepository } from '../../../database/domain/database.repository'; import { Ad } from '../../domain/entities/ad'; import { DatabaseException } from '../../../database/exceptions/database.exception'; @Injectable() export class AdRepository extends DatabaseRepository { protected model = 'ad'; createAd = async (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 => ({ 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() + 1 }-${ad.fromDate.getDate()}'`, toDate: `'${ad.toDate.getFullYear()}-${ ad.toDate.getMonth() + 1 }-${ad.toDate.getDate()}'`, monTime: ad.monTime ? `'${ad.monTime.getFullYear()}-${ ad.monTime.getMonth() + 1 }-${ad.monTime.getDate()}T${ad.monTime.getHours()}:${ad.monTime.getMinutes()}Z'` : 'NULL', tueTime: ad.tueTime ? `'${ad.tueTime.getFullYear()}-${ ad.tueTime.getMonth() + 1 }-${ad.tueTime.getDate()}T${ad.tueTime.getHours()}:${ad.tueTime.getMinutes()}Z'` : 'NULL', wedTime: ad.wedTime ? `'${ad.wedTime.getFullYear()}-${ ad.wedTime.getMonth() + 1 }-${ad.wedTime.getDate()}T${ad.wedTime.getHours()}:${ad.wedTime.getMinutes()}Z'` : 'NULL', thuTime: ad.thuTime ? `'${ad.thuTime.getFullYear()}-${ ad.thuTime.getMonth() + 1 }-${ad.thuTime.getDate()}T${ad.thuTime.getHours()}:${ad.thuTime.getMinutes()}Z'` : 'NULL', friTime: ad.friTime ? `'${ad.friTime.getFullYear()}-${ ad.friTime.getMonth() + 1 }-${ad.friTime.getDate()}T${ad.friTime.getHours()}:${ad.friTime.getMinutes()}Z'` : 'NULL', satTime: ad.satTime ? `'${ad.satTime.getFullYear()}-${ ad.satTime.getMonth() + 1 }-${ad.satTime.getDate()}T${ad.satTime.getHours()}:${ad.satTime.getMinutes()}Z'` : 'NULL', sunTime: ad.sunTime ? `'${ad.sunTime.getFullYear()}-${ ad.sunTime.getMonth() + 1 }-${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; };