add steps to route response
This commit is contained in:
parent
1f1502a623
commit
7cac8cbef9
|
@ -19,6 +19,7 @@ export class RouteEntity extends AggregateRoot<RouteProps> {
|
||||||
backAzimuth: route.backAzimuth,
|
backAzimuth: route.backAzimuth,
|
||||||
distanceAzimuth: route.distanceAzimuth,
|
distanceAzimuth: route.distanceAzimuth,
|
||||||
points: route.points,
|
points: route.points,
|
||||||
|
steps: route.steps,
|
||||||
};
|
};
|
||||||
return new RouteEntity({
|
return new RouteEntity({
|
||||||
id: v4(),
|
id: v4(),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { GeorouterPort } from '../application/ports/georouter.port';
|
import { GeorouterPort } from '../application/ports/georouter.port';
|
||||||
import { GeorouterSettings } from '../application/types/georouter-settings.type';
|
import { GeorouterSettings } from '../application/types/georouter-settings.type';
|
||||||
import { PointProps } from './value-objects/point.value-object';
|
import { PointProps } from './value-objects/point.value-object';
|
||||||
|
import { StepProps } from './value-objects/step.value-object';
|
||||||
|
|
||||||
// All properties that a Route has
|
// All properties that a Route has
|
||||||
export interface RouteProps {
|
export interface RouteProps {
|
||||||
|
@ -10,6 +11,7 @@ export interface RouteProps {
|
||||||
backAzimuth: number;
|
backAzimuth: number;
|
||||||
distanceAzimuth: number;
|
distanceAzimuth: number;
|
||||||
points: PointProps[];
|
points: PointProps[];
|
||||||
|
steps?: StepProps[];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Properties that are needed for a Route creation
|
// Properties that are needed for a Route creation
|
||||||
|
|
|
@ -8,7 +8,7 @@ import { PointProps } from './point.value-object';
|
||||||
|
|
||||||
export interface StepProps extends PointProps {
|
export interface StepProps extends PointProps {
|
||||||
duration: number;
|
duration: number;
|
||||||
distance: number;
|
distance?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Step extends ValueObject<StepProps> {
|
export class Step extends ValueObject<StepProps> {
|
||||||
|
@ -16,7 +16,7 @@ export class Step extends ValueObject<StepProps> {
|
||||||
return this.props.duration;
|
return this.props.duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
get distance(): number {
|
get distance(): number | undefined {
|
||||||
return this.props.distance;
|
return this.props.distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ export class Step extends ValueObject<StepProps> {
|
||||||
throw new ArgumentInvalidException(
|
throw new ArgumentInvalidException(
|
||||||
'duration must be greater than or equal to 0',
|
'duration must be greater than or equal to 0',
|
||||||
);
|
);
|
||||||
if (props.distance < 0)
|
if (props.distance !== undefined && props.distance < 0)
|
||||||
throw new ArgumentInvalidException(
|
throw new ArgumentInvalidException(
|
||||||
'distance must be greater than or equal to 0',
|
'distance must be greater than or equal to 0',
|
||||||
);
|
);
|
||||||
|
|
|
@ -22,6 +22,7 @@ export class RouteMapper
|
||||||
response.backAzimuth = Math.round(entity.getProps().backAzimuth);
|
response.backAzimuth = Math.round(entity.getProps().backAzimuth);
|
||||||
response.distanceAzimuth = Math.round(entity.getProps().distanceAzimuth);
|
response.distanceAzimuth = Math.round(entity.getProps().distanceAzimuth);
|
||||||
response.points = entity.getProps().points;
|
response.points = entity.getProps().points;
|
||||||
|
response.steps = entity.getProps().steps;
|
||||||
return response;
|
return response;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,11 @@ const mockHttpService = {
|
||||||
.mockImplementationOnce(() => {
|
.mockImplementationOnce(() => {
|
||||||
return throwError(() => 'Router unavailable');
|
return throwError(() => 'Router unavailable');
|
||||||
})
|
})
|
||||||
|
.mockImplementationOnce(() => {
|
||||||
|
return of({
|
||||||
|
status: 200,
|
||||||
|
});
|
||||||
|
})
|
||||||
.mockImplementationOnce(() => {
|
.mockImplementationOnce(() => {
|
||||||
return of({
|
return of({
|
||||||
status: 200,
|
status: 200,
|
||||||
|
@ -338,6 +343,28 @@ describe('Graphhopper Georouter', () => {
|
||||||
).rejects.toBeInstanceOf(GeorouterUnavailableException);
|
).rejects.toBeInstanceOf(GeorouterUnavailableException);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should fail if georouter response is corrupted', async () => {
|
||||||
|
await expect(
|
||||||
|
graphhopperGeorouter.route(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
lon: 0,
|
||||||
|
lat: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
lon: 1,
|
||||||
|
lat: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
{
|
||||||
|
detailedDistance: false,
|
||||||
|
detailedDuration: false,
|
||||||
|
points: false,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
).rejects.toBeInstanceOf(GeorouterUnavailableException);
|
||||||
|
});
|
||||||
|
|
||||||
it('should create a basic route', async () => {
|
it('should create a basic route', async () => {
|
||||||
const route: Route = await graphhopperGeorouter.route(
|
const route: Route = await graphhopperGeorouter.route(
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue