mirror of
https://gitlab.com/mobicoop/v3/service/matcher.git
synced 2026-01-01 04:42:41 +00:00
get candidates in ad repository
This commit is contained in:
@@ -9,7 +9,7 @@ import { AdMapper } from '../ad.mapper';
|
||||
import { ExtendedPrismaRepositoryBase } from '@mobicoop/ddd-library/dist/db/prisma-repository.base';
|
||||
import { Frequency } from '../core/domain/ad.types';
|
||||
|
||||
export type AdBaseModel = {
|
||||
export type AdModel = {
|
||||
uuid: string;
|
||||
driver: boolean;
|
||||
passenger: boolean;
|
||||
@@ -29,62 +29,42 @@ export type AdBaseModel = {
|
||||
updatedAt: Date;
|
||||
};
|
||||
|
||||
export type AdReadModel = AdBaseModel & {
|
||||
export type AdReadModel = AdModel & {
|
||||
waypoints: string;
|
||||
schedule: ScheduleItemModel[];
|
||||
};
|
||||
|
||||
export type AdWriteModel = AdBaseModel & {
|
||||
export type AdWriteModel = AdModel & {
|
||||
schedule: {
|
||||
create: ScheduleItemModel[];
|
||||
};
|
||||
};
|
||||
|
||||
export type AdUnsupportedWriteModel = {
|
||||
export type AdWriteExtraModel = {
|
||||
waypoints: string;
|
||||
direction: string;
|
||||
};
|
||||
|
||||
export type ScheduleItemModel = {
|
||||
uuid: string;
|
||||
export type ScheduleItem = {
|
||||
day: number;
|
||||
time: Date;
|
||||
margin: number;
|
||||
};
|
||||
|
||||
export type ScheduleItemModel = ScheduleItem & {
|
||||
uuid: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
};
|
||||
|
||||
export type RawAdBaseModel = {
|
||||
uuid: string;
|
||||
driver: boolean;
|
||||
passenger: boolean;
|
||||
frequency: Frequency;
|
||||
fromDate: Date;
|
||||
toDate: Date;
|
||||
seatsProposed: number;
|
||||
seatsRequested: number;
|
||||
strict: boolean;
|
||||
driverDuration?: number;
|
||||
driverDistance?: number;
|
||||
passengerDuration?: number;
|
||||
passengerDistance?: number;
|
||||
fwdAzimuth: number;
|
||||
backAzimuth: number;
|
||||
export type UngroupedAdModel = AdModel &
|
||||
ScheduleItem & {
|
||||
waypoints: string;
|
||||
};
|
||||
|
||||
export type GroupedAdModel = AdModel & {
|
||||
schedule: ScheduleItem[];
|
||||
waypoints: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
};
|
||||
|
||||
export type RawScheduleItemModel = {
|
||||
day: number;
|
||||
time: Date;
|
||||
margin: number;
|
||||
};
|
||||
|
||||
export type RawAdModel = RawAdBaseModel & RawScheduleItemModel;
|
||||
|
||||
export type RawAdReadModel = RawAdBaseModel & {
|
||||
schedule: RawScheduleItemModel[];
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -96,7 +76,7 @@ export class AdRepository
|
||||
AdEntity,
|
||||
AdReadModel,
|
||||
AdWriteModel,
|
||||
AdUnsupportedWriteModel
|
||||
AdWriteExtraModel
|
||||
>
|
||||
implements AdRepositoryPort
|
||||
{
|
||||
@@ -121,40 +101,44 @@ export class AdRepository
|
||||
}
|
||||
|
||||
getCandidates = async (queryString: string): Promise<AdReadModel[]> =>
|
||||
this.toReadModels((await this.queryRawUnsafe(queryString)) as RawAdModel[]);
|
||||
this.toAdReadModels(
|
||||
(await this.prismaRaw.$queryRawUnsafe(queryString)) as UngroupedAdModel[],
|
||||
);
|
||||
|
||||
private toReadModels = (rawAds: RawAdModel[]): AdReadModel[] => {
|
||||
const rawAdReadModels: RawAdReadModel[] = rawAds.map(
|
||||
(rawAd: RawAdModel) => ({
|
||||
uuid: rawAd.uuid,
|
||||
driver: rawAd.driver,
|
||||
passenger: rawAd.passenger,
|
||||
frequency: rawAd.frequency,
|
||||
fromDate: rawAd.fromDate,
|
||||
toDate: rawAd.toDate,
|
||||
private toAdReadModels = (
|
||||
ungroupedAds: UngroupedAdModel[],
|
||||
): AdReadModel[] => {
|
||||
const groupedAdModels: GroupedAdModel[] = ungroupedAds.map(
|
||||
(ungroupedAd: UngroupedAdModel) => ({
|
||||
uuid: ungroupedAd.uuid,
|
||||
driver: ungroupedAd.driver,
|
||||
passenger: ungroupedAd.passenger,
|
||||
frequency: ungroupedAd.frequency,
|
||||
fromDate: ungroupedAd.fromDate,
|
||||
toDate: ungroupedAd.toDate,
|
||||
schedule: [
|
||||
{
|
||||
day: rawAd.day,
|
||||
time: rawAd.time,
|
||||
margin: rawAd.margin,
|
||||
day: ungroupedAd.day,
|
||||
time: ungroupedAd.time,
|
||||
margin: ungroupedAd.margin,
|
||||
},
|
||||
],
|
||||
seatsProposed: rawAd.seatsProposed,
|
||||
seatsRequested: rawAd.seatsRequested,
|
||||
strict: rawAd.strict,
|
||||
driverDuration: rawAd.driverDuration,
|
||||
driverDistance: rawAd.driverDistance,
|
||||
passengerDuration: rawAd.passengerDuration,
|
||||
passengerDistance: rawAd.passengerDistance,
|
||||
fwdAzimuth: rawAd.fwdAzimuth,
|
||||
backAzimuth: rawAd.backAzimuth,
|
||||
waypoints: rawAd.waypoints,
|
||||
createdAt: rawAd.createdAt,
|
||||
updatedAt: rawAd.updatedAt,
|
||||
seatsProposed: ungroupedAd.seatsProposed,
|
||||
seatsRequested: ungroupedAd.seatsRequested,
|
||||
strict: ungroupedAd.strict,
|
||||
driverDuration: ungroupedAd.driverDuration,
|
||||
driverDistance: ungroupedAd.driverDistance,
|
||||
passengerDuration: ungroupedAd.passengerDuration,
|
||||
passengerDistance: ungroupedAd.passengerDistance,
|
||||
fwdAzimuth: ungroupedAd.fwdAzimuth,
|
||||
backAzimuth: ungroupedAd.backAzimuth,
|
||||
waypoints: ungroupedAd.waypoints,
|
||||
createdAt: ungroupedAd.createdAt,
|
||||
updatedAt: ungroupedAd.updatedAt,
|
||||
}),
|
||||
);
|
||||
const adReadModels: AdReadModel[] = [];
|
||||
rawAdReadModels.forEach((adReadModel: AdReadModel) => {
|
||||
groupedAdModels.forEach((adReadModel: AdReadModel) => {
|
||||
const ad: AdReadModel | undefined = adReadModels.find(
|
||||
(arm: AdReadModel) => arm.uuid == adReadModel.uuid,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user