Merge branch 'matchConfig' into 'main'

Match config

See merge request v3/service/configuration!29
This commit is contained in:
Sylvain Briat 2023-10-31 08:16:28 +00:00
commit a6a69c5051
11 changed files with 165 additions and 190 deletions

View File

@ -18,6 +18,8 @@ REDIS_PORT=6379
# CARPOOL
# default carpool departure time margin (in seconds)
DEPARTURE_TIME_MARGIN=900
# default validity duration (in days) for recurrent ads
RECURRENT_AD_VALIDITY_DURATION=365
# default role
ROLE=passenger
# seats proposed as driver / requested as passenger
@ -26,6 +28,26 @@ SEATS_REQUESTED=1
# accept only same frequency requests
STRICT_FREQUENCY=false
# MATCH
# algorithm type
ALGORITHM=PASSENGER_ORIENTED
# max distance in metres between driver
# route and passenger pick-up / drop-off
REMOTENESS=15000
# use passenger proportion
USE_PROPORTION=true
# minimal driver proportion
PROPORTION=0.3
# use azimuth calculation
USE_AZIMUTH=true
# azimuth margin
AZIMUTH_MARGIN=10
# margin duration in seconds
MARGIN_DURATION=900
# max detour ratio
MAX_DETOUR_DISTANCE_RATIO=0.3
MAX_DETOUR_DURATION_RATIO=0.3
# PAGINATION
# number of results per page
PER_PAGE=10

237
package-lock.json generated
View File

