2023-05-11 15:47:55 +00:00
|
|
|
import { IGeorouter } from '../../geography/domain/interfaces/georouter.interface';
|
|
|
|
import { ICreateGeorouter } from '../../geography/domain/interfaces/georouter-creator.interface';
|
2023-04-25 15:49:47 +00:00
|
|
|
import { CreateAdRequest } from '../domain/dtos/create-ad.request';
|
2023-05-11 15:47:55 +00:00
|
|
|
import { Geography } from '../domain/entities/geography';
|
|
|
|
import { IDefaultParams } from '../domain/types/default-params.type';
|
|
|
|
import { Role } from '../domain/types/role.enum';
|
|
|
|
import { IFindTimezone } from '../../geography/domain/interfaces/timezone-finder.interface';
|
2023-04-25 15:49:47 +00:00
|
|
|
|
|
|
|
export class CreateAdCommand {
|
|
|
|
readonly createAdRequest: CreateAdRequest;
|
2023-05-11 15:47:55 +00:00
|
|
|
private readonly defaultParams: IDefaultParams;
|
|
|
|
private readonly georouter: IGeorouter;
|
|
|
|
private readonly timezoneFinder: IFindTimezone;
|
|
|
|
roles: Role[];
|
|
|
|
geography: Geography;
|
|
|
|
timezone: string;
|
2023-04-25 15:49:47 +00:00
|
|
|
|
2023-05-11 15:47:55 +00:00
|
|
|
constructor(
|
|
|
|
request: CreateAdRequest,
|
|
|
|
defaultParams: IDefaultParams,
|
|
|
|
georouterCreator: ICreateGeorouter,
|
|
|
|
timezoneFinder: IFindTimezone,
|
|
|
|
) {
|
2023-04-25 15:49:47 +00:00
|
|
|
this.createAdRequest = request;
|
2023-05-11 15:47:55 +00:00
|
|
|
this.defaultParams = defaultParams;
|
|
|
|
this.georouter = georouterCreator.create(
|
|
|
|
defaultParams.GEOROUTER_TYPE,
|
|
|
|
defaultParams.GEOROUTER_URL,
|
|
|
|
);
|
|
|
|
this.timezoneFinder = timezoneFinder;
|
|
|
|
this.setRoles();
|
|
|
|
this.setGeography();
|
2023-04-25 15:49:47 +00:00
|
|
|
}
|
2023-05-11 15:47:55 +00:00
|
|
|
|
|
|
|
private setRoles = (): void => {
|
|
|
|
this.roles = [];
|
|
|
|
if (this.createAdRequest.driver) this.roles.push(Role.DRIVER);
|
|
|
|
if (this.createAdRequest.passenger) this.roles.push(Role.PASSENGER);
|
|
|
|
};
|
|
|
|
|
|
|
|
private setGeography = async (): Promise<void> => {
|
|
|
|
this.geography = new Geography(this.createAdRequest.waypoints, {
|
|
|
|
timezone: this.defaultParams.DEFAULT_TIMEZONE,
|
|
|
|
finder: this.timezoneFinder,
|
|
|
|
});
|
|
|
|
if (this.geography.timezones.length > 0)
|
|
|
|
this.createAdRequest.timezone = this.geography.timezones[0];
|
|
|
|
try {
|
|
|
|
await this.geography.createRoutes(this.roles, this.georouter);
|
|
|
|
} catch (e) {
|
|
|
|
console.log(e);
|
|
|
|
}
|
|
|
|
};
|
2023-04-25 15:49:47 +00:00
|
|
|
}
|