33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
import { AggregateRoot, AggregateID } from '@mobicoop/ddd-library';
|
|
import { CreateRouteProps, RouteProps, Route } from './route.types';
|
|
import { v4 } from 'uuid';
|
|
import { RouteNotFoundException } from './route.errors';
|
|
|
|
export class RouteEntity extends AggregateRoot<RouteProps> {
|
|
protected readonly _id: AggregateID;
|
|
|
|
static create = async (create: CreateRouteProps): Promise<RouteEntity> => {
|
|
const route: Route = await create.georouter.route(
|
|
create.waypoints,
|
|
create.georouterSettings,
|
|
);
|
|
if (!route) throw new RouteNotFoundException();
|
|
const routeProps: RouteProps = {
|
|
distance: route.distance,
|
|
duration: route.duration,
|
|
fwdAzimuth: route.fwdAzimuth,
|
|
backAzimuth: route.backAzimuth,
|
|
distanceAzimuth: route.distanceAzimuth,
|
|
points: route.points,
|
|
};
|
|
return new RouteEntity({
|
|
id: v4(),
|
|
props: routeProps,
|
|
});
|
|
};
|
|
|
|
validate(): void {
|
|
// entity business rules validation to protect it's invariant before saving entity to a database
|
|
}
|
|
}
|