mirror of
https://gitlab.com/mobicoop/v3/service/matcher.git
synced 2026-01-09 07:52:40 +00:00
add steps to route response
This commit is contained in:
@@ -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(
|
||||||
[
|
[
|
||||||
|
|||||||
Reference in New Issue
Block a user