refactor database module
This commit is contained in:
		
							parent
							
								
									8ea3fb0f0a
								
							
						
					
					
						commit
						87b1857c95
					
				|  | @ -1,13 +1,13 @@ | |||
| import { Injectable } from '@nestjs/common'; | ||||
| import { MatcherRepository } from '../../../database/domain/matcher-repository'; | ||||
| 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 MatcherRepository<Ad> { | ||||
| export class AdRepository extends DatabaseRepository<Ad> { | ||||
|   protected model = 'ad'; | ||||
| 
 | ||||
|   async createAd(ad: Partial<Ad>): Promise<Ad> { | ||||
|   createAd = async (ad: Partial<Ad>): Promise<Ad> => { | ||||
|     try { | ||||
|       const affectedRowNumber = await this.createWithFields( | ||||
|         this.createFields(ad), | ||||
|  | @ -19,77 +19,75 @@ export class AdRepository extends MatcherRepository<Ad> { | |||
|     } catch (e) { | ||||
|       throw e; | ||||
|     } | ||||
|   } | ||||
|   }; | ||||
| 
 | ||||
|   private createFields(ad: Partial<Ad>): Partial<AdFields> { | ||||
|     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() + 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, | ||||
|     }; | ||||
|   } | ||||
|   private createFields = (ad: Partial<Ad>): Partial<AdFields> => ({ | ||||
|     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 = { | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import { TestingModule, Test } from '@nestjs/testing'; | ||||
| import { DatabaseModule } from '../../../database/database.module'; | ||||
| import { PrismaService } from '../../../database/adapters/secondaries/prisma-service'; | ||||
| import { PrismaService } from '../../../database/adapters/secondaries/prisma.service'; | ||||
| import { AdRepository } from '../../adapters/secondaries/ad.repository'; | ||||
| import { Ad } from '../../domain/entities/ad'; | ||||
| import { Frequency } from '../../domain/types/frequency.enum'; | ||||
|  |  | |||
|  | @ -3,10 +3,10 @@ import { Prisma } from '@prisma/client'; | |||
| import { DatabaseException } from '../../exceptions/database.exception'; | ||||
| import { ICollection } from '../../interfaces/collection.interface'; | ||||
| import { IRepository } from '../../interfaces/repository.interface'; | ||||
| import { PrismaService } from './prisma-service'; | ||||
| import { PrismaService } from './prisma.service'; | ||||
| 
 | ||||
| /** | ||||
|  * Child classes MUST redefined _model property with appropriate model name | ||||
|  * Child classes MUST redefined model property with appropriate model name | ||||
|  */ | ||||
| @Injectable() | ||||
| export abstract class PrismaRepository<T> implements IRepository<T> { | ||||
|  | @ -1,9 +1,8 @@ | |||
| import { Module } from '@nestjs/common'; | ||||
| import { PrismaService } from './adapters/secondaries/prisma-service'; | ||||
| import { AdRepository } from '../ad/adapters/secondaries/ad.repository'; | ||||
| import { PrismaService } from './adapters/secondaries/prisma.service'; | ||||
| 
 | ||||
| @Module({ | ||||
|   providers: [PrismaService, AdRepository], | ||||
|   exports: [PrismaService, AdRepository], | ||||
|   providers: [PrismaService], | ||||
|   exports: [PrismaService], | ||||
| }) | ||||
| export class DatabaseModule {} | ||||
|  |  | |||
|  | @ -0,0 +1,3 @@ | |||
| import { PrismaRepository } from '../adapters/secondaries/prisma.repository.abstract'; | ||||
| 
 | ||||
| export class DatabaseRepository<T> extends PrismaRepository<T> {} | ||||
|  | @ -1,3 +0,0 @@ | |||
| import { PrismaRepository } from '../adapters/secondaries/prisma-repository.abstract'; | ||||
| 
 | ||||
| export class MatcherRepository<T> extends PrismaRepository<T> {} | ||||
|  | @ -1,7 +1,7 @@ | |||
| import { Injectable } from '@nestjs/common'; | ||||
| import { Test, TestingModule } from '@nestjs/testing'; | ||||
| import { PrismaService } from '../../adapters/secondaries/prisma-service'; | ||||
| import { PrismaRepository } from '../../adapters/secondaries/prisma-repository.abstract'; | ||||
| import { PrismaService } from '../../adapters/secondaries/prisma.service'; | ||||
| import { PrismaRepository } from '../../adapters/secondaries/prisma.repository.abstract'; | ||||
| import { DatabaseException } from '../../exceptions/database.exception'; | ||||
| import { Prisma } from '@prisma/client'; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue