@lyxa.ai/core 1.2.30 → 1.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/libraries/index.d.ts +0 -2
- package/dist/libraries/index.js +0 -4
- package/dist/libraries/index.js.map +1 -1
- package/dist/libraries/map/interfaces/IMapService.d.ts +4 -0
- package/dist/libraries/map/interfaces/IMapService.js +6 -0
- package/dist/libraries/map/interfaces/IMapService.js.map +1 -1
- package/dist/libraries/map/mapService.d.ts +18 -7
- package/dist/libraries/map/mapService.js +32 -28
- package/dist/libraries/map/mapService.js.map +1 -1
- package/dist/libraries/map/providers/osrm.d.ts +12 -0
- package/dist/libraries/map/providers/osrm.js +123 -0
- package/dist/libraries/map/providers/osrm.js.map +1 -0
- package/dist/libraries/mongo/models/embedded/{order-extra-time.settings.d.ts → distance-extra-time.settings.d.ts} +1 -1
- package/dist/libraries/mongo/models/embedded/{order-extra-time.settings.js → distance-extra-time.settings.js} +7 -7
- package/dist/libraries/mongo/models/embedded/distance-extra-time.settings.js.map +1 -0
- package/dist/libraries/mongo/models/setting.model.d.ts +2 -2
- package/dist/libraries/mongo/models/setting.model.js +4 -4
- package/dist/libraries/mongo/models/setting.model.js.map +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/types/utilities/validation/common-validation.d.ts +12 -1
- package/dist/types/utilities/validation/common-validation.js +5 -1
- package/dist/types/utilities/validation/common-validation.js.map +1 -1
- package/dist/utilities/group-rider.d.ts +10 -0
- package/dist/utilities/group-rider.js +16 -0
- package/dist/utilities/group-rider.js.map +1 -0
- package/dist/utilities/validation/common-validation.d.ts +12 -1
- package/dist/utilities/validation/common-validation.js +5 -1
- package/dist/utilities/validation/common-validation.js.map +1 -1
- package/package.json +1 -1
- package/dist/libraries/mongo/models/embedded/order-extra-time.settings.js.map +0 -1
- package/dist/libraries/osrm/enums.d.ts +0 -23
- package/dist/libraries/osrm/enums.js +0 -30
- package/dist/libraries/osrm/enums.js.map +0 -1
- package/dist/libraries/osrm/index.d.ts +0 -4
- package/dist/libraries/osrm/index.js +0 -24
- package/dist/libraries/osrm/index.js.map +0 -1
- package/dist/libraries/osrm/osrm-client.d.ts +0 -16
- package/dist/libraries/osrm/osrm-client.js +0 -81
- package/dist/libraries/osrm/osrm-client.js.map +0 -1
- package/dist/libraries/osrm/osrm-service.d.ts +0 -8
- package/dist/libraries/osrm/osrm-service.js +0 -61
- package/dist/libraries/osrm/osrm-service.js.map +0 -1
- package/dist/libraries/osrm/types.d.ts +0 -24
- package/dist/libraries/osrm/types.js +0 -3
- package/dist/libraries/osrm/types.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -5,7 +5,6 @@ exports.bootstrapCore = bootstrapCore;
|
|
|
5
5
|
exports.registerLibraries = registerLibraries;
|
|
6
6
|
exports.getLibraries = getLibraries;
|
|
7
7
|
const soft_delete_plugin_1 = require("./libraries/mongo/plugins/soft-delete-plugin");
|
|
8
|
-
(0, soft_delete_plugin_1.applySoftDeletePlugin)();
|
|
9
8
|
const libraries_1 = require("./libraries");
|
|
10
9
|
const typedi_1 = require("typedi");
|
|
11
10
|
const configuration_1 = require("./libraries/configuration");
|
|
@@ -24,6 +23,8 @@ const fcmService_1 = require("./libraries/firebase/fcmService");
|
|
|
24
23
|
const bull_mq_service_1 = require("./libraries/bullmq/bull-mq-service");
|
|
25
24
|
const cash_settlement_1 = require("./libraries/cash-settlement");
|
|
26
25
|
const socket_1 = require("./libraries/socket");
|
|
26
|
+
const osrm_1 = require("./libraries/map/providers/osrm");
|
|
27
|
+
(0, soft_delete_plugin_1.applySoftDeletePlugin)();
|
|
27
28
|
var EnvironmentConfigurationType_1 = require("./libraries/configuration/types/EnvironmentConfigurationType");
|
|
28
29
|
Object.defineProperty(exports, "EnvironmentConfigurationType", { enumerable: true, get: function () { return EnvironmentConfigurationType_1.EnvironmentConfigurationType; } });
|
|
29
30
|
var mongo_2 = require("./libraries/mongo");
|
|
@@ -77,7 +78,8 @@ async function registerLibraries(options) {
|
|
|
77
78
|
typedi_1.Container.set(twilio_1.TwilioService, twilioServiceInstance);
|
|
78
79
|
const googleMapsKey = await getLibraries().getSecretsService().getKey('GOOGLE_MAPS_API_KEY');
|
|
79
80
|
const googleMapService = new map_1.GoogleMapsService(redisInstance, googleMapsKey);
|
|
80
|
-
const
|
|
81
|
+
const osrmMapService = new osrm_1.OsrmMapService();
|
|
82
|
+
const mapServiceInstance = new map_1.MapService(googleMapService, osrmMapService);
|
|
81
83
|
typedi_1.Container.set(map_1.MapService, mapServiceInstance);
|
|
82
84
|
const bobUsername = await getLibraries().getSecretsService().getKey('BOB_USER_NAME');
|
|
83
85
|
const bobPassword = await getLibraries().getSecretsService().getKey('BOB_PASSWORD');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// Apply the soft delete plugin globally before any connections or models\nimport { applySoftDeletePlugin } from './libraries/mongo/plugins/soft-delete-plugin';\n\napplySoftDeletePlugin();\n\nimport { LibraryManager } from './libraries';\nimport { Container } from 'typedi';\nimport { ConfigurationOptions, ConfigurationService } from './libraries/configuration';\nimport { LyxaLogger } from './libraries/logger';\nimport { RedisService } from './libraries/redis';\nimport { initGlobalConnection, initLyxaMongoDbConnection } from './libraries/mongo';\nimport { SecretManagerService } from './libraries/secrets';\nimport { MicroServiceDispatcher } from './libraries/dispatcher';\nimport { TwilioService } from './libraries/twilio';\nimport { FirebaseService } from './libraries/firebase';\nimport { initEventBus, subscribeToEvent } from './libraries/event';\nimport { SubscriptionRegistry } from './libraries/event/registry/SubscriptionRegistry';\nimport { MapService, GoogleMapsService } from './libraries/map';\nimport { CachedSettingsService } from './libraries/cache/settings';\nimport {\n\tFCMService,\n\tFCMServiceForRider,\n\tFCMServiceForShop,\n\tFCMServiceForUser,\n} from './libraries/firebase/fcmService';\nimport { BullMQService } from './libraries/bullmq/bull-mq-service';\nimport { BOBSecrets, BOBService, CashSettlementService } from './libraries/cash-settlement';\nimport { disconnectAllEntitiesFromInstance } from './libraries/socket';\nimport { createFilterSchema } from './utilities/validation/filter-schema.factory';\nimport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\n\nexport { ConfigurationOptions } from './libraries/configuration';\nexport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nexport { initGlobalConnection } from './libraries/mongo';\n\nexport async function bootstrapCore(options?: ConfigurationOptions) {\n\ttry {\n\t\tawait registerLibraries(options);\n\n\t\tgetLibraries().getLogger().logger.info('Successfully bootstrapped lyxa-core.');\n\n\t\tconst gracefulShutdown = async () => {\n\t\t\tgetLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\n\t\t\tif (options?.instanceType == 'socket') await disconnectAllEntitiesFromInstance();\n\t\t\tprocess.exit();\n\t\t};\n\n\t\tprocess.on('SIGTERM', gracefulShutdown);\n\t\tprocess.on('SIGINT', gracefulShutdown);\n\t\tprocess.on('uncaughtException', err => {\n\t\t\tgetLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\n\t\t\tgracefulShutdown();\n\t\t});\n\t\tprocess.on('exit', code => {\n\t\t\tgetLibraries().getLogger().logger.info(`Exiting with code: ${code}`);\n\t\t});\n\n\t\tconsole.log('Created hooks.');\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n}\n\nexport async function registerLibraries(options?: ConfigurationOptions) {\n\t// Setup configuration.\n\tconst configurationInstance = new ConfigurationService(options);\n\tContainer.set(ConfigurationService, configurationInstance);\n\n\t// Setup redis.\n\tconst redisInstance = new RedisService(configurationInstance.redisURL);\n\tContainer.set(RedisService, redisInstance);\n\n\t// Setup secret\n\tconst secretInstance = new SecretManagerService(configurationInstance, redisInstance);\n\tContainer.set(SecretManagerService, secretInstance);\n\n\t// Setup BullMQ\n\tconst bullMQInstance = new BullMQService(redisInstance);\n\tContainer.set(BullMQService, bullMQInstance);\n\n\tconst mongoUrl = options?.mongoDbUrl\n\t\t? options.mongoDbUrl\n\t\t: await getLibraries().getSecretsService().getKey('MONGO_URL');\n\n\tawait initLyxaMongoDbConnection(mongoUrl!, options);\n\tawait initGlobalConnection(mongoUrl!, options!.environment);\n\n\t// Setup logger\n\tconst loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\n\tContainer.set(LyxaLogger, loggerInstance);\n\n\t// Setup firebase\n\tconst firebaseInstance = new FirebaseService(configurationInstance!);\n\tContainer.set(FirebaseService, firebaseInstance);\n\n\t// Setup microservice dispatcher\n\tconst microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\n\tContainer.set(MicroServiceDispatcher, microserviceDispatcherInstance);\n\n\t// Setup twilio\n\tconst twilioServiceInstance = new TwilioService();\n\tContainer.set(TwilioService, twilioServiceInstance);\n\n\t// Setup map service\n\tconst googleMapsKey = await getLibraries().getSecretsService().getKey('GOOGLE_MAPS_API_KEY');\n\tconst googleMapService = new GoogleMapsService(redisInstance, googleMapsKey as string);\n\tconst mapServiceInstance = new MapService(googleMapService);\n\tContainer.set(MapService, mapServiceInstance);\n\n\t// Setup cash settlement service\n\tconst bobUsername = await getLibraries().getSecretsService().getKey('BOB_USER_NAME');\n\tconst bobPassword = await getLibraries().getSecretsService().getKey('BOB_PASSWORD');\n\tconst bobURL = await getLibraries().getSecretsService().getKey('BOB_URL');\n\n\tconst bobService = new BOBService({\n\t\tBOB_USER_NAME: bobUsername,\n\t\tBOB_PASSWORD: bobPassword,\n\t\tBOB_URL: bobURL,\n\t} as BOBSecrets);\n\tconst cashSettlementServiceInstance = new CashSettlementService(bobService);\n\tContainer.set(CashSettlementService, cashSettlementServiceInstance);\n\tContainer.set(BOBService, bobService);\n\n\tconst settingsServiceInstance = new CachedSettingsService(redisInstance);\n\tContainer.set(CachedSettingsService, settingsServiceInstance);\n\n\t// Setup fcm service\n\tconst firebaseService = getLibraries().getFirebaseService();\n\tconst fcmServiceInstance = new FCMService(firebaseService.superApp);\n\tconst fcmServiceInstanceForUser = new FCMService(firebaseService.userApp);\n\tconst fcmServiceInstanceForRider = new FCMService(firebaseService.riderApp);\n\tconst fcmServiceInstanceForShop = new FCMService(firebaseService.shopApp);\n\tContainer.set(FCMService, fcmServiceInstance);\n\tContainer.set(FCMServiceForUser, fcmServiceInstanceForUser);\n\tContainer.set(FCMServiceForRider, fcmServiceInstanceForRider);\n\tContainer.set(FCMServiceForShop, fcmServiceInstanceForShop);\n\n\tconsole.log('Initialized everything');\n\n\tawait initEventBus('amqps://adlvedna:oY_X4qH1AphtB83YNcf9DHMO3UVmX23s@dog.lmq.cloudamqp.com/adlvedna');\n\tconst allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\n\n\tconst instantiatedServices = new Map<Function, any>();\n\n\tfor (const { eventId, targetConstructor, methodName } of allSubscriptions) {\n\t\tlet instance = instantiatedServices.get(targetConstructor);\n\t\tif (!instance) {\n\t\t\tinstance = Container.get(targetConstructor as any);\n\t\t\tinstantiatedServices.set(targetConstructor, instance);\n\t\t}\n\n\t\tawait subscribeToEvent(eventId, async payload => {\n\t\t\treturn instance[methodName](payload);\n\t\t});\n\t}\n}\n\nexport function getLibraries(): LibraryManager {\n\treturn Container.get(LibraryManager);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["// Apply the soft delete plugin globally before any connections or models\nimport { applySoftDeletePlugin } from './libraries/mongo/plugins/soft-delete-plugin';\nimport { LibraryManager } from './libraries';\nimport { Container } from 'typedi';\nimport { ConfigurationOptions, ConfigurationService } from './libraries/configuration';\nimport { LyxaLogger } from './libraries/logger';\nimport { RedisService } from './libraries/redis';\nimport { initGlobalConnection, initLyxaMongoDbConnection } from './libraries/mongo';\nimport { SecretManagerService } from './libraries/secrets';\nimport { MicroServiceDispatcher } from './libraries/dispatcher';\nimport { TwilioService } from './libraries/twilio';\nimport { FirebaseService } from './libraries/firebase';\nimport { initEventBus, subscribeToEvent } from './libraries/event';\nimport { SubscriptionRegistry } from './libraries/event/registry/SubscriptionRegistry';\nimport { GoogleMapsService, MapService } from './libraries/map';\nimport { CachedSettingsService } from './libraries/cache/settings';\nimport {\n\tFCMService,\n\tFCMServiceForRider,\n\tFCMServiceForShop,\n\tFCMServiceForUser,\n} from './libraries/firebase/fcmService';\nimport { BullMQService } from './libraries/bullmq/bull-mq-service';\nimport { BOBSecrets, BOBService, CashSettlementService } from './libraries/cash-settlement';\nimport { disconnectAllEntitiesFromInstance } from './libraries/socket';\nimport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nimport { OsrmMapService } from './libraries/map/providers/osrm';\n\napplySoftDeletePlugin();\n\nexport { ConfigurationOptions } from './libraries/configuration';\nexport { EnvironmentConfigurationType } from './libraries/configuration/types/EnvironmentConfigurationType';\nexport { initGlobalConnection } from './libraries/mongo';\n\nexport async function bootstrapCore(options?: ConfigurationOptions) {\n\ttry {\n\t\tawait registerLibraries(options);\n\n\t\tgetLibraries().getLogger().logger.info('Successfully bootstrapped lyxa-core.');\n\n\t\tconst gracefulShutdown = async () => {\n\t\t\tgetLibraries().getLogger().logger.info('Received shutdown signal, shutting down gracefully...');\n\t\t\tif (options?.instanceType == 'socket') await disconnectAllEntitiesFromInstance();\n\t\t\tprocess.exit();\n\t\t};\n\n\t\tprocess.on('SIGTERM', gracefulShutdown);\n\t\tprocess.on('SIGINT', gracefulShutdown);\n\t\tprocess.on('uncaughtException', err => {\n\t\t\tgetLibraries().getLogger().logger.error('Uncaught exception, shutting down...', err);\n\t\t\tgracefulShutdown();\n\t\t});\n\t\tprocess.on('exit', code => {\n\t\t\tgetLibraries().getLogger().logger.info(`Exiting with code: ${code}`);\n\t\t});\n\n\t\tconsole.log('Created hooks.');\n\t} catch (e) {\n\t\tconsole.error(e);\n\t}\n}\n\nexport async function registerLibraries(options?: ConfigurationOptions) {\n\t// Setup configuration.\n\tconst configurationInstance = new ConfigurationService(options);\n\tContainer.set(ConfigurationService, configurationInstance);\n\n\t// Setup redis.\n\tconst redisInstance = new RedisService(configurationInstance.redisURL);\n\tContainer.set(RedisService, redisInstance);\n\n\t// Setup secret\n\tconst secretInstance = new SecretManagerService(configurationInstance, redisInstance);\n\tContainer.set(SecretManagerService, secretInstance);\n\n\t// Setup BullMQ\n\tconst bullMQInstance = new BullMQService(redisInstance);\n\tContainer.set(BullMQService, bullMQInstance);\n\n\tconst mongoUrl = options?.mongoDbUrl\n\t\t? options.mongoDbUrl\n\t\t: await getLibraries().getSecretsService().getKey('MONGO_URL');\n\n\tawait initLyxaMongoDbConnection(mongoUrl!, options);\n\tawait initGlobalConnection(mongoUrl!, options!.environment);\n\n\t// Setup logger\n\tconst loggerInstance = new LyxaLogger(options!.instanceType!, mongoUrl!);\n\tContainer.set(LyxaLogger, loggerInstance);\n\n\t// Setup firebase\n\tconst firebaseInstance = new FirebaseService(configurationInstance!);\n\tContainer.set(FirebaseService, firebaseInstance);\n\n\t// Setup microservice dispatcher\n\tconst microserviceDispatcherInstance = new MicroServiceDispatcher(secretInstance);\n\tContainer.set(MicroServiceDispatcher, microserviceDispatcherInstance);\n\n\t// Setup twilio\n\tconst twilioServiceInstance = new TwilioService();\n\tContainer.set(TwilioService, twilioServiceInstance);\n\n\t// Setup map service\n\tconst googleMapsKey = await getLibraries().getSecretsService().getKey('GOOGLE_MAPS_API_KEY');\n\tconst googleMapService = new GoogleMapsService(redisInstance, googleMapsKey as string);\n\tconst osrmMapService = new OsrmMapService();\n\tconst mapServiceInstance = new MapService(googleMapService, osrmMapService);\n\tContainer.set(MapService, mapServiceInstance);\n\n\t// Setup cash settlement service\n\tconst bobUsername = await getLibraries().getSecretsService().getKey('BOB_USER_NAME');\n\tconst bobPassword = await getLibraries().getSecretsService().getKey('BOB_PASSWORD');\n\tconst bobURL = await getLibraries().getSecretsService().getKey('BOB_URL');\n\n\tconst bobService = new BOBService({\n\t\tBOB_USER_NAME: bobUsername,\n\t\tBOB_PASSWORD: bobPassword,\n\t\tBOB_URL: bobURL,\n\t} as BOBSecrets);\n\tconst cashSettlementServiceInstance = new CashSettlementService(bobService);\n\tContainer.set(CashSettlementService, cashSettlementServiceInstance);\n\tContainer.set(BOBService, bobService);\n\n\tconst settingsServiceInstance = new CachedSettingsService(redisInstance);\n\tContainer.set(CachedSettingsService, settingsServiceInstance);\n\n\t// Setup fcm service\n\tconst firebaseService = getLibraries().getFirebaseService();\n\tconst fcmServiceInstance = new FCMService(firebaseService.superApp);\n\tconst fcmServiceInstanceForUser = new FCMService(firebaseService.userApp);\n\tconst fcmServiceInstanceForRider = new FCMService(firebaseService.riderApp);\n\tconst fcmServiceInstanceForShop = new FCMService(firebaseService.shopApp);\n\tContainer.set(FCMService, fcmServiceInstance);\n\tContainer.set(FCMServiceForUser, fcmServiceInstanceForUser);\n\tContainer.set(FCMServiceForRider, fcmServiceInstanceForRider);\n\tContainer.set(FCMServiceForShop, fcmServiceInstanceForShop);\n\n\tconsole.log('Initialized everything');\n\n\tawait initEventBus('amqps://adlvedna:oY_X4qH1AphtB83YNcf9DHMO3UVmX23s@dog.lmq.cloudamqp.com/adlvedna');\n\tconst allSubscriptions = SubscriptionRegistry.getAllSubscriptions();\n\n\tconst instantiatedServices = new Map<Function, any>();\n\n\tfor (const { eventId, targetConstructor, methodName } of allSubscriptions) {\n\t\tlet instance = instantiatedServices.get(targetConstructor);\n\t\tif (!instance) {\n\t\t\tinstance = Container.get(targetConstructor as any);\n\t\t\tinstantiatedServices.set(targetConstructor, instance);\n\t\t}\n\n\t\tawait subscribeToEvent(eventId, async payload => {\n\t\t\treturn instance[methodName](payload);\n\t\t});\n\t}\n}\n\nexport function getLibraries(): LibraryManager {\n\treturn Container.get(LibraryManager);\n}\n"]}
|
|
@@ -12,7 +12,6 @@ import { CachedSettingsService } from './cache/settings';
|
|
|
12
12
|
import { FCMService } from './firebase/fcmService';
|
|
13
13
|
import { BullMQService } from './bullmq/bull-mq-service';
|
|
14
14
|
import { BOBService, CashSettlementService } from './cash-settlement';
|
|
15
|
-
import { OSRMService } from './osrm';
|
|
16
15
|
export declare class LibraryManager {
|
|
17
16
|
getLogger(): LyxaLogger;
|
|
18
17
|
getMicroServiceDispatcher(): MicroServiceDispatcher;
|
|
@@ -33,5 +32,4 @@ export declare class LibraryManager {
|
|
|
33
32
|
getBullMQService(): BullMQService;
|
|
34
33
|
getCashSettlementService(): CashSettlementService;
|
|
35
34
|
getBOBService(): BOBService;
|
|
36
|
-
getOSRMService(): OSRMService;
|
|
37
35
|
}
|
package/dist/libraries/index.js
CHANGED
|
@@ -22,7 +22,6 @@ const settings_1 = require("./cache/settings");
|
|
|
22
22
|
const fcmService_1 = require("./firebase/fcmService");
|
|
23
23
|
const bull_mq_service_1 = require("./bullmq/bull-mq-service");
|
|
24
24
|
const cash_settlement_1 = require("./cash-settlement");
|
|
25
|
-
const osrm_1 = require("./osrm");
|
|
26
25
|
let LibraryManager = class LibraryManager {
|
|
27
26
|
getLogger() {
|
|
28
27
|
return typedi_1.Container.get(logger_1.LyxaLogger);
|
|
@@ -81,9 +80,6 @@ let LibraryManager = class LibraryManager {
|
|
|
81
80
|
getBOBService() {
|
|
82
81
|
return typedi_1.Container.get(cash_settlement_1.BOBService);
|
|
83
82
|
}
|
|
84
|
-
getOSRMService() {
|
|
85
|
-
return typedi_1.Container.get(osrm_1.OSRMService);
|
|
86
|
-
}
|
|
87
83
|
};
|
|
88
84
|
exports.LibraryManager = LibraryManager;
|
|
89
85
|
exports.LibraryManager = LibraryManager = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mCAA4C;AAC5C,qCAAyC;AACzC,qCAAsC;AACtC,6CAAsD;AACtD,uCAAiD;AACjD,mCAAuC;AACvC,mDAAuD;AACvD,qCAAyC;AACzC,yCAA6C;AAC7C,kDAAoD;AACpD,+BAAmC;AACnC,+CAAyD;AACzD,sDAA6G;AAC7G,8DAAyD;AACzD,uDAAsE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mCAA4C;AAC5C,qCAAyC;AACzC,qCAAsC;AACtC,6CAAsD;AACtD,uCAAiD;AACjD,mCAAuC;AACvC,mDAAuD;AACvD,qCAAyC;AACzC,yCAA6C;AAC7C,kDAAoD;AACpD,+BAAmC;AACnC,+CAAyD;AACzD,sDAA6G;AAC7G,8DAAyD;AACzD,uDAAsE;AAG/D,IAAM,cAAc,GAApB,MAAM,cAAc;IACnB,SAAS;QACf,OAAO,kBAAS,CAAC,GAAG,CAAC,mBAAU,CAAC,CAAC;IAClC,CAAC;IACM,yBAAyB;QAC/B,OAAO,kBAAS,CAAC,GAAG,CAAC,mCAAsB,CAAC,CAAC;IAC9C,CAAC;IACM,gBAAgB;QACtB,OAAO,kBAAS,CAAC,GAAG,CAAC,sBAAa,CAAC,CAAC;IACrC,CAAC;IACM,iBAAiB;QACvB,OAAO,kBAAS,CAAC,GAAG,CAAC,8BAAoB,CAAC,CAAC;IAC5C,CAAC;IACM,eAAe;QACrB,OAAO,kBAAS,CAAC,GAAG,CAAC,oBAAY,CAAC,CAAC;IACpC,CAAC;IACM,uBAAuB;QAC7B,OAAO,kBAAS,CAAC,GAAG,CAAC,oCAAoB,CAAC,CAAC;IAC5C,CAAC;IACM,kBAAkB;QACxB,OAAO,kBAAS,CAAC,GAAG,CAAC,0BAAe,CAAC,CAAC;IACvC,CAAC;IACM,sBAAsB;QAC5B,OAAO,kBAAS,CAAC,GAAG,CAAC,4BAAe,CAAC,CAAC;IACvC,CAAC;IACM,sBAAsB;QAC5B,OAAO,IAAI,sBAAa,EAAE,CAAC;IAC5B,CAAC;IACM,qBAAqB;QAC3B,OAAO,IAAI,sBAAa,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IACM,aAAa;QACnB,OAAO,kBAAS,CAAC,GAAG,CAAC,gBAAU,CAAC,CAAC;IAClC,CAAC;IACM,wBAAwB;QAC9B,OAAO,kBAAS,CAAC,GAAG,CAAC,gCAAqB,CAAC,CAAC;IAC7C,CAAC;IACM,aAAa;QACnB,OAAO,kBAAS,CAAC,GAAG,CAAC,uBAAU,CAAC,CAAC;IAClC,CAAC;IACM,oBAAoB;QAC1B,OAAO,kBAAS,CAAC,GAAG,CAAC,8BAAiB,CAAC,CAAC;IACzC,CAAC;IACM,qBAAqB;QAC3B,OAAO,kBAAS,CAAC,GAAG,CAAC,+BAAkB,CAAC,CAAC;IAC1C,CAAC;IACM,oBAAoB;QAC1B,OAAO,kBAAS,CAAC,GAAG,CAAC,8BAAiB,CAAC,CAAC;IACzC,CAAC;IACM,gBAAgB;QACtB,OAAO,kBAAS,CAAC,GAAG,CAAC,+BAAa,CAAC,CAAC;IACrC,CAAC;IACM,wBAAwB;QAC9B,OAAO,kBAAS,CAAC,GAAG,CAAC,uCAAqB,CAAC,CAAC;IAC7C,CAAC;IACM,aAAa;QACnB,OAAO,kBAAS,CAAC,GAAG,CAAC,4BAAU,CAAC,CAAC;IAClC,CAAC;CACD,CAAA;AA1DY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,gBAAO,GAAE;GACG,cAAc,CA0D1B","sourcesContent":["import { Container, Service } from 'typedi';\nimport { TwilioService } from './twilio';\nimport { LyxaLogger } from './logger';\nimport { MicroServiceDispatcher } from './dispatcher';\nimport { SecretManagerService } from './secrets';\nimport { RedisService } from './redis';\nimport { ConfigurationService } from './configuration';\nimport { UploadService } from './upload';\nimport { FirebaseService } from './firebase';\nimport { TokenRepository } from './auth/repository';\nimport { MapService } from './map';\nimport { CachedSettingsService } from './cache/settings';\nimport { FCMService, FCMServiceForRider, FCMServiceForShop, FCMServiceForUser } from './firebase/fcmService';\nimport { BullMQService } from './bullmq/bull-mq-service';\nimport { BOBService, CashSettlementService } from './cash-settlement';\n\n@Service()\nexport class LibraryManager {\n\tpublic getLogger(): LyxaLogger {\n\t\treturn Container.get(LyxaLogger);\n\t}\n\tpublic getMicroServiceDispatcher(): MicroServiceDispatcher {\n\t\treturn Container.get(MicroServiceDispatcher);\n\t}\n\tpublic getTwilioService(): TwilioService {\n\t\treturn Container.get(TwilioService);\n\t}\n\tpublic getSecretsService(): SecretManagerService {\n\t\treturn Container.get(SecretManagerService);\n\t}\n\tpublic getRedisService(): RedisService {\n\t\treturn Container.get(RedisService);\n\t}\n\tpublic getConfigurationService(): ConfigurationService {\n\t\treturn Container.get(ConfigurationService);\n\t}\n\tpublic getFirebaseService(): FirebaseService {\n\t\treturn Container.get(FirebaseService);\n\t}\n\tpublic getAuthTokenRepository(): TokenRepository {\n\t\treturn Container.get(TokenRepository);\n\t}\n\tpublic getGlobalUploadService(): UploadService {\n\t\treturn new UploadService();\n\t}\n\tpublic getTenetUploadService(): UploadService {\n\t\treturn new UploadService('lyxa-' + this.getConfigurationService().options.tenet);\n\t}\n\tpublic getMapService(): MapService {\n\t\treturn Container.get(MapService);\n\t}\n\tpublic getCachedSettingsService(): CachedSettingsService {\n\t\treturn Container.get(CachedSettingsService);\n\t}\n\tpublic getFCMService(): FCMService {\n\t\treturn Container.get(FCMService);\n\t}\n\tpublic getFCMServiceForUser(): FCMService {\n\t\treturn Container.get(FCMServiceForUser);\n\t}\n\tpublic getFCMServiceForRider(): FCMService {\n\t\treturn Container.get(FCMServiceForRider);\n\t}\n\tpublic getFCMServiceForShop(): FCMService {\n\t\treturn Container.get(FCMServiceForShop);\n\t}\n\tpublic getBullMQService(): BullMQService {\n\t\treturn Container.get(BullMQService);\n\t}\n\tpublic getCashSettlementService(): CashSettlementService {\n\t\treturn Container.get(CashSettlementService);\n\t}\n\tpublic getBOBService(): BOBService {\n\t\treturn Container.get(BOBService);\n\t}\n}\n"]}
|
|
@@ -37,3 +37,7 @@ export interface IMapService {
|
|
|
37
37
|
getWaypointsDistanceInfo(origin: ICoordinate, destination: ICoordinate, waypoints: Array<ICoordinate>): Promise<IWaypointDistanceInfo>;
|
|
38
38
|
getDistanceMatrix(origins: Array<ICoordinate>, destinations: Array<ICoordinate>): Promise<IRouteMatrixDTO[]>;
|
|
39
39
|
}
|
|
40
|
+
export declare enum MapProvider {
|
|
41
|
+
GOOGLE = "google",
|
|
42
|
+
OSRM = "osrm"
|
|
43
|
+
}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MapProvider = void 0;
|
|
4
|
+
var MapProvider;
|
|
5
|
+
(function (MapProvider) {
|
|
6
|
+
MapProvider["GOOGLE"] = "google";
|
|
7
|
+
MapProvider["OSRM"] = "osrm";
|
|
8
|
+
})(MapProvider || (exports.MapProvider = MapProvider = {}));
|
|
3
9
|
//# sourceMappingURL=IMapService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMapService.js","sourceRoot":"/","sources":["libraries/map/interfaces/IMapService.ts"],"names":[],"mappings":"","sourcesContent":["export interface ICoordinate {\n\tlongitude: number;\n\tlatitude: number;\n}\n\nexport interface IDistance {\n\tvalue: number;\n\ttext: string;\n}\n\nexport interface IDuration {\n\tvalue: number;\n\ttext: string;\n}\n\nexport interface ILeg {\n\tdistance: IDistance;\n\tduration: IDuration;\n\toverviewPolyline: Array<[number, number]>;\n}\n\nexport interface IDistanceInfo {\n\tdistance: IDistance;\n\tduration: IDuration;\n}\n\nexport interface IWaypointDistanceInfo {\n\tdistance: IDistance;\n\tduration: IDuration;\n\tlegs: Array<ILeg>;\n\toverviewPolyline: Array<[number, number]>;\n}\n\nexport interface IRouteMatrixDTO {\n\tdistance: IDistance;\n\tduration: IDuration;\n\tcondition: string;\n\toriginIndex: number;\n\tdestinationIndex: number;\n}\n\nexport interface IMapService {\n\tgetDistanceInfo(origin: ICoordinate, destination: ICoordinate): Promise<IDistanceInfo>;\n\n\tgetWaypointsDistanceInfo(\n\t\torigin: ICoordinate,\n\t\tdestination: ICoordinate,\n\t\twaypoints: Array<ICoordinate>\n\t): Promise<IWaypointDistanceInfo>;\n\n\tgetDistanceMatrix(
|
|
1
|
+
{"version":3,"file":"IMapService.js","sourceRoot":"/","sources":["libraries/map/interfaces/IMapService.ts"],"names":[],"mappings":";;;AAwDA,IAAY,WAGX;AAHD,WAAY,WAAW;IACtB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;AACd,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB","sourcesContent":["export interface ICoordinate {\n\tlongitude: number;\n\tlatitude: number;\n}\n\nexport interface IDistance {\n\tvalue: number;\n\ttext: string;\n}\n\nexport interface IDuration {\n\tvalue: number;\n\ttext: string;\n}\n\nexport interface ILeg {\n\tdistance: IDistance;\n\tduration: IDuration;\n\toverviewPolyline: Array<[number, number]>;\n}\n\nexport interface IDistanceInfo {\n\tdistance: IDistance;\n\tduration: IDuration;\n}\n\nexport interface IWaypointDistanceInfo {\n\tdistance: IDistance;\n\tduration: IDuration;\n\tlegs: Array<ILeg>;\n\toverviewPolyline: Array<[number, number]>;\n}\n\nexport interface IRouteMatrixDTO {\n\tdistance: IDistance;\n\tduration: IDuration;\n\tcondition: string;\n\toriginIndex: number;\n\tdestinationIndex: number;\n}\n\nexport interface IMapService {\n\tgetDistanceInfo(origin: ICoordinate, destination: ICoordinate): Promise<IDistanceInfo>;\n\n\tgetWaypointsDistanceInfo(\n\t\torigin: ICoordinate,\n\t\tdestination: ICoordinate,\n\t\twaypoints: Array<ICoordinate>\n\t): Promise<IWaypointDistanceInfo>;\n\n\tgetDistanceMatrix(\n\t\torigins: Array<ICoordinate>,\n\t\tdestinations: Array<ICoordinate>\n\t): Promise<IRouteMatrixDTO[]>;\n}\n\nexport enum MapProvider {\n\tGOOGLE = 'google',\n\tOSRM = 'osrm',\n}\n"]}
|
|
@@ -1,10 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GoogleMapsService } from './providers/google-maps';
|
|
2
|
+
import { OsrmMapService } from './providers/osrm';
|
|
3
|
+
import { ICoordinate, IDistanceInfo, IWaypointDistanceInfo, IRouteMatrixDTO } from './interfaces/IMapService';
|
|
4
|
+
export declare enum MapProvider {
|
|
5
|
+
GOOGLE = "google",
|
|
6
|
+
OSRM = "osrm"
|
|
7
|
+
}
|
|
8
|
+
export interface MapOptions {
|
|
9
|
+
provider: MapProvider;
|
|
10
|
+
}
|
|
2
11
|
export declare class MapService {
|
|
3
|
-
private
|
|
4
|
-
|
|
12
|
+
private google;
|
|
13
|
+
private osrm;
|
|
14
|
+
constructor(google: GoogleMapsService, osrm: OsrmMapService);
|
|
5
15
|
calculateHaversineDistance(coord1: [number, number], coord2: [number, number]): number;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
16
|
+
private getProvider;
|
|
17
|
+
calculateDistanceBetweenCoordinates(coord1: [number, number], coord2: [number, number], options?: MapOptions): Promise<number>;
|
|
18
|
+
getDistanceInfo(origin: ICoordinate, destination: ICoordinate, options?: MapOptions): Promise<IDistanceInfo>;
|
|
19
|
+
getWaypointsDistanceInfo(origin: ICoordinate, destination: ICoordinate, waypoints: Array<ICoordinate>, options?: MapOptions): Promise<IWaypointDistanceInfo>;
|
|
20
|
+
getDistanceMatrix(origins: Array<ICoordinate>, destinations: Array<ICoordinate>, options?: MapOptions): Promise<IRouteMatrixDTO[]>;
|
|
10
21
|
}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.MapService = void 0;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
3
|
+
exports.MapService = exports.MapProvider = void 0;
|
|
4
|
+
var MapProvider;
|
|
5
|
+
(function (MapProvider) {
|
|
6
|
+
MapProvider["GOOGLE"] = "google";
|
|
7
|
+
MapProvider["OSRM"] = "osrm";
|
|
8
|
+
})(MapProvider || (exports.MapProvider = MapProvider = {}));
|
|
9
|
+
class MapService {
|
|
10
|
+
google;
|
|
11
|
+
osrm;
|
|
12
|
+
constructor(google, osrm) {
|
|
13
|
+
this.google = google;
|
|
14
|
+
this.osrm = osrm;
|
|
18
15
|
}
|
|
19
16
|
calculateHaversineDistance(coord1, coord2) {
|
|
20
17
|
const [lat1, lon1] = coord1;
|
|
@@ -30,11 +27,22 @@ let MapService = class MapService {
|
|
|
30
27
|
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
31
28
|
return R * c;
|
|
32
29
|
}
|
|
33
|
-
|
|
30
|
+
getProvider(options) {
|
|
31
|
+
const provider = options?.provider ?? MapProvider.OSRM;
|
|
32
|
+
switch (provider) {
|
|
33
|
+
case MapProvider.GOOGLE:
|
|
34
|
+
return this.google;
|
|
35
|
+
case MapProvider.OSRM:
|
|
36
|
+
return this.osrm;
|
|
37
|
+
default:
|
|
38
|
+
throw new Error('Unknown map provider');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async calculateDistanceBetweenCoordinates(coord1, coord2, options) {
|
|
34
42
|
const [lat1, lon1] = coord1;
|
|
35
43
|
const [lat2, lon2] = coord2;
|
|
36
44
|
try {
|
|
37
|
-
const distanceInfo = await this.
|
|
45
|
+
const distanceInfo = await this.getProvider(options).getDistanceInfo({ latitude: lat1, longitude: lon1 }, { latitude: lat2, longitude: lon2 });
|
|
38
46
|
if (distanceInfo && distanceInfo.distance) {
|
|
39
47
|
return distanceInfo.distance.value / 1000;
|
|
40
48
|
}
|
|
@@ -45,19 +53,15 @@ let MapService = class MapService {
|
|
|
45
53
|
console.log('Maps API failed. Falling back to Haversine calculation.');
|
|
46
54
|
return this.calculateHaversineDistance(coord1, coord2);
|
|
47
55
|
}
|
|
48
|
-
async getDistanceInfo(origin, destination) {
|
|
49
|
-
return await this.
|
|
56
|
+
async getDistanceInfo(origin, destination, options) {
|
|
57
|
+
return await this.getProvider(options).getDistanceInfo(origin, destination);
|
|
50
58
|
}
|
|
51
|
-
async getWaypointsDistanceInfo(origin, destination, waypoints) {
|
|
52
|
-
return await this.
|
|
59
|
+
async getWaypointsDistanceInfo(origin, destination, waypoints, options) {
|
|
60
|
+
return await this.getProvider(options).getWaypointsDistanceInfo(origin, destination, waypoints);
|
|
53
61
|
}
|
|
54
|
-
async getDistanceMatrix(origins, destinations) {
|
|
55
|
-
return await this.
|
|
62
|
+
async getDistanceMatrix(origins, destinations, options) {
|
|
63
|
+
return await this.getProvider(options).getDistanceMatrix(origins, destinations);
|
|
56
64
|
}
|
|
57
|
-
}
|
|
65
|
+
}
|
|
58
66
|
exports.MapService = MapService;
|
|
59
|
-
exports.MapService = MapService = __decorate([
|
|
60
|
-
(0, typedi_1.Service)(),
|
|
61
|
-
__metadata("design:paramtypes", [Object])
|
|
62
|
-
], MapService);
|
|
63
67
|
//# sourceMappingURL=mapService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapService.js","sourceRoot":"/","sources":["libraries/map/mapService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapService.js","sourceRoot":"/","sources":["libraries/map/mapService.ts"],"names":[],"mappings":";;;AAUA,IAAY,WAGX;AAHD,WAAY,WAAW;IACtB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;AACd,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAOD,MAAa,UAAU;IACd,MAAM,CAAoB;IAC1B,IAAI,CAAiB;IAE7B,YAAY,MAAyB,EAAE,IAAoB;QAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAEM,0BAA0B,CAAC,MAAwB,EAAE,MAAwB;QACnF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QAC7C,MAAM,CAAC,GACN,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IACO,WAAW,CAAC,OAAoB;QAEvC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC;QAEvD,QAAQ,QAAQ,EAAE,CAAC;YAClB,KAAK,WAAW,CAAC,MAAM;gBACtB,OAAO,IAAI,CAAC,MAAM,CAAC;YACpB,KAAK,WAAW,CAAC,IAAI;gBACpB,OAAO,IAAI,CAAC,IAAI,CAAC;YAClB;gBACC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,mCAAmC,CAC/C,MAAwB,EACxB,MAAwB,EACxB,OAAoB;QAEpB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,eAAe,CACnE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EACnC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CACnC,CAAC;YACF,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAC3C,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;YAC3C,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,eAAe,CACpB,MAAmB,EACnB,WAAwB,EACxB,OAAoB;QAEpB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC7B,MAAmB,EACnB,WAAwB,EACxB,SAA6B,EAC7B,OAAoB;QAEpB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,iBAAiB,CACtB,OAA2B,EAC3B,YAAgC,EAChC,OAAoB;QAEpB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjF,CAAC;CACD;AApFD,gCAoFC","sourcesContent":["import { GoogleMapsService } from './providers/google-maps';\nimport { OsrmMapService } from './providers/osrm';\nimport {\n\tIMapService,\n\tICoordinate,\n\tIDistanceInfo,\n\tIWaypointDistanceInfo,\n\tIRouteMatrixDTO,\n} from './interfaces/IMapService';\n\nexport enum MapProvider {\n\tGOOGLE = 'google',\n\tOSRM = 'osrm',\n}\n\nexport interface MapOptions {\n\tprovider: MapProvider;\n\t// Add other options if needed\n}\n\nexport class MapService {\n\tprivate google: GoogleMapsService;\n\tprivate osrm: OsrmMapService;\n\n\tconstructor(google: GoogleMapsService, osrm: OsrmMapService) {\n\t\tthis.google = google;\n\t\tthis.osrm = osrm;\n\t}\n\n\tpublic calculateHaversineDistance(coord1: [number, number], coord2: [number, number]): number {\n\t\tconst [lat1, lon1] = coord1;\n\t\tconst [lat2, lon2] = coord2;\n\t\tconst R = 6371;\n\t\tconst dLat = ((lat2 - lat1) * Math.PI) / 180;\n\t\tconst dLon = ((lon2 - lon1) * Math.PI) / 180;\n\t\tconst a =\n\t\t\tMath.sin(dLat / 2) * Math.sin(dLat / 2) +\n\t\t\tMath.cos((lat1 * Math.PI) / 180) *\n\t\t\t\tMath.cos((lat2 * Math.PI) / 180) *\n\t\t\t\tMath.sin(dLon / 2) *\n\t\t\t\tMath.sin(dLon / 2);\n\t\tconst c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn R * c;\n\t}\n\tprivate getProvider(options?: MapOptions): IMapService {\n\t\t// Default to OSRM if options not provided\n\t\tconst provider = options?.provider ?? MapProvider.OSRM;\n\n\t\tswitch (provider) {\n\t\t\tcase MapProvider.GOOGLE:\n\t\t\t\treturn this.google;\n\t\t\tcase MapProvider.OSRM:\n\t\t\t\treturn this.osrm;\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown map provider');\n\t\t}\n\t}\n\n\tpublic async calculateDistanceBetweenCoordinates(\n\t\tcoord1: [number, number],\n\t\tcoord2: [number, number],\n\t\toptions?: MapOptions // optional\n\t): Promise<number> {\n\t\tconst [lat1, lon1] = coord1;\n\t\tconst [lat2, lon2] = coord2;\n\t\ttry {\n\t\t\tconst distanceInfo = await this.getProvider(options).getDistanceInfo(\n\t\t\t\t{ latitude: lat1, longitude: lon1 },\n\t\t\t\t{ latitude: lat2, longitude: lon2 }\n\t\t\t);\n\t\t\tif (distanceInfo && distanceInfo.distance) {\n\t\t\t\treturn distanceInfo.distance.value / 1000;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(`Error fetching distance info: ${error}`);\n\t\t}\n\t\tconsole.log('Maps API failed. Falling back to Haversine calculation.');\n\t\treturn this.calculateHaversineDistance(coord1, coord2);\n\t}\n\n\tasync getDistanceInfo(\n\t\torigin: ICoordinate,\n\t\tdestination: ICoordinate,\n\t\toptions?: MapOptions\n\t): Promise<IDistanceInfo> {\n\t\treturn await this.getProvider(options).getDistanceInfo(origin, destination);\n\t}\n\n\tasync getWaypointsDistanceInfo(\n\t\torigin: ICoordinate,\n\t\tdestination: ICoordinate,\n\t\twaypoints: Array<ICoordinate>,\n\t\toptions?: MapOptions\n\t): Promise<IWaypointDistanceInfo> {\n\t\treturn await this.getProvider(options).getWaypointsDistanceInfo(origin, destination, waypoints);\n\t}\n\n\tasync getDistanceMatrix(\n\t\torigins: Array<ICoordinate>,\n\t\tdestinations: Array<ICoordinate>,\n\t\toptions?: MapOptions\n\t): Promise<IRouteMatrixDTO[]> {\n\t\treturn await this.getProvider(options).getDistanceMatrix(origins, destinations);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ICoordinate, IDistanceInfo, IMapService, IRouteMatrixDTO, IWaypointDistanceInfo } from '../interfaces/IMapService';
|
|
2
|
+
export declare class OsrmMapService implements IMapService {
|
|
3
|
+
private zoneModel;
|
|
4
|
+
private readonly DEFAULT_EXTRA_TIME;
|
|
5
|
+
private readonly _url;
|
|
6
|
+
constructor();
|
|
7
|
+
getDistanceInfo(origin: ICoordinate, destination: ICoordinate): Promise<IDistanceInfo>;
|
|
8
|
+
getDistanceMatrix(origins: ICoordinate[], destinations: ICoordinate[]): Promise<IRouteMatrixDTO[]>;
|
|
9
|
+
getWaypointsDistanceInfo(origin: ICoordinate, destination: ICoordinate, waypoints: ICoordinate[]): Promise<IWaypointDistanceInfo>;
|
|
10
|
+
private getExtraTimeForZones;
|
|
11
|
+
private findZonesByPoints;
|
|
12
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OsrmMapService = void 0;
|
|
7
|
+
const index_1 = require("../../../index");
|
|
8
|
+
const models_1 = require("../../mongo/models");
|
|
9
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
10
|
+
class OsrmMapService {
|
|
11
|
+
zoneModel;
|
|
12
|
+
DEFAULT_EXTRA_TIME = 10;
|
|
13
|
+
_url = 'https://api-v2-development.lyxa.ai/distance';
|
|
14
|
+
constructor() {
|
|
15
|
+
this.zoneModel = models_1.ZoneModel;
|
|
16
|
+
}
|
|
17
|
+
async getDistanceInfo(origin, destination) {
|
|
18
|
+
const profile = 'driving';
|
|
19
|
+
const originStr = `${origin.longitude},${origin.latitude}`;
|
|
20
|
+
const destinationStr = `${destination.longitude},${destination.latitude}`;
|
|
21
|
+
const url = `${this._url}/route/v1/${profile}/${originStr};${destinationStr}?overview=false`;
|
|
22
|
+
const resp = await fetch(url);
|
|
23
|
+
if (!resp.ok)
|
|
24
|
+
throw new Error(`OSRM request failed with status ${resp.status}`);
|
|
25
|
+
const data = await resp.json();
|
|
26
|
+
if (data.code !== 'Ok' || !data.routes || !data.routes.length) {
|
|
27
|
+
throw new Error('OSRM route request failed');
|
|
28
|
+
}
|
|
29
|
+
const route = data.routes[0];
|
|
30
|
+
return {
|
|
31
|
+
distance: { value: route.distance, text: `${(route.distance / 1000).toFixed(2)} km` },
|
|
32
|
+
duration: { value: route.duration, text: `${Math.ceil(route.duration / 60)} mins` },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async getDistanceMatrix(origins, destinations) {
|
|
36
|
+
const allCoords = [...origins, ...destinations];
|
|
37
|
+
const coordString = allCoords.map(({ longitude, latitude }) => `${longitude},${latitude}`).join(';');
|
|
38
|
+
const originIndices = origins.map((_, idx) => idx).join(';');
|
|
39
|
+
const destIndices = destinations.map((_, idx) => origins.length + idx).join(';');
|
|
40
|
+
const url = `${this._url}/table/v1/bike/${coordString}?sources=${originIndices}&destinations=${destIndices}&annotations=distance,duration`;
|
|
41
|
+
const resp = await fetch(url);
|
|
42
|
+
if (!resp.ok)
|
|
43
|
+
throw new Error(`OSRM table request failed with status ${resp.status}`);
|
|
44
|
+
const data = await resp.json();
|
|
45
|
+
if (data.code !== 'Ok' || !data.durations)
|
|
46
|
+
throw new Error('OSRM table request failed');
|
|
47
|
+
const durations = data.durations;
|
|
48
|
+
const distances = data.distances;
|
|
49
|
+
const zones = await this.findZonesByPoints(destinations);
|
|
50
|
+
const extraTimes = await this.getExtraTimeForZones(zones);
|
|
51
|
+
const result = [];
|
|
52
|
+
origins.forEach((_, i) => {
|
|
53
|
+
destinations.forEach((_, j) => {
|
|
54
|
+
const dur = durations[i][j] + (extraTimes[j] || this.DEFAULT_EXTRA_TIME);
|
|
55
|
+
const dist = distances.length ? distances[i][j] : 0;
|
|
56
|
+
result.push({
|
|
57
|
+
distance: { value: dist, text: distances.length ? `${(dist / 1000).toFixed(2)} km` : 'N/A' },
|
|
58
|
+
duration: { value: dur, text: `${Math.ceil(dur / 60)} mins` },
|
|
59
|
+
condition: 'OK',
|
|
60
|
+
originIndex: i,
|
|
61
|
+
destinationIndex: j,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
async getWaypointsDistanceInfo(origin, destination, waypoints) {
|
|
68
|
+
const profile = 'driving';
|
|
69
|
+
const coordsArr = [origin, ...waypoints, destination];
|
|
70
|
+
const coordsStr = coordsArr.map(({ longitude, latitude }) => `${longitude},${latitude}`).join(';');
|
|
71
|
+
const url = `${this._url}/route/v1/${profile}/${coordsStr}?overview=full&steps=true&geometries=geojson`;
|
|
72
|
+
const resp = await fetch(url);
|
|
73
|
+
if (!resp.ok)
|
|
74
|
+
throw new Error(`OSRM request failed with status ${resp.status}`);
|
|
75
|
+
const data = await resp.json();
|
|
76
|
+
if (data.code !== 'Ok' || !data.routes || !data.routes.length) {
|
|
77
|
+
throw new Error('OSRM route request failed');
|
|
78
|
+
}
|
|
79
|
+
const route = data.routes[0];
|
|
80
|
+
const overviewPolyline = route.geometry?.coordinates || [];
|
|
81
|
+
const legs = (route.legs ?? []).map((leg) => ({
|
|
82
|
+
distance: { value: leg.distance, text: `${(leg.distance / 1000).toFixed(2)} km` },
|
|
83
|
+
duration: { value: leg.duration, text: `${Math.ceil(leg.duration / 60)} mins` },
|
|
84
|
+
overviewPolyline: leg.steps?.flatMap((step) => step.geometry?.coordinates || []) || [],
|
|
85
|
+
}));
|
|
86
|
+
return {
|
|
87
|
+
distance: { value: route.distance, text: `${(route.distance / 1000).toFixed(2)} km` },
|
|
88
|
+
duration: { value: route.duration, text: `${Math.ceil(route.duration / 60)} mins` },
|
|
89
|
+
overviewPolyline,
|
|
90
|
+
legs,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async getExtraTimeForZones(zones) {
|
|
94
|
+
const settings = await (0, index_1.getLibraries)().getCachedSettingsService().getSettings();
|
|
95
|
+
const now = new Date();
|
|
96
|
+
const today = (0, dayjs_1.default)(now).day();
|
|
97
|
+
const currentTime = (0, dayjs_1.default)(now).format('HH:mm');
|
|
98
|
+
return zones.map(zone => {
|
|
99
|
+
if (!zone)
|
|
100
|
+
return this.DEFAULT_EXTRA_TIME;
|
|
101
|
+
const zoneSettings = settings.distanceExtraTimeSettings?.find(s => s.zone.toString() === zone._id.toString() && s.day === today);
|
|
102
|
+
if (!zoneSettings)
|
|
103
|
+
return this.DEFAULT_EXTRA_TIME;
|
|
104
|
+
const slot = zoneSettings.slots.find(s => s.isActive && s.start <= currentTime && s.end >= currentTime);
|
|
105
|
+
return slot?.extraTimeInSeconds ?? this.DEFAULT_EXTRA_TIME;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
async findZonesByPoints(points) {
|
|
109
|
+
if (!points.length)
|
|
110
|
+
return [];
|
|
111
|
+
return Promise.all(points.map(point => this.zoneModel
|
|
112
|
+
.findOne({
|
|
113
|
+
geometry: {
|
|
114
|
+
$geoIntersects: {
|
|
115
|
+
$geometry: { type: 'Point', coordinates: [point.longitude, point.latitude] },
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
})
|
|
119
|
+
.exec()));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.OsrmMapService = OsrmMapService;
|
|
123
|
+
//# sourceMappingURL=osrm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osrm.js","sourceRoot":"/","sources":["libraries/map/providers/osrm.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tICoordinate,\n\tIDistanceInfo,\n\tIMapService,\n\tIRouteMatrixDTO,\n\tIWaypointDistanceInfo,\n} from '../interfaces/IMapService';\nimport { getLibraries } from '../../../index';\nimport { Setting, Zone, ZoneModel } from '../../mongo/models';\nimport { SoftDeleteModel } from '../../mongo/plugins/soft-delete-plugin';\nimport dayjs from 'dayjs';\nimport { WeekDay } from '../../../utilities/enum';\nimport { DocumentType } from '@typegoose/typegoose';\n\nexport class OsrmMapService implements IMapService {\n\tprivate zoneModel: typeof ZoneModel & SoftDeleteModel<Zone>;\n\tprivate readonly DEFAULT_EXTRA_TIME = 10;\n\tprivate readonly _url = 'https://api-v2-development.lyxa.ai/distance';\n\n\tconstructor() {\n\t\tthis.zoneModel = ZoneModel as typeof ZoneModel & SoftDeleteModel<Zone>;\n\t}\n\n\tasync getDistanceInfo(origin: ICoordinate, destination: ICoordinate): Promise<IDistanceInfo> {\n\t\tconst profile = 'driving';\n\t\tconst originStr = `${origin.longitude},${origin.latitude}`;\n\t\tconst destinationStr = `${destination.longitude},${destination.latitude}`;\n\t\tconst url = `${this._url}/route/v1/${profile}/${originStr};${destinationStr}?overview=false`;\n\n\t\tconst resp = await fetch(url);\n\t\tif (!resp.ok) throw new Error(`OSRM request failed with status ${resp.status}`);\n\n\t\tconst data = await resp.json();\n\t\tif (data.code !== 'Ok' || !data.routes || !data.routes.length) {\n\t\t\tthrow new Error('OSRM route request failed');\n\t\t}\n\n\t\tconst route = data.routes[0];\n\t\treturn {\n\t\t\tdistance: { value: route.distance, text: `${(route.distance / 1000).toFixed(2)} km` },\n\t\t\tduration: { value: route.duration, text: `${Math.ceil(route.duration / 60)} mins` },\n\t\t};\n\t}\n\n\tasync getDistanceMatrix(origins: ICoordinate[], destinations: ICoordinate[]): Promise<IRouteMatrixDTO[]> {\n\t\tconst allCoords = [...origins, ...destinations];\n\t\tconst coordString = allCoords.map(({ longitude, latitude }) => `${longitude},${latitude}`).join(';');\n\t\tconst originIndices = origins.map((_, idx) => idx).join(';');\n\t\tconst destIndices = destinations.map((_, idx) => origins.length + idx).join(';');\n\n\t\tconst url = `${this._url}/table/v1/bike/${coordString}?sources=${originIndices}&destinations=${destIndices}&annotations=distance,duration`;\n\n\t\tconst resp = await fetch(url);\n\t\tif (!resp.ok) throw new Error(`OSRM table request failed with status ${resp.status}`);\n\n\t\tconst data = await resp.json();\n\t\tif (data.code !== 'Ok' || !data.durations) throw new Error('OSRM table request failed');\n\n\t\tconst durations: number[][] = data.durations;\n\t\tconst distances: number[][] = data.distances;\n\n\t\tconst zones = await this.findZonesByPoints(destinations);\n\t\tconst extraTimes = await this.getExtraTimeForZones(zones);\n\n\t\tconst result: IRouteMatrixDTO[] = [];\n\n\t\torigins.forEach((_, i) => {\n\t\t\tdestinations.forEach((_, j) => {\n\t\t\t\tconst dur = durations[i][j] + (extraTimes[j] || this.DEFAULT_EXTRA_TIME);\n\t\t\t\tconst dist = distances.length ? distances[i][j] : 0;\n\n\t\t\t\tresult.push({\n\t\t\t\t\tdistance: { value: dist, text: distances.length ? `${(dist / 1000).toFixed(2)} km` : 'N/A' },\n\t\t\t\t\tduration: { value: dur, text: `${Math.ceil(dur / 60)} mins` },\n\t\t\t\t\tcondition: 'OK',\n\t\t\t\t\toriginIndex: i,\n\t\t\t\t\tdestinationIndex: j,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tasync getWaypointsDistanceInfo(\n\t\torigin: ICoordinate,\n\t\tdestination: ICoordinate,\n\t\twaypoints: ICoordinate[]\n\t): Promise<IWaypointDistanceInfo> {\n\t\tconst profile = 'driving';\n\t\tconst coordsArr = [origin, ...waypoints, destination];\n\t\tconst coordsStr = coordsArr.map(({ longitude, latitude }) => `${longitude},${latitude}`).join(';');\n\t\tconst url = `${this._url}/route/v1/${profile}/${coordsStr}?overview=full&steps=true&geometries=geojson`;\n\n\t\tconst resp = await fetch(url);\n\t\tif (!resp.ok) throw new Error(`OSRM request failed with status ${resp.status}`);\n\n\t\tconst data = await resp.json();\n\t\tif (data.code !== 'Ok' || !data.routes || !data.routes.length) {\n\t\t\tthrow new Error('OSRM route request failed');\n\t\t}\n\n\t\tconst route = data.routes[0];\n\t\tconst overviewPolyline = route.geometry?.coordinates || [];\n\t\tconst legs = (route.legs ?? []).map((leg: any) => ({\n\t\t\tdistance: { value: leg.distance, text: `${(leg.distance / 1000).toFixed(2)} km` },\n\t\t\tduration: { value: leg.duration, text: `${Math.ceil(leg.duration / 60)} mins` },\n\t\t\toverviewPolyline: leg.steps?.flatMap((step: any) => step.geometry?.coordinates || []) || [],\n\t\t}));\n\n\t\treturn {\n\t\t\tdistance: { value: route.distance, text: `${(route.distance / 1000).toFixed(2)} km` },\n\t\t\tduration: { value: route.duration, text: `${Math.ceil(route.duration / 60)} mins` },\n\t\t\toverviewPolyline,\n\t\t\tlegs,\n\t\t};\n\t}\n\n\tprivate async getExtraTimeForZones(zones: Array<DocumentType<Zone> | null>): Promise<number[]> {\n\t\tconst settings: Setting = await getLibraries().getCachedSettingsService().getSettings();\n\t\tconst now = new Date();\n\t\tconst today = dayjs(now).day() as WeekDay;\n\t\tconst currentTime = dayjs(now).format('HH:mm');\n\n\t\treturn zones.map(zone => {\n\t\t\tif (!zone) return this.DEFAULT_EXTRA_TIME;\n\n\t\t\tconst zoneSettings = settings.distanceExtraTimeSettings?.find(\n\t\t\t\ts => s.zone.toString() === zone._id.toString() && s.day === today\n\t\t\t);\n\n\t\t\tif (!zoneSettings) return this.DEFAULT_EXTRA_TIME;\n\n\t\t\tconst slot = zoneSettings.slots.find(s => s.isActive && s.start <= currentTime && s.end >= currentTime);\n\t\t\treturn slot?.extraTimeInSeconds ?? this.DEFAULT_EXTRA_TIME;\n\t\t});\n\t}\n\n\tprivate async findZonesByPoints(points: ICoordinate[]): Promise<(DocumentType<Zone> | null)[]> {\n\t\tif (!points.length) return [];\n\t\treturn Promise.all(\n\t\t\tpoints.map(point =>\n\t\t\t\tthis.zoneModel\n\t\t\t\t\t.findOne({\n\t\t\t\t\t\tgeometry: {\n\t\t\t\t\t\t\t$geoIntersects: {\n\t\t\t\t\t\t\t\t$geometry: { type: 'Point', coordinates: [point.longitude, point.latitude] },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.exec()\n\t\t\t)\n\t\t);\n\t}\n}\n"]}
|
|
@@ -6,7 +6,7 @@ export declare class OrderExtraTimeSlot extends StartEndTime {
|
|
|
6
6
|
extraTimeInSeconds: number;
|
|
7
7
|
isActive: boolean;
|
|
8
8
|
}
|
|
9
|
-
export declare class
|
|
9
|
+
export declare class DistanceExtraTimeSettings {
|
|
10
10
|
day: WeekDay;
|
|
11
11
|
zone: Ref<Zone>;
|
|
12
12
|
slots: OrderExtraTimeSlot[];
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.DistanceExtraTimeSettings = exports.OrderExtraTimeSlot = void 0;
|
|
13
13
|
const typegoose_1 = require("@typegoose/typegoose");
|
|
14
14
|
const enum_1 = require("../../../../utilities/enum");
|
|
15
15
|
const work_hour_model_1 = require("../shared/work-hour.model");
|
|
@@ -27,22 +27,22 @@ __decorate([
|
|
|
27
27
|
(0, typegoose_1.Prop)({ type: Boolean, default: true }),
|
|
28
28
|
__metadata("design:type", Boolean)
|
|
29
29
|
], OrderExtraTimeSlot.prototype, "isActive", void 0);
|
|
30
|
-
class
|
|
30
|
+
class DistanceExtraTimeSettings {
|
|
31
31
|
day;
|
|
32
32
|
zone;
|
|
33
33
|
slots;
|
|
34
34
|
}
|
|
35
|
-
exports.
|
|
35
|
+
exports.DistanceExtraTimeSettings = DistanceExtraTimeSettings;
|
|
36
36
|
__decorate([
|
|
37
37
|
(0, typegoose_1.Prop)({ type: Number, enum: enum_1.WeekDay, required: true }),
|
|
38
38
|
__metadata("design:type", Number)
|
|
39
|
-
],
|
|
39
|
+
], DistanceExtraTimeSettings.prototype, "day", void 0);
|
|
40
40
|
__decorate([
|
|
41
41
|
(0, typegoose_1.Prop)({ ref: () => zone_model_1.Zone, required: true }),
|
|
42
42
|
__metadata("design:type", Object)
|
|
43
|
-
],
|
|
43
|
+
], DistanceExtraTimeSettings.prototype, "zone", void 0);
|
|
44
44
|
__decorate([
|
|
45
45
|
(0, typegoose_1.Prop)({ type: [OrderExtraTimeSlot], default: [] }),
|
|
46
46
|
__metadata("design:type", Array)
|
|
47
|
-
],
|
|
48
|
-
//# sourceMappingURL=
|
|
47
|
+
], DistanceExtraTimeSettings.prototype, "slots", void 0);
|
|
48
|
+
//# sourceMappingURL=distance-extra-time.settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distance-extra-time.settings.js","sourceRoot":"/","sources":["libraries/mongo/models/embedded/distance-extra-time.settings.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAiD;AACjD,qDAAqD;AACrD,+DAAyD;AACzD,8CAAqC;AAErC,MAAa,kBAAmB,SAAQ,8BAAY;IAE5C,kBAAkB,CAAU;IAG5B,QAAQ,CAAU;CACzB;AAND,gDAMC;AAJO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;;8DACZ;AAG5B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;oDACd;AAG1B,MAAa,yBAAyB;IAE9B,GAAG,CAAW;IAGd,IAAI,CAAa;IAGjB,KAAK,CAAwB;CACpC;AATD,8DASC;AAPO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDACjC;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDAClB;AAGjB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;;wDACd","sourcesContent":["import { Prop, Ref } from '@typegoose/typegoose';\nimport { WeekDay } from '../../../../utilities/enum';\nimport { StartEndTime } from '../shared/work-hour.model';\nimport { Zone } from '../zone.model';\n\nexport class OrderExtraTimeSlot extends StartEndTime {\n\t@Prop({ type: Number, required: true, min: 0 })\n\tpublic extraTimeInSeconds!: number;\n\n\t@Prop({ type: Boolean, default: true })\n\tpublic isActive: boolean;\n}\n\nexport class DistanceExtraTimeSettings {\n\t@Prop({ type: Number, enum: WeekDay, required: true })\n\tpublic day!: WeekDay;\n\n\t@Prop({ ref: () => Zone, required: true })\n\tpublic zone!: Ref<Zone>;\n\n\t@Prop({ type: [OrderExtraTimeSlot], default: [] })\n\tpublic slots!: OrderExtraTimeSlot[];\n}\n"]}
|
|
@@ -13,7 +13,7 @@ import { CustomerSupport } from './embedded/customer-support-numbers.model';
|
|
|
13
13
|
import { CustomerSupportBatchesSettings } from './embedded/customer-support-batches.model';
|
|
14
14
|
import { PlusSettings } from './embedded/plus-settings.model';
|
|
15
15
|
import { AgentNotificationSetting } from './embedded/agent-notification-setting.model';
|
|
16
|
-
import {
|
|
16
|
+
import { DistanceExtraTimeSettings } from './embedded/distance-extra-time.settings';
|
|
17
17
|
export declare class Setting extends TimeStamps {
|
|
18
18
|
deliveryCharges: DeliveryCharge[];
|
|
19
19
|
serviceFeeSetting?: ServiceFeeSetting;
|
|
@@ -37,5 +37,5 @@ export declare class Setting extends TimeStamps {
|
|
|
37
37
|
plusSettings?: PlusSettings[];
|
|
38
38
|
agentNotificationSetting?: AgentNotificationSetting;
|
|
39
39
|
cashbackAmount?: number;
|
|
40
|
-
|
|
40
|
+
distanceExtraTimeSettings?: DistanceExtraTimeSettings[];
|
|
41
41
|
}
|
|
@@ -26,7 +26,7 @@ const customer_support_numbers_model_1 = require("./embedded/customer-support-nu
|
|
|
26
26
|
const customer_support_batches_model_1 = require("./embedded/customer-support-batches.model");
|
|
27
27
|
const plus_settings_model_1 = require("./embedded/plus-settings.model");
|
|
28
28
|
const agent_notification_setting_model_1 = require("./embedded/agent-notification-setting.model");
|
|
29
|
-
const
|
|
29
|
+
const distance_extra_time_settings_1 = require("./embedded/distance-extra-time.settings");
|
|
30
30
|
let Setting = class Setting extends defaultClasses_1.TimeStamps {
|
|
31
31
|
deliveryCharges;
|
|
32
32
|
serviceFeeSetting;
|
|
@@ -50,7 +50,7 @@ let Setting = class Setting extends defaultClasses_1.TimeStamps {
|
|
|
50
50
|
plusSettings;
|
|
51
51
|
agentNotificationSetting;
|
|
52
52
|
cashbackAmount;
|
|
53
|
-
|
|
53
|
+
distanceExtraTimeSettings;
|
|
54
54
|
};
|
|
55
55
|
exports.Setting = Setting;
|
|
56
56
|
__decorate([
|
|
@@ -142,9 +142,9 @@ __decorate([
|
|
|
142
142
|
__metadata("design:type", Number)
|
|
143
143
|
], Setting.prototype, "cashbackAmount", void 0);
|
|
144
144
|
__decorate([
|
|
145
|
-
(0, typegoose_1.prop)({ type: () => [
|
|
145
|
+
(0, typegoose_1.prop)({ type: () => [distance_extra_time_settings_1.DistanceExtraTimeSettings], default: [] }),
|
|
146
146
|
__metadata("design:type", Array)
|
|
147
|
-
], Setting.prototype, "
|
|
147
|
+
], Setting.prototype, "distanceExtraTimeSettings", void 0);
|
|
148
148
|
exports.Setting = Setting = __decorate([
|
|
149
149
|
(0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'settings' } })
|
|
150
150
|
], Setting);
|