@ -1,17 +1,17 @@
{
"name": "@mobicoop/configuration",
"version": "2.2.1",
"version": "2.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@mobicoop/configuration",
"version": "2.2.1",
"version": "2.3.0",
"license": "AGPL",
"dependencies": {
"@grpc/grpc-js": "^1.9.7",
"@grpc/grpc-js": "^1.9.8",
"@grpc/proto-loader": "^0.7.10",
"@mobicoop/configuration-module": "^4.1.0",
"@mobicoop/configuration-module": "^6.1.0",
"@mobicoop/ddd-library": "^2.1.1",
"@mobicoop/health-module": "^2.3.1",
"@mobicoop/message-broker-module": "^2.1.1",
@ -29,8 +29,8 @@
"rimraf": "^5.0.5"
},
"devDependencies": {
"@nestjs/cli": "^10.2.0",
"@nestjs/schematics": "^10.0.2",
"@nestjs/cli": "^10.2.1",
"@nestjs/schematics": "^10.0.3",
"@nestjs/testing": "^10.2.7",
"@types/express": "^4.17.20",
"@types/jest": "29.5.6",
@ -89,9 +89,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "16.2.7",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.7.tgz",
"integrity": "sha512-XskObYrg7NRdEuHnSVZOM7OeinEL8HzugjmKnawAa+dAbFCCoGsVWjMliA/Q8sb1yfGkyL0WW7DZABZj7EGwWA==",
"version": "16.2.8",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.8.tgz",
"integrity": "sha512-PTGozYvh1Bin5lB15PwcXa26Ayd17bWGLS3H8Rs0s+04mUDvfNofmweaX1LgumWWy3nCUTDuwHxX10M3G0wE2g==",
"dev": true,
"dependencies": {
"ajv": "8.12.0",
@ -116,12 +116,12 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "16.2.7",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.7.tgz",
"integrity": "sha512-zu3xHwA4w+kXHkyyjGl3i7uSU2/kKLPKuyyixw0WLcKUQCYd7TWmu8OC0qCDa42XkxP9gGL091dJFu56exgneA==",
"version": "16.2.8",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.8.tgz",
"integrity": "sha512-MBiKZOlR9/YMdflALr7/7w/BGAfo/BGTrlkqsIB6rDWV1dYiCgxI+033HsiNssLS6RQyCFx/e7JA2aBBzu9zEg==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "16.2.7",
"@angular-devkit/core": "16.2.8",
"jsonc-parser": "3.2.0",
"magic-string": "0.30.1",
"ora": "5.4.1",
@ -134,13 +134,13 @@
}
},
"node_modules/@angular-devkit/schematics-cli": {
"version": "16.2.7",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-16.2.7.tgz",
"integrity": "sha512-K10EE3qtSv4AoI3gnCNT80BbDNMK6UmpM8w0sd08hlNC4SCfzp+OFszV0AW29A5VK3zkbDQLJ6PL4wnNN4iuDQ==",
"version": "16.2.8",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-16.2.8.tgz",
"integrity": "sha512-EXURJCzWTVYCipiTT4vxQQOrF63asOUDbeOy3OtiSh7EwIUvxm3BPG6hquJqngEnI/N6bA75NJ1fBhU6Hrh7eA==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "16.2.7",
"@angular-devkit/schematics": "16.2.7",
"@angular-devkit/core": "16.2.8",
"@angular-devkit/schematics": "16.2.8",
"ansi-colors": "4.1.3",
"inquirer": "8.2.4",
"symbol-observable": "4.0.0",
@ -1031,9 +1031,9 @@
]
},
"node_modules/@grpc/grpc-js": {
"version": "1.9.7",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.7.tgz",
"integrity": "sha512-yMaA/cIsRhGzW3ymCNpdlPcInXcovztlgu/rirThj2b87u3RzWUszliOqZ/pldy7yhmJPS8uwog+kZSTa4A0PQ==",
"version": "1.9.8",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.8.tgz",
"integrity": "sha512-FFPzDS333Vw8hvf+1FaEsaCYVPBdNdUCw7zArTiF7+6gOzln967b4GBCBekKGqoKEgna8d3Ayxv8t+IvazXG3g==",
"dependencies": {
"@grpc/proto-loader": "^0.7.8",
"@types/node": ">=12.12.47"
@ -1668,9 +1668,9 @@
}
},
"node_modules/@mobicoop/configuration-module": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@mobicoop/configuration-module/-/configuration-module-4.1.0.tgz",
"integrity": "sha512-j1C6S1S/v5nid9KeWVa97ZCVxwEbSWBP2oHzzRHazmgtO6lbybugnjQKtRHHKlnTMc1zGdD/4Xii/7JlGckflQ==",
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@mobicoop/configuration-module/-/configuration-module-6.1.0.tgz",
"integrity": "sha512-ar4hx+oB+RtgAj0SLg0/xgxHA7r/LnUz9BzXUlEX4va0AQwSPdFgTJhku6flMW4U0sJdtGEay3740BnqGfMtCw==",
"dependencies": {
"@songkeys/nestjs-redis": "^10.0.0",
"ioredis": "^5.3.2"
@ -1738,21 +1738,21 @@
}
},
"node_modules/@nestjs/cli": {
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.2.0.tgz",
"integrity": "sha512-OMbn6A/YNu7QSk1nM8VucrtUwocaa0XEa9uoqRpw5Acvh/KIetvMHCn8L6yIBxiK7yvYiKa8q9U+RpLsKpKfgw==",
"version": "10.2.1",
"resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.2.1.tgz",
"integrity": "sha512-CAJAQwmxFZfB3RTvqz/eaXXWpyU+mZ4QSqfBYzjneTsPgF+uyOAW3yQpaLNn9Dfcv39R9UxSuAhayv6yuFd+Jg==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "16.2.7",
"@angular-devkit/schematics": "16.2.7",
"@angular-devkit/schematics-cli": "16.2.7",
"@angular-devkit/core": "16.2.8",
"@angular-devkit/schematics": "16.2.8",
"@angular-devkit/schematics-cli": "16.2.8",
"@nestjs/schematics": "^10.0.1",
"chalk": "4.1.2",
"chokidar": "3.5.3",
"cli-table3": "0.6.3",
"commander": "4.1.1",
"fork-ts-checker-webpack-plugin": "9.0.0",
"glob": "10.3.4",
"fork-ts-checker-webpack-plugin": "9.0.2",
"glob": "10.3.10",
"inquirer": "8.2.6",
"node-emoji": "1.11.0",
"ora": "5.4.1",
@ -2075,13 +2075,13 @@
}
},
"node_modules/@nestjs/schematics": {
"version": "10.0.2",
"resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.0.2.tgz",
"integrity": "sha512-DaZZjymYoIfRqC5W62lnYXIIods1PDY6CGc8+IpRwyinzffjKxZ3DF3exu+mdyvllzkXo9DTXkoX4zOPSJHCkw==",
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.0.3.tgz",
"integrity": "sha512-2BRujK0GqGQ7j1Zpz+obVfskDnnOeVKt5aXoSaVngKo8Oczy8uYCY+R547TQB+Kf35epdfFER2pVnQrX3/It5A==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "16.1.8",
"@angular-devkit/schematics": "16.1.8",
"@angular-devkit/core": "16.2.8",
"@angular-devkit/schematics": "16.2.8",
"comment-json": "4.2.3",
"jsonc-parser": "3.2.0",
"pluralize": "8.0.0"
@ -2090,62 +2090,6 @@
"typescript": ">=4.8.2"
}
},
"node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": {
"version": "16.1.8",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.8.tgz",
"integrity": "sha512-dSRD/+bGanArIXkj+kaU1kDFleZeQMzmBiOXX+pK0Ah9/0Yn1VmY3RZh1zcX9vgIQXV+t7UPrTpOjaERMUtVGw==",
"dev": true,
"dependencies": {
"ajv": "8.12.0",
"ajv-formats": "2.1.1",
"jsonc-parser": "3.2.0",
"rxjs": "7.8.1",
"source-map": "0.7.4"
},
"engines": {
"node": "^16.14.0 || >=18.10.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
},
"peerDependencies": {
"chokidar": "^3.5.2"
},
"peerDependenciesMeta": {
"chokidar": {
"optional": true
}
}
},
"node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": {
"version": "16.1.8",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.8.tgz",
"integrity": "sha512-6LyzMdFJs337RTxxkI2U1Ndw0CW5mMX/aXWl8d7cW2odiSrAg8IdlMqpc+AM8+CPfsB0FtS1aWkEZqJLT0jHOg==",
"dev": true,
"dependencies": {
"@angular-devkit/core": "16.1.8",
"jsonc-parser": "3.2.0",
"magic-string": "0.30.0",
"ora": "5.4.1",
"rxjs": "7.8.1"
},
"engines": {
"node": "^16.14.0 || >=18.10.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
"yarn": ">= 1.13.0"
}
},
"node_modules/@nestjs/schematics/node_modules/magic-string": {
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
"integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.13"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@nestjs/swagger": {
"version": "7.1.14",
"resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.1.14.tgz",
@ -2670,12 +2614,6 @@
"undici-types": "~5.26.4"
}
},
"node_modules/@types/parse-json": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz",
"integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==",
"dev": true
},
"node_modules/@types/qs": {
"version": "6.9.9",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz",
@ -4277,19 +4215,29 @@
}
},
"node_modules/cosmiconfig": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
"integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true,
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
"yaml": "^1.10.0"
"import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
"parse-json": "^5.2.0",
"path-type": "^4.0.0"
},
"engines": {
"node": ">=10"
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/d-fischer"
},
"peerDependencies": {
"typescript": ">=4.9.5"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/create-jest": {
@ -5477,15 +5425,15 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.0.tgz",
"integrity": "sha512-Kw3JjsfGs0piB0V2Em8gCuo51O3p4KyCOK0Tn8X57oq2mSNBrMmONALRBw5frcmWsOVU7iELXXsJ+FVxJeQuhA==",
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz",
"integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.16.7",
"chalk": "^4.1.2",
"chokidar": "^3.5.3",
"cosmiconfig": "^7.0.1",
"cosmiconfig": "^8.2.0",
"deepmerge": "^4.2.2",
"fs-extra": "^10.0.0",
"memfs": "^3.4.1",
@ -5649,19 +5597,18 @@
}
},
"node_modules/glob": {
"version": "10.3.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz",
"integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==",
"dev": true,
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.0.3",
"jackspeak": "^2.3.5",
"minimatch": "^9.0.1",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
"path-scurry": "^1.10.1"
},
"bin": {
"glob": "dist/cjs/src/bin.js"
"glob": "dist/esm/bin.mjs"
},
"engines": {
"node": ">=16 || 14 >=14.17"
@ -5692,7 +5639,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@ -5701,7 +5647,6 @@
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@ -8293,49 +8238,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/rimraf/node_modules/glob": {
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.3.5",
"minimatch": "^9.0.1",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
"path-scurry": "^1.10.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/minimatch": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/run-applescript": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz",
@ -9827,15 +9729,6 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
},
"node_modules/yaml": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",

