19 Commits

Author SHA1 Message Date
Sylvain Briat
fef0779aaa 1.4.2 2023-11-06 17:27:56 +01:00
Sylvain Briat
fb3f1cf4df updateProto 2023-11-06 17:27:49 +01:00
Sylvain Briat
703865dc38 Merge branch 'fixReadme' into 'main'
Fix readme

See merge request v3/service/matcher!19
2023-11-06 09:10:22 +00:00
Sylvain Briat
75bb82094d 1.4.1 2023-11-06 10:05:24 +01:00
Sylvain Briat
8d2964659b remove match id from doc 2023-11-06 10:05:10 +01:00
Sylvain Briat
8eb1b51457 Merge branch 'removeMatchId' into 'main'
Remove useless match id from matching in proto file

See merge request v3/service/matcher!18
2023-11-06 08:59:54 +00:00
Sylvain Briat
a1ff6f9f45 1.4.0 2023-11-06 09:55:14 +01:00
Sylvain Briat
c09b1b9863 remove useless match id from matching data 2023-11-06 09:54:59 +01:00
Sylvain Briat
337c28370d Merge branch 'security' into 'main'
Add Gitlab Security checks

See merge request v3/service/matcher!17
2023-11-04 09:40:40 +00:00
Sylvain Briat
14c43afb34 try secret detection security --check 2023-11-04 10:31:05 +01:00
Sylvain Briat
73ed3a948e try sast security --check 2023-11-04 10:25:17 +01:00
Sylvain Briat
b0718e83df Merge branch 'fixMatchMapperUnitTest' into 'main'
fix bad matchMapper unit test

See merge request v3/service/matcher!16
2023-11-03 10:31:31 +00:00
Sylvain Briat
4547dcf655 fix bad matchMapper unit test 2023-11-03 11:25:02 +01:00
Sylvain Briat
c5e58db5a6 Merge branch 'fixJourneyVO' into 'main'
Fix journey vo

See merge request v3/service/matcher!15
2023-11-02 16:19:14 +00:00
Sylvain Briat
d4412a0cf1 1.3.1 2023-11-02 17:13:29 +01:00
Sylvain Briat
5ca5200f1a fix journey value object : useless driver neutral target for passenger start 2023-11-02 17:13:16 +01:00
Sylvain Briat
62e4015ea7 Merge branch 'removeConfigurationPackageV3' into 'main'
Update default configuration management

See merge request v3/service/matcher!14
2023-10-31 15:42:25 +00:00
Sylvain Briat
c3e03e179c fix repository signature in unit test 2023-10-31 16:39:07 +01:00
Sylvain Briat
07e44a259b fix repository signature in unit test 2023-10-31 16:34:00 +01:00
11 changed files with 43 additions and 65 deletions

View File

@@ -4,6 +4,10 @@ stages:
- test - test
- build - build
include:
- template: Security/SAST.gitlab-ci.yml
- template: Security/Secret-Detection.gitlab-ci.yml
############## ##############
# TEST STAGE # # TEST STAGE #
############## ##############

View File

@@ -181,7 +181,6 @@ If the matching is successful, you will get a result, containing :
- **page**: the number of the page that is returned (may be different than the number of the required page, if number of results does not match with perPage parameter) - **page**: the number of the page that is returned (may be different than the number of the required page, if number of results does not match with perPage parameter)
- **perPage**: the number of results per page (as it may not be specified in the request) - **perPage**: the number of results per page (as it may not be specified in the request)
- **data**: an array of the results themselves, each including: - **data**: an array of the results themselves, each including:
- **id**: an id for the result
- **adId**: the id of the ad that matches - **adId**: the id of the ad that matches
- **role**: the role of the ad owner in that match - **role**: the role of the ad owner in that match
- **distance**: the distance in metres of the resulting carpool - **distance**: the distance in metres of the resulting carpool

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "@mobicoop/matcher", "name": "@mobicoop/matcher",
"version": "1.3.0", "version": "1.4.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@mobicoop/matcher", "name": "@mobicoop/matcher",
"version": "1.3.0", "version": "1.4.2",
"license": "AGPL", "license": "AGPL",
"dependencies": { "dependencies": {
"@grpc/grpc-js": "^1.9.9", "@grpc/grpc-js": "^1.9.9",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@mobicoop/matcher", "name": "@mobicoop/matcher",
"version": "1.3.0", "version": "1.4.2",
"description": "Mobicoop V3 Matcher", "description": "Mobicoop V3 Matcher",
"author": "sbriat", "author": "sbriat",
"private": true, "private": true,

View File

@@ -38,24 +38,22 @@ export class Journey extends ValueObject<JourneyProps> {
actorTime.target == Target.START, actorTime.target == Target.START,
) as ActorTime, ) as ActorTime,
) as JourneyItem; ) as JourneyItem;
const passengerDepartureActorTime = const passengerDepartureActorTime: ActorTime =
passengerDepartureJourneyItem.actorTimes.find( passengerDepartureJourneyItem.actorTimes.find(
(actorTime: ActorTime) => (actorTime: ActorTime) =>
actorTime.role == Role.PASSENGER && actorTime.target == Target.START, actorTime.role == Role.PASSENGER && actorTime.target == Target.START,
) as ActorTime; ) as ActorTime;
const driverNeutralActorTime = const driverActorTime = passengerDepartureJourneyItem.actorTimes.find(
passengerDepartureJourneyItem.actorTimes.find( (actorTime: ActorTime) => actorTime.role == Role.DRIVER,
(actorTime: ActorTime) => ) as ActorTime;
actorTime.role == Role.DRIVER && actorTime.target == Target.NEUTRAL,
) as ActorTime;
return ( return (
(passengerDepartureActorTime.firstMinDatetime <= (passengerDepartureActorTime.firstMinDatetime <=
driverNeutralActorTime.firstMaxDatetime && driverActorTime.firstMaxDatetime &&
driverNeutralActorTime.firstMaxDatetime <= driverActorTime.firstMaxDatetime <=
passengerDepartureActorTime.firstMaxDatetime) || passengerDepartureActorTime.firstMaxDatetime) ||
(passengerDepartureActorTime.firstMinDatetime <= (passengerDepartureActorTime.firstMinDatetime <=
driverNeutralActorTime.firstMinDatetime && driverActorTime.firstMinDatetime &&
driverNeutralActorTime.firstMinDatetime <= driverActorTime.firstMinDatetime <=
passengerDepartureActorTime.firstMaxDatetime) passengerDepartureActorTime.firstMaxDatetime)
); );
}; };

