@lyxa.ai/core 1.2.37 → 1.2.40
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/libraries/map/providers/osrm.js +7 -4
- package/dist/libraries/map/providers/osrm.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/distance-extra-time.settings.d.ts +5 -2
- package/dist/libraries/mongo/models/embedded/distance-extra-time.settings.js +16 -8
- package/dist/libraries/mongo/models/embedded/distance-extra-time.settings.js.map +1 -1
- package/dist/libraries/mongo/models/ticket.model.d.ts +2 -0
- package/dist/libraries/mongo/models/ticket.model.js +6 -0
- package/dist/libraries/mongo/models/ticket.model.js.map +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ const models_1 = require("../../mongo/models");
|
|
|
9
9
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
10
10
|
class OsrmMapService {
|
|
11
11
|
zoneModel;
|
|
12
|
-
DEFAULT_EXTRA_TIME =
|
|
12
|
+
DEFAULT_EXTRA_TIME = 0;
|
|
13
13
|
_url = 'https://api-v2-development.lyxa.ai/distance';
|
|
14
14
|
constructor() {
|
|
15
15
|
this.zoneModel = models_1.ZoneModel;
|
|
@@ -98,10 +98,13 @@ class OsrmMapService {
|
|
|
98
98
|
return zones.map(zone => {
|
|
99
99
|
if (!zone)
|
|
100
100
|
return this.DEFAULT_EXTRA_TIME;
|
|
101
|
-
const zoneSettings = settings.distanceExtraTimeSettings?.find(s => s.zone
|
|
102
|
-
if (!zoneSettings)
|
|
101
|
+
const zoneSettings = settings.distanceExtraTimeSettings?.find(s => s.zone?.toString() === zone._id.toString());
|
|
102
|
+
if (!zoneSettings || !zoneSettings.days?.length)
|
|
103
103
|
return this.DEFAULT_EXTRA_TIME;
|
|
104
|
-
const
|
|
104
|
+
const daySettings = zoneSettings.days.find(d => d.day === today);
|
|
105
|
+
if (!daySettings || !daySettings.slots?.length)
|
|
106
|
+
return this.DEFAULT_EXTRA_TIME;
|
|
107
|
+
const slot = daySettings.slots.find(s => s.isActive && s.start <= currentTime && s.end >= currentTime);
|
|
105
108
|
return slot?.extraTimeInSeconds ?? this.DEFAULT_EXTRA_TIME;
|
|
106
109
|
});
|
|
107
110
|
}
|
|
@@ -1 +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"]}
|
|
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 = 0;\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()\n\t\t\t);\n\t\t\tif (!zoneSettings || !zoneSettings.days?.length) return this.DEFAULT_EXTRA_TIME;\n\n\t\t\tconst daySettings = zoneSettings.days.find(d => d.day === today);\n\t\t\tif (!daySettings || !daySettings.slots?.length) return this.DEFAULT_EXTRA_TIME;\n\n\t\t\tconst slot = daySettings.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"]}
|
|
@@ -7,8 +7,11 @@ export declare class OrderExtraTimeSlot extends StartEndTime {
|
|
|
7
7
|
bufferTimeInSeconds: number;
|
|
8
8
|
isActive: boolean;
|
|
9
9
|
}
|
|
10
|
-
export declare class
|
|
10
|
+
export declare class DistanceExtraTimeDay {
|
|
11
11
|
day: WeekDay;
|
|
12
|
-
zone: Ref<Zone>;
|
|
13
12
|
slots: OrderExtraTimeSlot[];
|
|
14
13
|
}
|
|
14
|
+
export declare class DistanceExtraTimeSettings {
|
|
15
|
+
zone: Ref<Zone>;
|
|
16
|
+
days: DistanceExtraTimeDay[];
|
|
17
|
+
}
|
|
@@ -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.DistanceExtraTimeSettings = exports.OrderExtraTimeSlot = void 0;
|
|
12
|
+
exports.DistanceExtraTimeSettings = exports.DistanceExtraTimeDay = 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");
|
|
@@ -21,7 +21,7 @@ class OrderExtraTimeSlot extends work_hour_model_1.StartEndTime {
|
|
|
21
21
|
}
|
|
22
22
|
exports.OrderExtraTimeSlot = OrderExtraTimeSlot;
|
|
23
23
|
__decorate([
|
|
24
|
-
(0, typegoose_1.Prop)({ type: Number,
|
|
24
|
+
(0, typegoose_1.Prop)({ type: Number, min: 0, default: 0 }),
|
|
25
25
|
__metadata("design:type", Number)
|
|
26
26
|
], OrderExtraTimeSlot.prototype, "extraTimeInSeconds", void 0);
|
|
27
27
|
__decorate([
|
|
@@ -32,22 +32,30 @@ __decorate([
|
|
|
32
32
|
(0, typegoose_1.Prop)({ type: Boolean, default: true }),
|
|
33
33
|
__metadata("design:type", Boolean)
|
|
34
34
|
], OrderExtraTimeSlot.prototype, "isActive", void 0);
|
|
35
|
-
class
|
|
35
|
+
class DistanceExtraTimeDay {
|
|
36
36
|
day;
|
|
37
|
-
zone;
|
|
38
37
|
slots;
|
|
39
38
|
}
|
|
40
|
-
exports.
|
|
39
|
+
exports.DistanceExtraTimeDay = DistanceExtraTimeDay;
|
|
41
40
|
__decorate([
|
|
42
41
|
(0, typegoose_1.Prop)({ type: Number, enum: enum_1.WeekDay, required: true }),
|
|
43
42
|
__metadata("design:type", Number)
|
|
44
|
-
],
|
|
43
|
+
], DistanceExtraTimeDay.prototype, "day", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, typegoose_1.Prop)({ type: [OrderExtraTimeSlot], default: [] }),
|
|
46
|
+
__metadata("design:type", Array)
|
|
47
|
+
], DistanceExtraTimeDay.prototype, "slots", void 0);
|
|
48
|
+
class DistanceExtraTimeSettings {
|
|
49
|
+
zone;
|
|
50
|
+
days;
|
|
51
|
+
}
|
|
52
|
+
exports.DistanceExtraTimeSettings = DistanceExtraTimeSettings;
|
|
45
53
|
__decorate([
|
|
46
54
|
(0, typegoose_1.Prop)({ ref: () => zone_model_1.Zone, required: true }),
|
|
47
55
|
__metadata("design:type", Object)
|
|
48
56
|
], DistanceExtraTimeSettings.prototype, "zone", void 0);
|
|
49
57
|
__decorate([
|
|
50
|
-
(0, typegoose_1.Prop)({ type: [
|
|
58
|
+
(0, typegoose_1.Prop)({ type: [DistanceExtraTimeDay], default: [] }),
|
|
51
59
|
__metadata("design:type", Array)
|
|
52
|
-
], DistanceExtraTimeSettings.prototype, "
|
|
60
|
+
], DistanceExtraTimeSettings.prototype, "days", void 0);
|
|
53
61
|
//# sourceMappingURL=distance-extra-time.settings.js.map
|
|
@@ -1 +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,mBAAmB,CAAU;IAG7B,QAAQ,
|
|
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,mBAAmB,CAAU;IAG7B,QAAQ,CAAW;CAC1B;AATD,gDASC;AAPO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;8DACR;AAG5B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;;+DACT;AAG7B;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;oDACb;AAG3B,MAAa,oBAAoB;IAEzB,GAAG,CAAW;IAGd,KAAK,CAAwB;CACpC;AAND,oDAMC;AAJO;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACjC;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;;mDACd;AAGrC,MAAa,yBAAyB;IAE9B,IAAI,CAAa;IAGjB,IAAI,CAA0B;CACrC;AAND,8DAMC;AAJO;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,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;;uDACf","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, min: 0, default: 0 })\n\tpublic extraTimeInSeconds!: number;\n\n\t@Prop({ type: Number, min: 0, default: 600 })\n\tpublic bufferTimeInSeconds!: number;\n\n\t@Prop({ type: Boolean, default: true })\n\tpublic isActive!: boolean;\n}\n\nexport class DistanceExtraTimeDay {\n\t@Prop({ type: Number, enum: WeekDay, required: true })\n\tpublic day!: WeekDay;\n\n\t@Prop({ type: [OrderExtraTimeSlot], default: [] })\n\tpublic slots!: OrderExtraTimeSlot[];\n}\n\nexport class DistanceExtraTimeSettings {\n\t@Prop({ ref: () => Zone, required: true })\n\tpublic zone!: Ref<Zone>;\n\n\t@Prop({ type: [DistanceExtraTimeDay], default: [] })\n\tpublic days!: DistanceExtraTimeDay[];\n}\n"]}
|
|
@@ -8,6 +8,7 @@ import { TicketStatus, TicketType, UserRef } from '../../../utilities/enum';
|
|
|
8
8
|
import { Chatroom } from './chat-room.model';
|
|
9
9
|
import { TicketAction } from './ticket-action.model';
|
|
10
10
|
import { SupportReason } from './support-reason.model';
|
|
11
|
+
import { CancellationReason } from "./cancellation-reason.model";
|
|
11
12
|
export declare class Ticket extends TimeStamps {
|
|
12
13
|
ticketId: string;
|
|
13
14
|
type: TicketType;
|
|
@@ -28,4 +29,5 @@ export declare class Ticket extends TimeStamps {
|
|
|
28
29
|
customerRating?: number;
|
|
29
30
|
agentScore?: number;
|
|
30
31
|
action?: Ref<TicketAction>;
|
|
32
|
+
resolutionReason?: Ref<CancellationReason>;
|
|
31
33
|
}
|
|
@@ -18,6 +18,7 @@ const enum_1 = require("../../../utilities/enum");
|
|
|
18
18
|
const chat_room_model_1 = require("./chat-room.model");
|
|
19
19
|
const ticket_action_model_1 = require("./ticket-action.model");
|
|
20
20
|
const support_reason_model_1 = require("./support-reason.model");
|
|
21
|
+
const cancellation_reason_model_1 = require("./cancellation-reason.model");
|
|
21
22
|
let Ticket = class Ticket extends defaultClasses_1.TimeStamps {
|
|
22
23
|
ticketId;
|
|
23
24
|
type;
|
|
@@ -38,6 +39,7 @@ let Ticket = class Ticket extends defaultClasses_1.TimeStamps {
|
|
|
38
39
|
customerRating;
|
|
39
40
|
agentScore;
|
|
40
41
|
action;
|
|
42
|
+
resolutionReason;
|
|
41
43
|
};
|
|
42
44
|
exports.Ticket = Ticket;
|
|
43
45
|
__decorate([
|
|
@@ -116,6 +118,10 @@ __decorate([
|
|
|
116
118
|
(0, typegoose_1.prop)({ ref: () => ticket_action_model_1.TicketAction, required: false }),
|
|
117
119
|
__metadata("design:type", Object)
|
|
118
120
|
], Ticket.prototype, "action", void 0);
|
|
121
|
+
__decorate([
|
|
122
|
+
(0, typegoose_1.prop)({ ref: () => cancellation_reason_model_1.CancellationReason, required: false }),
|
|
123
|
+
__metadata("design:type", Object)
|
|
124
|
+
], Ticket.prototype, "resolutionReason", void 0);
|
|
119
125
|
exports.Ticket = Ticket = __decorate([
|
|
120
126
|
(0, typegoose_1.modelOptions)({
|
|
121
127
|
schemaOptions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket.model.js","sourceRoot":"/","sources":["libraries/mongo/models/ticket.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"ticket.model.js","sourceRoot":"/","sources":["libraries/mongo/models/ticket.model.ts"],"names":[],"mappings":"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","sourcesContent":["import {index, modelOptions, prop, Ref} from '@typegoose/typegoose';\nimport {TimeStamps} from '@typegoose/typegoose/lib/defaultClasses';\nimport {User} from './user.model';\nimport {Shop} from './shop.model';\nimport {Order} from './order.model';\nimport {Admin} from './admin.model';\nimport {TicketStatus, TicketType, UserRef} from '../../../utilities/enum';\nimport {Chatroom} from './chat-room.model';\nimport {TicketAction} from './ticket-action.model';\nimport {SupportReason} from './support-reason.model';\nimport {CancellationReason} from \"./cancellation-reason.model\";\n\n@modelOptions({\n schemaOptions: {\n collection: 'tickets',\n timestamps: true,\n },\n})\n@index({assignedAgent: 1, status: 1})\n@index({type: 1, status: 1, priority: 1})\n@index({client: 1, clientType: 1, status: 1})\n@index({createdAt: -1})\n@index({chatroom: 1})\nexport class Ticket extends TimeStamps {\n @prop({required: true, type: String, unique: true})\n public ticketId!: string;\n\n @prop({required: true, type: String, enum: TicketType})\n public type!: TicketType;\n\n @prop({required: true, type: String, enum: TicketStatus, default: TicketStatus.PENDING})\n public status!: TicketStatus;\n\n @prop({type: String, required: true})\n public title!: string;\n\n @prop({ref: () => SupportReason, required: false})\n public supportReason?: Ref<SupportReason>;\n\n @prop({refPath: 'clientType', required: true})\n public client!: Ref<User | Shop>;\n\n @prop({required: true, type: String, enum: UserRef})\n public clientType!: UserRef;\n\n @prop({ref: () => Order})\n public order?: Ref<Order>; // DEPRECATED\n\n @prop({ref: () => Admin})\n public assignedAgent?: Ref<Admin>;\n\n @prop({type: Date})\n public assignedAt?: Date;\n\n @prop({type: Number, default: 0})\n public assignmentAttempts?: number;\n\n @prop({ref: () => Chatroom, required: true})\n public chatroom!: Ref<Chatroom>;\n\n @prop({type: Date})\n public resolvedAt?: Date;\n\n @prop({type: String, enum: UserRef})\n public resolvedBy?: UserRef;\n\n @prop({type: Date})\n public closedAt?: Date;\n\n @prop({type: Number})\n public resolutionTimeMinutes?: number;\n\n @prop({type: Number, min: 1, max: 5})\n public customerRating?: number;\n\n @prop({type: Number})\n public agentScore?: number;\n\n /**\n * @deprecated Use resolveReason instead.\n */\n @prop({ref: () => TicketAction, required: false})\n public action?: Ref<TicketAction>;\n\n @prop({ref: () => CancellationReason, required: false})\n public resolutionReason?: Ref<CancellationReason>;\n}\n"]}
|
package/dist/types/README.md
CHANGED
package/dist/types/package.json
CHANGED