97 lines
2.1 KiB
TypeScript
97 lines
2.1 KiB
TypeScript
import { Inject, Injectable, Logger } from '@nestjs/common';
|
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
import { AdEntity } from '../core/domain/ad.entity';
|
|
import { AdMapper } from '../ad.mapper';
|
|
import { AdRepositoryPort } from '../core/application/ports/ad.repository.port';
|
|
import {
|
|
LoggerBase,
|
|
MessagePublisherPort,
|
|
PrismaRepositoryBase,
|
|
} from '@mobicoop/ddd-library';
|
|
import { PrismaService } from './prisma.service';
|
|
import { AD_MESSAGE_PUBLISHER } from '../ad.di-tokens';
|
|
import { SERVICE_NAME } from '@src/app.constants';
|
|
|
|
export type AdBaseModel = {
|
|
uuid: string;
|
|
userUuid: string;
|
|
driver: boolean;
|
|
passenger: boolean;
|
|
status: string;
|
|
frequency: string;
|
|
fromDate: Date;
|
|
toDate: Date;
|
|
seatsProposed: number;
|
|
seatsRequested: number;
|
|
strict: boolean;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
};
|
|
|
|
export type AdReadModel = AdBaseModel & {
|
|
waypoints: WaypointModel[];
|
|
schedule: ScheduleItemModel[];
|
|
};
|
|
|
|
export type AdWriteModel = AdBaseModel & {
|
|
waypoints: {
|
|
create: WaypointModel[];
|
|
};
|
|
schedule: {
|
|
create: ScheduleItemModel[];
|
|
};
|
|
};
|
|
|
|
export type ScheduleItemModel = {
|
|
uuid: string;
|
|
day: number;
|
|
time: Date;
|
|
margin: number;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
};
|
|
|
|
export type WaypointModel = {
|
|
uuid: string;
|
|
position: number;
|
|
lon: number;
|
|
lat: number;
|
|
name?: string;
|
|
houseNumber?: string;
|
|
street?: string;
|
|
locality?: string;
|
|
postalCode?: string;
|
|
country: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
};
|
|
|
|
/**
|
|
* Repository is used for retrieving/saving domain entities
|
|
* */
|
|
@Injectable()
|
|
export class AdRepository
|
|
extends PrismaRepositoryBase<AdEntity, AdReadModel, AdWriteModel>
|
|
implements AdRepositoryPort
|
|
{
|
|
constructor(
|
|
prisma: PrismaService,
|
|
mapper: AdMapper,
|
|
eventEmitter: EventEmitter2,
|
|
@Inject(AD_MESSAGE_PUBLISHER)
|
|
protected readonly messagePublisher: MessagePublisherPort,
|
|
) {
|
|
super(
|
|
prisma.ad,
|
|
prisma,
|
|
mapper,
|
|
eventEmitter,
|
|
new LoggerBase({
|
|
logger: new Logger(AdRepository.name),
|
|
domain: SERVICE_NAME,
|
|
messagePublisher,
|
|
}),
|
|
);
|
|
}
|
|
}
|