View File

@@ -32,6 +32,7 @@ export class MatchGrpcController {
@UseInterceptors(CacheInterceptor) @UseInterceptors(CacheInterceptor)
@GrpcMethod('MatcherService', 'Match') @GrpcMethod('MatcherService', 'Match')
async match(data: MatchRequestDto): Promise<MatchingPaginatedResponseDto> { async match(data: MatchRequestDto): Promise<MatchingPaginatedResponseDto> {
console.log(data);
try { try {
const matchingResult: MatchingResult = await this.queryBus.execute( const matchingResult: MatchingResult = await this.queryBus.execute(
new MatchQuery(data, this.routeProvider), new MatchQuery(data, this.routeProvider),

View File

@@ -24,9 +24,8 @@ message MatchRequest {
int32 azimuthMargin = 15; int32 azimuthMargin = 15;
float maxDetourDistanceRatio = 16; float maxDetourDistanceRatio = 16;
float maxDetourDurationRatio = 17; float maxDetourDurationRatio = 17;
int32 identifier = 18; optional int32 page = 18;
optional int32 page = 19; optional int32 perPage = 19;
optional int32 perPage = 20;
} }
message ScheduleItem { message ScheduleItem {
@@ -57,18 +56,17 @@ enum AlgorithmType {
} }
message Match { message Match {
string id = 1; string adId = 1;
string adId = 2; string role = 2;
string role = 3; int32 distance = 3;
int32 distance = 4; int32 duration = 4;
int32 duration = 5; int32 initialDistance = 5;
int32 initialDistance = 6; int32 initialDuration = 6;
int32 initialDuration = 7; int32 distanceDetour = 7;
int32 distanceDetour = 8; int32 durationDetour = 8;
int32 durationDetour = 9; double distanceDetourPercentage = 9;
double distanceDetourPercentage = 10; double durationDetourPercentage = 10;
double durationDetourPercentage = 11; repeated Journey journeys = 11;
repeated Journey journeys = 12;
} }
message Journey { message Journey {

View File

@@ -53,6 +53,7 @@ const mockAdRepository: AdRepositoryPort = {
insertExtra: jest.fn(), insertExtra: jest.fn(),
findOneById: jest.fn(), findOneById: jest.fn(),
findOne: jest.fn(), findOne: jest.fn(),
findAll: jest.fn(),
insert: jest.fn(), insert: jest.fn(),
update: jest.fn(), update: jest.fn(),
updateWhere: jest.fn(), updateWhere: jest.fn(),

View File

@@ -54,6 +54,7 @@ const mockMatcherRepository: AdRepositoryPort = {
insertExtra: jest.fn(), insertExtra: jest.fn(),
findOneById: jest.fn(), findOneById: jest.fn(),
findOne: jest.fn(), findOne: jest.fn(),
findAll: jest.fn(),
insert: jest.fn(), insert: jest.fn(),
update: jest.fn(), update: jest.fn(),
updateWhere: jest.fn(), updateWhere: jest.fn(),

View File

@@ -99,6 +99,7 @@ const mockMatcherRepository: AdRepositoryPort = {
insertExtra: jest.fn(), insertExtra: jest.fn(),
findOneById: jest.fn(), findOneById: jest.fn(),
findOne: jest.fn(), findOne: jest.fn(),
findAll: jest.fn(),
insert: jest.fn(), insert: jest.fn(),
update: jest.fn(), update: jest.fn(),
updateWhere: jest.fn(), updateWhere: jest.fn(),

View File

@@ -195,8 +195,15 @@ const mockMatchMapper = {
frequency: 'RECURRENT', frequency: 'RECURRENT',
distance: 356041, distance: 356041,
duration: 12647, duration: 12647,
initialDistance: 349251,
initialDuration: 12103,
distanceDetour: 6790,
durationDetour: 544,
distanceDetourPercentage: 4.1,
durationDetourPercentage: 3.8,
journeys: [ journeys: [
{ {
day: 5,
firstDate: '2023-09-01', firstDate: '2023-09-01',
lastDate: '2024-08-30', lastDate: '2024-08-30',
journeyItems: [ journeyItems: [
@@ -205,16 +212,11 @@ const mockMatchMapper = {
lon: 6.17651, lon: 6.17651,
duration: 0, duration: 0,
distance: 0, distance: 0,
time: '07:00',
actorTimes: [ actorTimes: [
{ {
role: 'DRIVER', role: 'DRIVER',
target: 'START', target: 'START',
firstDatetime: '2023-09-01 07:00',
firstMinDatetime: '2023-09-01 06:45',
firstMaxDatetime: '2023-09-01 07:15',
lastDatetime: '2024-08-30 07:00',
lastMinDatetime: '2024-08-30 06:45',
lastMaxDatetime: '2024-08-30 07:15',
}, },
], ],
}, },
@@ -223,26 +225,15 @@ const mockMatchMapper = {
lon: 6.67487, lon: 6.67487,
duration: 2100, duration: 2100,
distance: 56878, distance: 56878,
time: '07:35',
actorTimes: [ actorTimes: [
{ {
role: 'DRIVER', role: 'DRIVER',
target: 'NEUTRAL', target: 'NEUTRAL',
firstDatetime: '2023-09-01 07:35',
firstMinDatetime: '2023-09-01 07:20',
firstMaxDatetime: '2023-09-01 07:50',
lastDatetime: '2024-08-30 07:35',
lastMinDatetime: '2024-08-30 07:20',
lastMaxDatetime: '2024-08-30 07:50',
}, },
{ {
role: 'PASSENGER', role: 'PASSENGER',
target: 'START', target: 'START',
firstDatetime: '2023-09-01 07:32',
firstMinDatetime: '2023-09-01 07:17',
firstMaxDatetime: '2023-09-01 07:47',
lastDatetime: '2024-08-30 07:32',
lastMinDatetime: '2024-08-30 07:17',
lastMaxDatetime: '2024-08-30 07:47',
}, },
], ],
}, },
@@ -251,26 +242,15 @@ const mockMatchMapper = {
lon: 6.9427, lon: 6.9427,
duration: 3840, duration: 3840,
distance: 76491, distance: 76491,
time: '08:04',
actorTimes: [ actorTimes: [
{ {
role: 'DRIVER', role: 'DRIVER',
target: 'NEUTRAL', target: 'NEUTRAL',
firstDatetime: '2023-09-01 08:04',
firstMinDatetime: '2023-09-01 07:51',
firstMaxDatetime: '2023-09-01 08:19',
lastDatetime: '2024-08-30 08:04',
lastMinDatetime: '2024-08-30 07:51',
lastMaxDatetime: '2024-08-30 08:19',
}, },
{ {
role: 'PASSENGER', role: 'PASSENGER',
target: 'FINISH', target: 'FINISH',
firstDatetime: '2023-09-01 08:01',
firstMinDatetime: '2023-09-01 07:46',
firstMaxDatetime: '2023-09-01 08:16',
lastDatetime: '2024-08-30 08:01',
lastMinDatetime: '2024-08-30 07:46',
lastMaxDatetime: '2024-08-30 08:16',
}, },
], ],
}, },
@@ -279,16 +259,11 @@ const mockMatchMapper = {
lon: 7.02154, lon: 7.02154,
duration: 4980, duration: 4980,
distance: 96475, distance: 96475,
time: '08:23',
actorTimes: [ actorTimes: [
{ {
role: 'DRIVER', role: 'DRIVER',
target: 'FINISH', target: 'FINISH',
firstDatetime: '2023-09-01 08:23',
firstMinDatetime: '2023-09-01 08:08',
firstMaxDatetime: '2023-09-01 08:38',
lastDatetime: '2024-08-30 08:23',
lastMinDatetime: '2024-08-30 08:08',
lastMaxDatetime: '2024-08-30 08:38',
}, },
], ],
}, },