View File

@ -1,6 +1,6 @@
{
"name": "@mobicoop/configuration",
"version": "2.2.1",
"version": "2.3.0",
"description": "Mobicoop V3 Configuration Service",
"author": "sbriat",
"private": true,
@ -24,9 +24,9 @@
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@grpc/grpc-js": "^1.9.7",
"@grpc/grpc-js": "^1.9.8",
"@grpc/proto-loader": "^0.7.10",
"@mobicoop/configuration-module": "^4.1.0",
"@mobicoop/configuration-module": "^6.1.0",
"@mobicoop/ddd-library": "^2.1.1",
"@mobicoop/health-module": "^2.3.1",
"@mobicoop/message-broker-module": "^2.1.1",
@ -44,8 +44,8 @@
"rimraf": "^5.0.5"
},
"devDependencies": {
"@nestjs/cli": "^10.2.0",
"@nestjs/schematics": "^10.0.2",
"@nestjs/cli": "^10.2.1",
"@nestjs/schematics": "^10.0.3",
"@nestjs/testing": "^10.2.7",
"@types/express": "^4.17.20",
"@types/jest": "29.5.6",

View File

@ -17,6 +17,7 @@ import paginationConfig from './config/pagination.config';
import serviceConfig from './config/service.config';
import redisConfig from './config/redis.config';
import { Transport } from '@nestjs/microservices';
import matchConfig from './config/match.config';
@Module({
imports: [
@ -25,6 +26,7 @@ import { Transport } from '@nestjs/microservices';
load: [
brokerConfig,
carpoolConfig,
matchConfig,
paginationConfig,
redisConfig,
serviceConfig,

View File

@ -3,6 +3,7 @@ import { Config } from './config';
export interface CarpoolConfig extends Config {
departureTimeMargin: number;
recurrentAdValidityDuration: number;
role: string;
seatsProposed: number;
seatsRequested: number;
@ -13,6 +14,9 @@ export default registerAs('carpool', () => ({
departureTimeMargin: process.env.DEPARTURE_TIME_MARGIN
? parseInt(process.env.DEPARTURE_TIME_MARGIN, 10)
: 900,
recurrentAdValidityDuration: process.env.RECURRENT_AD_VALIDITY_DURATION
? parseInt(process.env.RECURRENT_AD_VALIDITY_DURATION, 10)
: 365,
role: process.env.ROLE ?? 'passenger',
seatsProposed: process.env.SEATS_PROPOSED
? parseInt(process.env.SEATS_PROPOSED, 10)

View File

@ -0,0 +1,40 @@
import { registerAs } from '@nestjs/config';
import { Config } from './config';
export interface MatchConfig extends Config {
algorithm: string;
remoteness: number;
useProportion: boolean;
proportion: number;
useAzimuth: boolean;
azimuthMargin: number;
maxDetourDistanceRatio: number;
maxDetourDurationRatio: number;
}
export default registerAs('match', () => ({
algorithm: process.env.ALGORITHM ?? 'PASSENGER_ORIENTED',
remoteness: process.env.REMOTENESS
? parseInt(process.env.REMOTENESS, 10)
: 15000,
useProportion: process.env.USE_PROPORTION
? process.env.USE_PROPORTION === 'false'
? false
: true
: true,
proportion: process.env.PROPORTION ? parseFloat(process.env.PROPORTION) : 0.3,
useAzimuth: process.env.USE_AZIMUTH
? process.env.USE_AZIMUTH === 'false'
? false
: true
: true,
azimuthMargin: process.env.AZIMUTH_MARGIN
? parseInt(process.env.AZIMUTH_MARGIN, 10)
: 10,
maxDetourDistanceRatio: process.env.MAX_DETOUR_DISTANCE_RATIO
? parseFloat(process.env.MAX_DETOUR_DISTANCE_RATIO)
: 0.3,
maxDetourDurationRatio: process.env.MAX_DETOUR_DURATION_RATIO
? parseFloat(process.env.MAX_DETOUR_DURATION_RATIO)
: 0.3,
}));

View File

@ -31,7 +31,8 @@ export class SetConfigurationService implements ICommandHandler {
);
if (isNaN(value)) throw new ArgumentInvalidException('Bad value');
return await this.configurationRepository.set(
command.configurationIdentifier,
command.configurationIdentifier.domain,
command.configurationIdentifier.key,
value,
);
}

View File

@ -17,7 +17,8 @@ export class GetConfigurationQueryHandler implements IQueryHandler {
) {}
async execute(query: GetConfigurationQuery): Promise<ConfigurationValue> {
return await this.configurationRepository.get(
query.configurationIdentifier,
query.configurationIdentifier.domain,
query.configurationIdentifier.key,
this.configurationsManager.identifierType(query.configurationIdentifier),
);
}

View File

@ -9,6 +9,7 @@ import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { CarpoolConfig } from '@src/config/carpool.config';
import { Config } from '@src/config/config';
import { MatchConfig } from '@src/config/match.config';
import { PaginationConfig } from '@src/config/pagination.config';
@Injectable()
@ -21,6 +22,10 @@ export class ConfigurationsManagerService {
...(this.configService.get<CarpoolConfig>('carpool') as CarpoolConfig),
domain: ConfigurationDomain.CARPOOL,
},
{
...(this.configService.get<MatchConfig>('match') as MatchConfig),
domain: ConfigurationDomain.MATCH,
},
{
...(this.configService.get<PaginationConfig>(
'pagination',

View File

@ -36,19 +36,15 @@ export class PopulateService implements OnApplicationBootstrap {
try {
if (key !== 'domain')
await this.getConfigurationRepository.get(
{
domain: config.domain,
key,
},
config.domain,
key,
this.configurationsManager.configurationType(configuration[key]),
);
} catch (error: any) {
if (error instanceof NotFoundException) {
this.setConfigurationRepository.set(
{
domain: config.domain,
key,
},
config.domain,
key,
`${configuration[key]}`,
);
}

View File

@ -20,6 +20,17 @@ const mockConfigService = {
seatsRequested: 1,
strictFrequency: false,
};
case 'match':
return {
algorithm: 'PASSENGER_ORIENTED',
remoteness: 15000,
useProportion: true,
proportion: 0.3,
useAzimuth: true,
azimuthMargin: 10,
maxDetourDistanceRatio: 0.3,
maxDetourDurationRatio: 0.3,
};
case 'pagination':
return {
perPage: 10,
@ -53,7 +64,7 @@ describe('Configurations Manager Service', () => {
it('should return the list of configuration elements', () => {
const list: Config[] = configurationsManagerService.list();
expect(list).toHaveLength(2);
expect(list).toHaveLength(3);
});
describe('identifierType', () => {
@ -68,8 +79,8 @@ describe('Configurations Manager Service', () => {
});
it('should throw if configuration item is not found', () => {
const configurationIdentifier: ConfigurationIdentifier = {
domain: ConfigurationDomain.CARPOOL,
key: 'minAge',
domain: ConfigurationDomain.MATCH,
key: 'maxDetour',
};
expect(() => {
configurationsManagerService.identifierType(configurationIdentifier);