Implement the UpdateAdCommand

This commit is contained in:
Romain Thouvenin
2024-05-07 10:13:28 +02:00
parent 34ad357f47
commit 3be2d73c60
11 changed files with 237 additions and 48 deletions

View File

@@ -1,14 +1,14 @@
import { LoggerBase, MessagePublisherPort } from '@mobicoop/ddd-library';
import { ExtendedPrismaRepositoryBase } from '@mobicoop/ddd-library/dist/db/prisma-repository.base';
import { Inject, Injectable, Logger } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { AdRepositoryPort } from '../core/application/ports/ad.repository.port';
import { LoggerBase, MessagePublisherPort } from '@mobicoop/ddd-library';
import { PrismaService } from './prisma.service';
import { AD_MESSAGE_PUBLISHER } from '../ad.di-tokens';
import { AdEntity } from '../core/domain/ad.entity';
import { AdMapper } from '../ad.mapper';
import { ExtendedPrismaRepositoryBase } from '@mobicoop/ddd-library/dist/db/prisma-repository.base';
import { Frequency } from '../core/domain/ad.types';
import { SERVICE_NAME } from '@src/app.constants';
import { AD_MESSAGE_PUBLISHER } from '../ad.di-tokens';
import { AdMapper } from '../ad.mapper';
import { AdRepositoryPort } from '../core/application/ports/ad.repository.port';
import { AdEntity } from '../core/domain/ad.entity';
import { Frequency } from '../core/domain/ad.types';
import { PrismaService } from './prisma.service';
export type AdModel = {
uuid: string;
@@ -26,8 +26,6 @@ export type AdModel = {
passengerDistance?: number;
fwdAzimuth: number;
backAzimuth: number;
createdAt: Date;
updatedAt: Date;
};
/**
@@ -36,15 +34,26 @@ export type AdModel = {
export type AdReadModel = AdModel & {
waypoints: string;
schedule: ScheduleItemModel[];
createdAt: Date;
updatedAt: Date;
};
/**
* The record ready to be sent to the persistence system
*/
export type AdWriteModel = AdModel & {
schedule: {
create: ScheduleItemModel[];
};
schedule: ScheduleWriteModel;
};
export type ScheduleWriteModel = {
deleteMany?: PastCreatedFilter;
create: ScheduleItemModel[];
};
// used to delete records created in the past,
// because the order of `create` and `deleteMany` is not guaranteed
export type PastCreatedFilter = {
createdAt: { lt: Date };
};
export type AdWriteExtraModel = {
@@ -70,11 +79,15 @@ export type UngroupedAdModel = AdModel &
scheduleItemCreatedAt: Date;
scheduleItemUpdatedAt: Date;
waypoints: string;
createdAt: Date;
updatedAt: Date;
};
export type GroupedAdModel = AdModel & {
schedule: ScheduleItemModel[];
waypoints: string;
createdAt: Date;
updatedAt: Date;
};
/**
@@ -169,4 +182,12 @@ export class AdRepository
});
return adReadModels;
};
async update(
id: string,
entity: AdEntity,
identifier?: string,
): Promise<void> {
this.updateExtra(id, entity, 'ad', identifier);
}
}