Merge branch 'fixAdValidation' into 'main'

Fix ad validation

See merge request v3/service/ad!36
This commit is contained in:
Fanch 2024-01-19 14:02:19 +00:00
commit 61c1d6ffcb
6 changed files with 58 additions and 52 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "@mobicoop/ad", "name": "@mobicoop/ad",
"version": "2.4.3", "version": "2.4.5",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@mobicoop/ad", "name": "@mobicoop/ad",
"version": "2.4.3", "version": "2.4.5",
"license": "AGPL", "license": "AGPL",
"dependencies": { "dependencies": {
"@grpc/grpc-js": "^1.9.14", "@grpc/grpc-js": "^1.9.14",

View File

@ -1,6 +1,6 @@
{ {
"name": "@mobicoop/ad", "name": "@mobicoop/ad",
"version": "2.4.3", "version": "2.4.5",
"description": "Mobicoop V3 Ad", "description": "Mobicoop V3 Ad",
"author": "sbriat", "author": "sbriat",
"private": true, "private": true,

View File

@ -43,43 +43,45 @@ export class AdMapper
frequency: copy.frequency, frequency: copy.frequency,
fromDate: new Date(copy.fromDate), fromDate: new Date(copy.fromDate),
toDate: new Date(copy.toDate), toDate: new Date(copy.toDate),
schedule: { schedule: copy.schedule
create: copy.schedule.map((scheduleItem: ScheduleItemProps) => ({ ? {
uuid: v4(), create: copy.schedule.map((scheduleItem: ScheduleItemProps) => ({
day: scheduleItem.day as number, uuid: v4(),
time: new Date( day: scheduleItem.day as number,
1970, time: new Date(
0, 1970,
1, 0,
parseInt(scheduleItem.time.split(':')[0]), 1,
parseInt(scheduleItem.time.split(':')[1]), parseInt(scheduleItem.time.split(':')[0]),
), parseInt(scheduleItem.time.split(':')[1]),
margin: scheduleItem.margin as number, ),
createdAt: now, margin: scheduleItem.margin as number,
updatedAt: now, createdAt: now,
})), updatedAt: now,
}, })),
}
: undefined,
seatsProposed: copy.seatsProposed as number, seatsProposed: copy.seatsProposed as number,
seatsRequested: copy.seatsRequested as number, seatsRequested: copy.seatsRequested as number,
strict: copy.strict as boolean, strict: copy.strict as boolean,
waypoints: { waypoints: copy.waypoints
create: copy.waypoints.map((waypoint: WaypointProps) => ({ ? {
uuid: v4(), create: copy.waypoints.map((waypoint: WaypointProps) => ({
position: waypoint.position, uuid: v4(),
name: waypoint.address.name, position: waypoint.position,
houseNumber: waypoint.address.houseNumber, name: waypoint.address.name,
street: waypoint.address.street, houseNumber: waypoint.address.houseNumber,
locality: waypoint.address.locality, street: waypoint.address.street,
postalCode: waypoint.address.postalCode, locality: waypoint.address.locality,
country: waypoint.address.country, postalCode: waypoint.address.postalCode,
lon: waypoint.address.coordinates.lon, country: waypoint.address.country,
lat: waypoint.address.coordinates.lat, lon: waypoint.address.coordinates.lon,
createdAt: now, lat: waypoint.address.coordinates.lat,
updatedAt: now, createdAt: now,
})), updatedAt: now,
}, })),
createdAt: copy.createdAt, }
updatedAt: copy.updatedAt, : undefined,
}; };
return record; return record;
}; };
@ -97,7 +99,7 @@ export class AdMapper
frequency: record.frequency as Frequency, frequency: record.frequency as Frequency,
fromDate: record.fromDate.toISOString().split('T')[0], fromDate: record.fromDate.toISOString().split('T')[0],
toDate: record.toDate.toISOString().split('T')[0], toDate: record.toDate.toISOString().split('T')[0],
schedule: record.schedule.map((scheduleItem: ScheduleItemModel) => ({ schedule: record.schedule?.map((scheduleItem: ScheduleItemModel) => ({
day: scheduleItem.day, day: scheduleItem.day,
time: `${scheduleItem.time time: `${scheduleItem.time
.getUTCHours() .getUTCHours()
@ -111,7 +113,7 @@ export class AdMapper
seatsProposed: record.seatsProposed, seatsProposed: record.seatsProposed,
seatsRequested: record.seatsRequested, seatsRequested: record.seatsRequested,
strict: record.strict, strict: record.strict,
waypoints: record.waypoints.map((waypoint: WaypointModel) => ({ waypoints: record.waypoints?.map((waypoint: WaypointModel) => ({
position: waypoint.position, position: waypoint.position,
address: { address: {
name: waypoint.name, name: waypoint.name,

View File

@ -15,8 +15,8 @@ export class ValidateAdService implements ICommandHandler {
async execute(command: ValidateAdCommand): Promise<AggregateID> { async execute(command: ValidateAdCommand): Promise<AggregateID> {
const ad: AdEntity = await this.repository.findOneById(command.id, { const ad: AdEntity = await this.repository.findOneById(command.id, {
waypoints: true, waypoints: false,
schedule: true, schedule: false,
}); });
ad.valid(); ad.valid();
await this.repository.update(ad.id, ad); await this.repository.update(ad.id, ad);

View File

@ -24,22 +24,26 @@ export type AdBaseModel = {
seatsProposed: number; seatsProposed: number;
seatsRequested: number; seatsRequested: number;
strict: boolean; strict: boolean;
createdAt: Date;
updatedAt: Date;
}; };
export type AdReadModel = AdBaseModel & { export type AdReadModel = AdBaseModel & {
waypoints: WaypointModel[]; waypoints: WaypointModel[];
schedule: ScheduleItemModel[]; schedule: ScheduleItemModel[];
createdAt: Date;
updatedAt: Date;
}; };
export type AdWriteModel = AdBaseModel & { export type AdWriteModel = AdBaseModel & {
waypoints: { schedule: ScheduleWriteModel | undefined;
create: WaypointModel[]; waypoints: WaypointWriteModel | undefined;
}; };
schedule: {
create: ScheduleItemModel[]; export type ScheduleWriteModel = {
}; create: ScheduleItemModel[];
};
export type WaypointWriteModel = {
create: WaypointModel[];
}; };
export type ScheduleItemModel = { export type ScheduleItemModel = {

View File

@ -144,9 +144,9 @@ describe('Ad Mapper', () => {
it('should map domain entity to persistence data', async () => { it('should map domain entity to persistence data', async () => {
const mapped: AdWriteModel = adMapper.toPersistence(adEntity); const mapped: AdWriteModel = adMapper.toPersistence(adEntity);
expect(mapped.waypoints.create[0].uuid.length).toBe(36); expect(mapped.waypoints?.create[0].uuid.length).toBe(36);
expect(mapped.waypoints.create[1].uuid.length).toBe(36); expect(mapped.waypoints?.create[1].uuid.length).toBe(36);
expect(mapped.schedule.create.length).toBe(1); expect(mapped.schedule?.create.length).toBe(1);
}); });
it('should map persisted data to domain entity', async () => { it('should map persisted data to domain entity', async () => {