@lyxa.ai/core 1.1.21 → 1.1.23
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/event/index.d.ts +3 -3
- package/dist/libraries/event/index.js +18 -61
- package/dist/libraries/event/index.js.map +1 -1
- package/dist/libraries/mongo/models/banner.model.js +3 -3
- package/dist/libraries/mongo/models/banner.model.js.map +1 -1
- package/dist/libraries/mongo/models/cancellation-reason.model.js +3 -3
- package/dist/libraries/mongo/models/cancellation-reason.model.js.map +1 -1
- package/dist/libraries/mongo/models/cart.model.js +2 -2
- package/dist/libraries/mongo/models/cart.model.js.map +1 -1
- package/dist/libraries/mongo/models/category.model.js +2 -19
- package/dist/libraries/mongo/models/category.model.js.map +1 -1
- package/dist/libraries/mongo/models/dish.model.js +2 -2
- package/dist/libraries/mongo/models/dish.model.js.map +1 -1
- package/dist/libraries/mongo/models/faq.model.js +2 -2
- package/dist/libraries/mongo/models/faq.model.js.map +1 -1
- package/dist/libraries/mongo/models/filter-container.model.js +3 -3
- package/dist/libraries/mongo/models/filter-container.model.js.map +1 -1
- package/dist/libraries/mongo/models/finance-settlement.model.js +2 -2
- package/dist/libraries/mongo/models/finance-settlement.model.js.map +1 -1
- package/dist/libraries/mongo/models/list-container.model.js +3 -3
- package/dist/libraries/mongo/models/list-container.model.js.map +1 -1
- package/dist/libraries/mongo/models/product.model.d.ts +1 -0
- package/dist/libraries/mongo/models/product.model.js +13 -6
- package/dist/libraries/mongo/models/product.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop-category.model.js +2 -2
- package/dist/libraries/mongo/models/shop-category.model.js.map +1 -1
- package/dist/libraries/mongo/models/shop.model.js +2 -2
- package/dist/libraries/mongo/models/shop.model.js.map +1 -1
- package/dist/libraries/mongo/models/support-reason.model.js +3 -3
- package/dist/libraries/mongo/models/support-reason.model.js.map +1 -1
- package/dist/libraries/mongo/models/tag.model.js +3 -3
- package/dist/libraries/mongo/models/tag.model.js.map +1 -1
- package/dist/libraries/mongo/models/user-app-section-setting.model.js +3 -3
- package/dist/libraries/mongo/models/user-app-section-setting.model.js.map +1 -1
- package/dist/libraries/mongo/models/user.model.d.ts +1 -1
- package/dist/libraries/mongo/plugins/normalize-field.plugin.d.ts +4 -0
- package/dist/libraries/mongo/plugins/normalize-field.plugin.js +42 -0
- package/dist/libraries/mongo/plugins/normalize-field.plugin.js.map +1 -0
- package/dist/libraries/mongo/utilities/{shopHooks.js → shop.hooks.js} +3 -3
- package/dist/libraries/mongo/utilities/shop.hooks.js.map +1 -0
- package/dist/libraries/mongo/utilities/{sortingOrderHooks.js → sorting-order.hooks.js} +1 -1
- package/dist/libraries/mongo/utilities/sorting-order.hooks.js.map +1 -0
- package/dist/libraries/mongo/utilities/{uniqueIdHooks.js → unique-id.hooks.js} +1 -1
- package/dist/libraries/mongo/utilities/unique-id.hooks.js.map +1 -0
- package/dist/libraries/socket/BaseSocketEvent.d.ts +4 -1
- package/dist/libraries/socket/BaseSocketEvent.js +4 -4
- package/dist/libraries/socket/BaseSocketEvent.js.map +1 -1
- package/dist/libraries/socket/PushNotificationEvent.d.ts +13 -0
- package/dist/libraries/socket/PushNotificationEvent.js +20 -0
- package/dist/libraries/socket/PushNotificationEvent.js.map +1 -0
- package/dist/libraries/socket/core/socket-event-consumer.d.ts +1 -0
- package/dist/libraries/socket/core/socket-event-consumer.js +27 -0
- package/dist/libraries/socket/core/socket-event-consumer.js.map +1 -0
- package/dist/libraries/socket/core/socket-event-publisher.d.ts +4 -0
- package/dist/libraries/socket/core/socket-event-publisher.js +68 -0
- package/dist/libraries/socket/core/socket-event-publisher.js.map +1 -0
- package/dist/libraries/socket/core/socket-event-registry.d.ts +1 -1
- package/dist/libraries/socket/core/socket-event-registry.js +1 -1
- package/dist/libraries/socket/core/socket-event-registry.js.map +1 -1
- package/dist/libraries/socket/{socket-event-registry.map.d.ts → core/socket-event-registry.map.d.ts} +33 -19
- package/dist/libraries/socket/core/socket-event-registry.map.js +33 -0
- package/dist/libraries/socket/core/socket-event-registry.map.js.map +1 -0
- package/dist/libraries/socket/events/chatlist-message-send.socket.event.d.ts +5 -4
- package/dist/libraries/socket/events/chatlist-message-send.socket.event.js +10 -7
- package/dist/libraries/socket/events/chatlist-message-send.socket.event.js.map +1 -1
- package/dist/libraries/socket/events/chatroom-message-send.socket.event.d.ts +10 -5
- package/dist/libraries/socket/events/chatroom-message-send.socket.event.js +17 -7
- package/dist/libraries/socket/events/chatroom-message-send.socket.event.js.map +1 -1
- package/dist/libraries/socket/events/notification.socket.event.d.ts +25 -0
- package/dist/libraries/socket/events/notification.socket.event.js +22 -0
- package/dist/libraries/socket/events/notification.socket.event.js.map +1 -0
- package/dist/libraries/socket/events/ticket-assign.socket.event.d.ts +5 -4
- package/dist/libraries/socket/events/ticket-assign.socket.event.js +4 -4
- package/dist/libraries/socket/events/ticket-assign.socket.event.js.map +1 -1
- package/dist/libraries/socket/events/ticket-unassign.socket.event.d.ts +5 -4
- package/dist/libraries/socket/events/ticket-unassign.socket.event.js +7 -4
- package/dist/libraries/socket/events/ticket-unassign.socket.event.js.map +1 -1
- package/dist/libraries/trpc/middlewares/createSocketSubscriptionProcedure.d.ts +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/types/utilities/enum.d.ts +5 -1
- package/dist/types/utilities/enum.js +6 -1
- package/dist/types/utilities/enum.js.map +1 -1
- package/dist/types/utilities/validation/common-validation.d.ts +78 -2
- package/dist/types/utilities/validation/global-validation.d.ts +38 -14
- package/dist/utilities/enum.d.ts +5 -1
- package/dist/utilities/enum.js +6 -1
- package/dist/utilities/enum.js.map +1 -1
- package/dist/utilities/normalize.d.ts +1 -0
- package/dist/utilities/normalize.js +7 -0
- package/dist/utilities/normalize.js.map +1 -1
- package/dist/utilities/validation/common-validation.d.ts +78 -2
- package/dist/utilities/validation/global-validation.d.ts +38 -14
- package/package.json +1 -1
- package/dist/libraries/mongo/utilities/shopHooks.js.map +0 -1
- package/dist/libraries/mongo/utilities/sortingOrderHooks.js.map +0 -1
- package/dist/libraries/mongo/utilities/uniqueIdHooks.js.map +0 -1
- package/dist/libraries/socket/socket-event-registry.map.js +0 -28
- package/dist/libraries/socket/socket-event-registry.map.js.map +0 -1
- /package/dist/libraries/mongo/utilities/{shopHooks.d.ts → shop.hooks.d.ts} +0 -0
- /package/dist/libraries/mongo/utilities/{sortingOrderHooks.d.ts → sorting-order.hooks.d.ts} +0 -0
- /package/dist/libraries/mongo/utilities/{uniqueIdHooks.d.ts → unique-id.hooks.d.ts} +0 -0
|
@@ -19,12 +19,14 @@ const price_breakdown_model_1 = require("./embedded/price-breakdown.model");
|
|
|
19
19
|
const attribute_map_model_1 = require("./embedded/attribute-map.model");
|
|
20
20
|
const shop_category_model_1 = require("./shop-category.model");
|
|
21
21
|
const _1 = require(".");
|
|
22
|
-
const
|
|
23
|
-
const
|
|
22
|
+
const sorting_order_hooks_1 = require("../utilities/sorting-order.hooks");
|
|
23
|
+
const unique_id_hooks_1 = require("../utilities/unique-id.hooks");
|
|
24
|
+
const normalize_field_plugin_1 = require("../plugins/normalize-field.plugin");
|
|
24
25
|
let Product = class Product extends defaultClasses_1.TimeStamps {
|
|
25
26
|
productId;
|
|
26
27
|
shop;
|
|
27
28
|
name;
|
|
29
|
+
nameNormalized;
|
|
28
30
|
barcode;
|
|
29
31
|
shopCategory;
|
|
30
32
|
itemType;
|
|
@@ -67,6 +69,10 @@ __decorate([
|
|
|
67
69
|
(0, typegoose_1.prop)({ required: true, type: String, trim: true, maxlength: 100 }),
|
|
68
70
|
__metadata("design:type", String)
|
|
69
71
|
], Product.prototype, "name", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
(0, typegoose_1.prop)({ type: String, trim: true, lowercase: true, select: false }),
|
|
74
|
+
__metadata("design:type", String)
|
|
75
|
+
], Product.prototype, "nameNormalized", void 0);
|
|
70
76
|
__decorate([
|
|
71
77
|
(0, typegoose_1.prop)({ type: String, trim: true, maxlength: 50 }),
|
|
72
78
|
__metadata("design:type", String)
|
|
@@ -188,16 +194,17 @@ exports.Product = Product = __decorate([
|
|
|
188
194
|
(0, typegoose_1.modelOptions)({
|
|
189
195
|
schemaOptions: { collection: 'products', toJSON: { virtuals: true }, toObject: { virtuals: true } },
|
|
190
196
|
}),
|
|
191
|
-
(0, typegoose_1.Index)({
|
|
197
|
+
(0, typegoose_1.Index)({ nameNormalized: 1, shop: 1, shopCategory: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } }),
|
|
192
198
|
(0, typegoose_1.Index)({ shop: 1, shopCategory: 1 }, { partialFilterExpression: { deletedAt: null } }),
|
|
193
199
|
(0, typegoose_1.Index)({ shop: 1, isStockEnabled: 1, stockQuantity: 1 }, { partialFilterExpression: { deletedAt: null } }),
|
|
194
200
|
(0, typegoose_1.pre)('save', async function (next) {
|
|
195
|
-
await
|
|
196
|
-
await
|
|
201
|
+
await unique_id_hooks_1.handlePreSaveForUniqueId.call(this, _1.ProductModel, 'productId');
|
|
202
|
+
await sorting_order_hooks_1.handlePreSaveForSorting.call(this, _1.ProductModel, {
|
|
197
203
|
shop: this.shop,
|
|
198
204
|
shopCategory: this.shopCategory,
|
|
199
205
|
});
|
|
200
206
|
next();
|
|
201
|
-
})
|
|
207
|
+
}),
|
|
208
|
+
(0, typegoose_1.plugin)(normalize_field_plugin_1.normalizeFieldPlugin, { field: 'name' })
|
|
202
209
|
], Product);
|
|
203
210
|
//# sourceMappingURL=product.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product.model.js","sourceRoot":"/","sources":["libraries/mongo/models/product.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"product.model.js","sourceRoot":"/","sources":["libraries/mongo/models/product.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { Index, modelOptions, plugin, pre, prop, Ref } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { ProductType, ItemType, ProductDietaryType, Status, PriceOption } from '../../../utilities/enum';\nimport { ProductNutrition } from './embedded/product-nutrition.model';\nimport { Shop } from './shop.model';\nimport { PriceBreakdown } from './embedded/price-breakdown.model';\nimport { AttributeMap } from './embedded/attribute-map.model';\nimport { ShopCategory } from './shop-category.model';\nimport { ProductMarketing, ProductModel } from '.';\nimport { handlePreSaveForSorting } from '../utilities/sorting-order.hooks';\nimport { handlePreSaveForUniqueId } from '../utilities/unique-id.hooks';\nimport { normalizeFieldPlugin } from '../plugins/normalize-field.plugin';\n\n@modelOptions({\n\tschemaOptions: { collection: 'products', toJSON: { virtuals: true }, toObject: { virtuals: true } },\n})\n@Index(\n\t{ nameNormalized: 1, shop: 1, shopCategory: 1 },\n\t{ unique: true, partialFilterExpression: { deletedAt: null } }\n)\n@Index({ shop: 1, shopCategory: 1 }, { partialFilterExpression: { deletedAt: null } })\n@Index({ shop: 1, isStockEnabled: 1, stockQuantity: 1 }, { partialFilterExpression: { deletedAt: null } })\n@pre<Product>('save', async function (next) {\n\t// Generate unique id if not exists\n\tawait handlePreSaveForUniqueId.call(this, ProductModel, 'productId');\n\n\t// Set sortingOrder\n\tawait handlePreSaveForSorting.call(this, ProductModel, {\n\t\tshop: this.shop,\n\t\tshopCategory: this.shopCategory,\n\t});\n\n\tnext();\n})\n@plugin(normalizeFieldPlugin, { field: 'name' })\nexport class Product extends TimeStamps {\n\t@prop({ type: String, unique: true, index: true })\n\tpublic productId: string;\n\n\t@prop({ required: true, ref: () => Shop })\n\tpublic shop!: Ref<Shop>;\n\n\t@prop({ required: true, type: String, trim: true, maxlength: 100 })\n\tpublic name!: string;\n\n\t@prop({ type: String, trim: true, lowercase: true, select: false })\n\tpublic nameNormalized?: string;\n\n\t@prop({ type: String, trim: true, maxlength: 50 })\n\tpublic barcode?: string;\n\n\t@prop({ required: true, ref: () => ShopCategory })\n\tpublic shopCategory!: Ref<ShopCategory>;\n\n\t@prop({ required: true, type: String, enum: ItemType })\n\tpublic itemType!: ItemType;\n\n\t@prop({ type: String, enum: ProductType })\n\tpublic productType?: ProductType;\n\n\t@prop({ type: String })\n\tpublic logo?: string;\n\n\t@prop({ type: [String], default: [] })\n\tpublic images?: string[];\n\n\t@prop({ type: String, enum: PriceOption, default: PriceOption.SINGLE_PRICE })\n\tpublic priceOption?: PriceOption;\n\n\t@prop({ required: true, type: [PriceBreakdown] })\n\tpublic priceBreakdowns?: PriceBreakdown[];\n\n\t@prop({ type: String, maxlength: 250 })\n\tpublic description?: string;\n\n\t@prop({ type: [AttributeMap], default: [] })\n\tpublic attributeMaps?: AttributeMap[];\n\n\t@prop({ ref: () => Product, default: [] })\n\tpublic addons?: Ref<Product>[];\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isNutritionEnabled?: boolean;\n\n\t@prop({ type: Number, min: 0 })\n\tpublic nutritionPackSize?: number;\n\n\t@prop({ type: String })\n\tpublic nutritionPackSizeUnit?: string;\n\n\t@prop({ type: [ProductNutrition], default: [] })\n\tpublic nutritions?: ProductNutrition[];\n\n\t@prop({ type: [String], enum: ProductDietaryType, default: [] })\n\tpublic dietaryTypes?: ProductDietaryType[];\n\n\t@prop({ type: Number, min: -9999, max: 9999 })\n\tpublic storedTemperature?: number;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isStockEnabled?: boolean;\n\n\t@prop({ type: Number, max: 999999999 }) // isStockEnabled: true and stockQuantity < 1 means out of stock\n\tpublic stockQuantity?: number;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isDrinkIncluded?: boolean;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isLargeItem?: boolean;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isPreOrderEnabled?: boolean;\n\n\t@prop({ type: Number, min: 0 })\n\tpublic numberOfPreparingHours?: number;\n\n\t@prop({ type: Number, min: 0, max: 999999999 }) // 0 means, it is disable\n\tpublic orderQuantityLimit?: number;\n\n\t@prop({ type: String, maxlength: 250 })\n\tpublic note?: string;\n\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status?: Status;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n\n\t@prop({\n\t\tref: () => ProductMarketing,\n\t\tforeignField: 'product',\n\t\tlocalField: '_id',\n\t\tjustOne: true,\n\t})\n\tpublic productMarketing: Ref<ProductMarketing>; // Virtual reference to ProductMarketing\n}\n"]}
|
|
@@ -16,7 +16,7 @@ const enum_1 = require("../../../utilities/enum");
|
|
|
16
16
|
const category_model_1 = require("./category.model");
|
|
17
17
|
const shop_model_1 = require("./shop.model");
|
|
18
18
|
const _1 = require(".");
|
|
19
|
-
const
|
|
19
|
+
const sorting_order_hooks_1 = require("../utilities/sorting-order.hooks");
|
|
20
20
|
let ShopCategory = class ShopCategory extends defaultClasses_1.TimeStamps {
|
|
21
21
|
shop;
|
|
22
22
|
category;
|
|
@@ -50,7 +50,7 @@ exports.ShopCategory = ShopCategory = __decorate([
|
|
|
50
50
|
(0, typegoose_1.Index)({ shop: 1, category: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } }),
|
|
51
51
|
(0, typegoose_1.Index)({ shop: 1, deletedAt: 1 }),
|
|
52
52
|
(0, typegoose_1.pre)('save', async function (next) {
|
|
53
|
-
await
|
|
53
|
+
await sorting_order_hooks_1.handlePreSaveForSorting.call(this, _1.ShopCategoryModel, {
|
|
54
54
|
shop: this.shop,
|
|
55
55
|
});
|
|
56
56
|
next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop-category.model.js","sourceRoot":"/","sources":["libraries/mongo/models/shop-category.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA2E;AAC3E,4EAAqE;AACrE,kDAAiD;AACjD,qDAA4C;AAC5C,6CAAoC;AACpC,wBAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"shop-category.model.js","sourceRoot":"/","sources":["libraries/mongo/models/shop-category.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA2E;AAC3E,4EAAqE;AACrE,kDAAiD;AACjD,qDAA4C;AAC5C,6CAAoC;AACpC,wBAAsC;AACtC,0EAA2E;AAapE,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,2BAAU;IAEpC,IAAI,CAAa;IAGjB,QAAQ,CAAiB;IAGzB,MAAM,CAAU;IAGhB,IAAI,CAAU;IAGd,YAAY,CAAU;CAC7B,CAAA;AAfY,oCAAY;AAEjB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAI,EAAE,CAAC;;0CAClB;AAGjB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,yBAAQ,EAAE,CAAC;;8CACd;AAGzB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;4CACtD;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;;0CAClB;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDACM;uBAdjB,YAAY;IAXxB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,CAAC;IACjE,IAAA,iBAAK,EAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;IAC/F,IAAA,iBAAK,EAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAChC,IAAA,eAAG,EAAe,MAAM,EAAE,KAAK,WAAW,IAAI;QAE9C,MAAM,6CAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAiB,EAAE;YAC3D,IAAI,EAAE,IAAI,CAAC,IAAI;SACf,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;GACW,YAAY,CAexB","sourcesContent":["import { Index, modelOptions, pre, prop, Ref } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { Status } from '../../../utilities/enum';\nimport { Category } from './category.model';\nimport { Shop } from './shop.model';\nimport { ShopCategoryModel } from '.';\nimport { handlePreSaveForSorting } from '../utilities/sorting-order.hooks';\n\n@modelOptions({ schemaOptions: { collection: 'shopCategories' } })\n@Index({ shop: 1, category: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } })\n@Index({ shop: 1, deletedAt: 1 })\n@pre<ShopCategory>('save', async function (next) {\n\t// Set sortingOrder\n\tawait handlePreSaveForSorting.call(this, ShopCategoryModel, {\n\t\tshop: this.shop,\n\t});\n\n\tnext();\n})\nexport class ShopCategory extends TimeStamps {\n\t@prop({ required: true, ref: () => Shop })\n\tpublic shop!: Ref<Shop>;\n\n\t@prop({ required: true, ref: () => Category })\n\tpublic category!: Ref<Category>;\n\n\t@prop({ required: true, type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status!: Status;\n\n\t@prop({ type: String, maxlength: 250 })\n\tpublic note?: string;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n}\n"]}
|
|
@@ -20,7 +20,7 @@ const address_model_1 = require("./shared/address.model");
|
|
|
20
20
|
const work_hour_model_1 = require("./shared/work-hour.model");
|
|
21
21
|
const tag_model_1 = require("./tag.model");
|
|
22
22
|
const delivery_info_model_1 = require("./embedded/delivery-info.model");
|
|
23
|
-
const
|
|
23
|
+
const shop_hooks_1 = require("../utilities/shop.hooks");
|
|
24
24
|
const shop_search_fields_model_1 = require("./embedded/shop-search-fields.model");
|
|
25
25
|
let Shop = class Shop extends defaultClasses_1.TimeStamps {
|
|
26
26
|
shopId;
|
|
@@ -273,7 +273,7 @@ exports.Shop = Shop = __decorate([
|
|
|
273
273
|
(0, typegoose_1.index)({ parent: 1, status: 1, isVisibleToUser: 1 }, { partialFilterExpression: { deletedAt: null } }),
|
|
274
274
|
(0, typegoose_1.index)({ status: 1, createdAt: -1 }, { partialFilterExpression: { deletedAt: null } }),
|
|
275
275
|
(0, typegoose_1.pre)('save', async function (next) {
|
|
276
|
-
await
|
|
276
|
+
await shop_hooks_1.handleShopPreSave.call(this);
|
|
277
277
|
next();
|
|
278
278
|
})
|
|
279
279
|
], Shop);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop.model.js","sourceRoot":"/","sources":["libraries/mongo/models/shop.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { modelOptions, prop, Ref, Severity, index, pre } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { ItemType, ShopOnlineStatus, Status } from '../../../utilities/enum';\nimport { Brand } from './brand.model';\nimport { ShopDocument } from './embedded/shop-document.model';\nimport { Parent } from './parent.model';\nimport { Address } from './shared/address.model';\nimport { StartEndTime, WorkHourSetting } from './shared/work-hour.model';\nimport { Tag } from './tag.model';\nimport { DeliveryInfo } from './embedded/delivery-info.model';\nimport { handleShopPreSave } from '../utilities/shopHooks';\nimport { ShopSearchFields } from './embedded/shop-search-fields.model';\n\n@modelOptions({\n\tschemaOptions: { collection: 'shops' },\n\toptions: { allowMixed: Severity.ALLOW },\n})\n@index({ name: 1, itemType: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } })\n@index({ parent: 1, status: 1, isVisibleToUser: 1 }, { partialFilterExpression: { deletedAt: null } })\n@index({ status: 1, createdAt: -1 }, { partialFilterExpression: { deletedAt: null } })\n@pre<Shop>('save', async function (next) {\n\tawait handleShopPreSave.call(this);\n\n\tnext();\n})\nexport class Shop extends TimeStamps {\n\t@prop({ type: String, unique: true, index: true })\n\tpublic shopId: string;\n\n\t@prop({ required: true, type: String })\n\tpublic name!: string;\n\n\t@prop({ required: true, type: String })\n\tpublic ownerName!: string;\n\n\t@prop({ required: true, type: String })\n\tpublic email!: string;\n\n\t@prop({ required: true, ref: () => Parent })\n\tpublic parent: Ref<Parent>;\n\n\t@prop({ required: true, type: String, enum: ItemType })\n\tpublic itemType!: ItemType;\n\n\t@prop({ required: true, type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status!: Status;\n\n\t@prop({ required: true, ref: () => Brand })\n\tpublic brand: Ref<Brand>;\n\n\t@prop({ type: Number, default: 1, min: 1, max: 4 })\n\tpublic priceRange?: number;\n\n\t@prop({ required: true, type: String })\n\tpublic phoneNumber!: string;\n\n\t@prop({ required: true, type: String })\n\tpublic userPhoneNumber!: string;\n\n\t@prop({ type: () => [String], default: [] })\n\tpublic additionalPhoneNumbers?: string[];\n\n\t@prop({type: String, maxlength: 100})\n\tpublic bobContactName?: string;\n\n\t@prop({type: String, maxlength: 15})\n\tpublic bobContactPhoneNumber?: string;\n\n\t@prop({ required: true, type: Address })\n\tpublic address!: Address;\n\n\t@prop({ type: String })\n\tpublic logo?: string;\n\n\t@prop({ type: String })\n\tpublic banner?: string;\n\n\t@prop({ type: ShopDocument })\n\tpublic document?: ShopDocument;\n\n\t@prop({\n\t\ttype: String,\n\t\tenum: ShopOnlineStatus,\n\t\tdefault: ShopOnlineStatus.OFFLINE,\n\t})\n\tpublic onlineStatus?: ShopOnlineStatus;\n\n\t@prop({ type: WorkHourSetting })\n\tpublic workHourSetting?: WorkHourSetting;\n\n\t@prop({ type: () => [String], default: [] })\n\tpublic dietaries?: string[];\n\n\t@prop({ ref: () => Tag, default: [] })\n\tpublic tags?: Ref<Tag>[];\n\n\t@prop({ required: true, type: Boolean })\n\tpublic isBeirutAuthentic!: boolean;\n\n\t@prop({ required: true, type: Boolean })\n\tpublic isVisibleToUser!: boolean;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isShopDelivery?: boolean;\n\n\t@prop({ type: Number })\n\tpublic deliveryFee?: number;\n\n\t@prop({ type: Number, default: 0 })\n\tpublic minimumOrderAmount?: number;\n\n\t@prop({ type: Number, default: Infinity })\n\tpublic orderCapacity?: number;\n\n\t@prop({ type: () => [StartEndTime], default: [] })\n\tpublic shopActiveTimingsOfCurrentDate?: StartEndTime[];\n\n\t@prop({ type: DeliveryInfo })\n\tpublic deliveryInfo?: DeliveryInfo;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n\n\t// Setting\n\t@prop({ type: Boolean, default: false })\n\tpublic allowSpecialInstructions?: boolean;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isRiderNoteVisible?: boolean;\n\n\t@prop({ type: String })\n\tpublic riderNote?: string;\n\n\t@prop({ type: Number, default: 10 })\n\tpublic defaultPreparationTime?: number;\n\n\t@prop({ type: Number, default: null })\n\texchangeRate?: number;\n\n\t@prop({ required: false, type: () => Boolean })\n\tpublic isFavouriteCategoryVisible?: boolean;\n\n\t@prop({ required: false, type: () => String })\n\tpublic favouriteCategoryTitle?: string;\n\n\t@prop({ required: false, type: () => Boolean })\n\tpublic isBestSellerCategoryVisible?: boolean;\n\n\t@prop({ required: false, type: () => String })\n\tpublic bestSellerCategoryTitle?: string;\n\n\t@prop({ required: true, type: () => Boolean })\n\tpublic orderCapacityEnabled!: boolean;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic avgRating?: number;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic ordersCount?: number;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic customersCount?: number;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic vat_reg_number?: number;\n\n\t@prop({ type: () => [String], default: [] })\n\tpublic fcmTokens?: string[];\n\n\t@prop({ type: ShopSearchFields })\n\tpublic searchFields?: ShopSearchFields\n}\n"]}
|
|
1
|
+
{"version":3,"file":"shop.model.js","sourceRoot":"/","sources":["libraries/mongo/models/shop.model.ts"],"names":[],"mappings":"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","sourcesContent":["import { modelOptions, prop, Ref, Severity, index, pre } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { ItemType, ShopOnlineStatus, Status } from '../../../utilities/enum';\nimport { Brand } from './brand.model';\nimport { ShopDocument } from './embedded/shop-document.model';\nimport { Parent } from './parent.model';\nimport { Address } from './shared/address.model';\nimport { StartEndTime, WorkHourSetting } from './shared/work-hour.model';\nimport { Tag } from './tag.model';\nimport { DeliveryInfo } from './embedded/delivery-info.model';\nimport { handleShopPreSave } from '../utilities/shop.hooks';\nimport { ShopSearchFields } from './embedded/shop-search-fields.model';\n\n@modelOptions({\n\tschemaOptions: { collection: 'shops' },\n\toptions: { allowMixed: Severity.ALLOW },\n})\n@index({ name: 1, itemType: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } })\n@index({ parent: 1, status: 1, isVisibleToUser: 1 }, { partialFilterExpression: { deletedAt: null } })\n@index({ status: 1, createdAt: -1 }, { partialFilterExpression: { deletedAt: null } })\n@pre<Shop>('save', async function (next) {\n\tawait handleShopPreSave.call(this);\n\n\tnext();\n})\nexport class Shop extends TimeStamps {\n\t@prop({ type: String, unique: true, index: true })\n\tpublic shopId: string;\n\n\t@prop({ required: true, type: String })\n\tpublic name!: string;\n\n\t@prop({ required: true, type: String })\n\tpublic ownerName!: string;\n\n\t@prop({ required: true, type: String })\n\tpublic email!: string;\n\n\t@prop({ required: true, ref: () => Parent })\n\tpublic parent: Ref<Parent>;\n\n\t@prop({ required: true, type: String, enum: ItemType })\n\tpublic itemType!: ItemType;\n\n\t@prop({ required: true, type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status!: Status;\n\n\t@prop({ required: true, ref: () => Brand })\n\tpublic brand: Ref<Brand>;\n\n\t@prop({ type: Number, default: 1, min: 1, max: 4 })\n\tpublic priceRange?: number;\n\n\t@prop({ required: true, type: String })\n\tpublic phoneNumber!: string;\n\n\t@prop({ required: true, type: String })\n\tpublic userPhoneNumber!: string;\n\n\t@prop({ type: () => [String], default: [] })\n\tpublic additionalPhoneNumbers?: string[];\n\n\t@prop({type: String, maxlength: 100})\n\tpublic bobContactName?: string;\n\n\t@prop({type: String, maxlength: 15})\n\tpublic bobContactPhoneNumber?: string;\n\n\t@prop({ required: true, type: Address })\n\tpublic address!: Address;\n\n\t@prop({ type: String })\n\tpublic logo?: string;\n\n\t@prop({ type: String })\n\tpublic banner?: string;\n\n\t@prop({ type: ShopDocument })\n\tpublic document?: ShopDocument;\n\n\t@prop({\n\t\ttype: String,\n\t\tenum: ShopOnlineStatus,\n\t\tdefault: ShopOnlineStatus.OFFLINE,\n\t})\n\tpublic onlineStatus?: ShopOnlineStatus;\n\n\t@prop({ type: WorkHourSetting })\n\tpublic workHourSetting?: WorkHourSetting;\n\n\t@prop({ type: () => [String], default: [] })\n\tpublic dietaries?: string[];\n\n\t@prop({ ref: () => Tag, default: [] })\n\tpublic tags?: Ref<Tag>[];\n\n\t@prop({ required: true, type: Boolean })\n\tpublic isBeirutAuthentic!: boolean;\n\n\t@prop({ required: true, type: Boolean })\n\tpublic isVisibleToUser!: boolean;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isShopDelivery?: boolean;\n\n\t@prop({ type: Number })\n\tpublic deliveryFee?: number;\n\n\t@prop({ type: Number, default: 0 })\n\tpublic minimumOrderAmount?: number;\n\n\t@prop({ type: Number, default: Infinity })\n\tpublic orderCapacity?: number;\n\n\t@prop({ type: () => [StartEndTime], default: [] })\n\tpublic shopActiveTimingsOfCurrentDate?: StartEndTime[];\n\n\t@prop({ type: DeliveryInfo })\n\tpublic deliveryInfo?: DeliveryInfo;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n\n\t// Setting\n\t@prop({ type: Boolean, default: false })\n\tpublic allowSpecialInstructions?: boolean;\n\n\t@prop({ type: Boolean, default: false })\n\tpublic isRiderNoteVisible?: boolean;\n\n\t@prop({ type: String })\n\tpublic riderNote?: string;\n\n\t@prop({ type: Number, default: 10 })\n\tpublic defaultPreparationTime?: number;\n\n\t@prop({ type: Number, default: null })\n\texchangeRate?: number;\n\n\t@prop({ required: false, type: () => Boolean })\n\tpublic isFavouriteCategoryVisible?: boolean;\n\n\t@prop({ required: false, type: () => String })\n\tpublic favouriteCategoryTitle?: string;\n\n\t@prop({ required: false, type: () => Boolean })\n\tpublic isBestSellerCategoryVisible?: boolean;\n\n\t@prop({ required: false, type: () => String })\n\tpublic bestSellerCategoryTitle?: string;\n\n\t@prop({ required: true, type: () => Boolean })\n\tpublic orderCapacityEnabled!: boolean;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic avgRating?: number;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic ordersCount?: number;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic customersCount?: number;\n\n\t@prop({ default: 0, type: () => Number })\n\tpublic vat_reg_number?: number;\n\n\t@prop({ type: () => [String], default: [] })\n\tpublic fcmTokens?: string[];\n\n\t@prop({ type: ShopSearchFields })\n\tpublic searchFields?: ShopSearchFields\n}\n"]}
|
|
@@ -15,7 +15,7 @@ const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
|
|
|
15
15
|
const enum_1 = require("../../../utilities/enum");
|
|
16
16
|
const support_reason_info_model_1 = require("./embedded/support-reason-info.model");
|
|
17
17
|
const _1 = require(".");
|
|
18
|
-
const
|
|
18
|
+
const sorting_order_hooks_1 = require("../utilities/sorting-order.hooks");
|
|
19
19
|
let SupportReason = class SupportReason extends defaultClasses_1.TimeStamps {
|
|
20
20
|
reason;
|
|
21
21
|
reasonType;
|
|
@@ -42,13 +42,13 @@ __decorate([
|
|
|
42
42
|
exports.SupportReason = SupportReason = __decorate([
|
|
43
43
|
(0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'supportReasons' } }),
|
|
44
44
|
(0, typegoose_1.pre)('save', async function (next) {
|
|
45
|
-
await
|
|
45
|
+
await sorting_order_hooks_1.handlePreSaveForSortingWithStatus.call(this, _1.SupportReasonModel, {
|
|
46
46
|
reasonType: this.reasonType,
|
|
47
47
|
});
|
|
48
48
|
next();
|
|
49
49
|
}),
|
|
50
50
|
(0, typegoose_1.pre)('findOneAndUpdate', async function (next) {
|
|
51
|
-
await
|
|
51
|
+
await sorting_order_hooks_1.handlePreUpdateForSortingWithStatus.call(this, _1.SupportReasonModel, ['reasonType']);
|
|
52
52
|
next();
|
|
53
53
|
}),
|
|
54
54
|
(0, typegoose_1.index)({ reasonType: 1, "reason.question": 1 }, { unique: true })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support-reason.model.js","sourceRoot":"/","sources":["libraries/mongo/models/support-reason.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,4EAAqE;AACrE,kDAAwE;AACxE,oFAAyE;AAEzE,wBAAuC;AACvC,
|
|
1
|
+
{"version":3,"file":"support-reason.model.js","sourceRoot":"/","sources":["libraries/mongo/models/support-reason.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,4EAAqE;AACrE,kDAAwE;AACxE,oFAAyE;AAEzE,wBAAuC;AACvC,0EAG0C;AAiBnC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,2BAAU;IAErC,MAAM,CAAoB;IAG1B,UAAU,CAAwB;IAGlC,MAAM,CAAS;IAGf,YAAY,CAAU;CAC7B,CAAA;AAZY,sCAAa;AAElB;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,6CAAiB,EAAE,CAAC;8BACzC,6CAAiB;6CAAC;AAG1B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAAqB,EAAE,CAAC;;iDAC3B;AAGlC;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,CAAC;;6CAC/B;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDACM;wBAXjB,aAAa;IAfzB,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,CAAC;IACjE,IAAA,eAAG,EAAgB,MAAM,EAAE,KAAK,WAAW,IAAI;QAC/C,MAAM,uDAAiC,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAkB,EAAE;YACtE,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;IACD,IAAA,eAAG,EAAgB,kBAAkB,EAAE,KAAK,WAA4C,IAAI;QAC5F,MAAM,yDAAmC,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAkB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QAEzF,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;IAED,IAAA,iBAAK,EAAC,EAAE,UAAU,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;GACpD,aAAa,CAYzB","sourcesContent":["import { index, modelOptions, pre, prop } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { Status, SupportReasonTypeEnum } from '../../../utilities/enum';\nimport { SupportReasonInfo } from './embedded/support-reason-info.model';\nimport { Query } from 'mongoose';\nimport { SupportReasonModel } from '.';\nimport {\n\thandlePreSaveForSortingWithStatus,\n\thandlePreUpdateForSortingWithStatus,\n} from '../utilities/sorting-order.hooks';\n\n@modelOptions({ schemaOptions: { collection: 'supportReasons' } })\n@pre<SupportReason>('save', async function (next) {\n\tawait handlePreSaveForSortingWithStatus.call(this, SupportReasonModel, {\n\t\treasonType: this.reasonType,\n\t});\n\n\tnext();\n})\n@pre<SupportReason>('findOneAndUpdate', async function (this: Query<any, SupportReason>, next) {\n\tawait handlePreUpdateForSortingWithStatus.call(this, SupportReasonModel, ['reasonType']);\n\n\tnext();\n})\n\n@index({ reasonType: 1, \"reason.question\": 1 }, { unique: true })\nexport class SupportReason extends TimeStamps {\n\t@prop({ required: true, type: () => SupportReasonInfo })\n\tpublic reason: SupportReasonInfo;\n\n\t@prop({ required: true, type: String, enum: SupportReasonTypeEnum })\n\tpublic reasonType: SupportReasonTypeEnum;\n\n\t@prop({ required: true, type: String, enum: Status })\n\tpublic status: Status;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n}\n"]}
|
|
@@ -13,7 +13,7 @@ exports.Tag = void 0;
|
|
|
13
13
|
const typegoose_1 = require("@typegoose/typegoose");
|
|
14
14
|
const enum_1 = require("../../../utilities/enum");
|
|
15
15
|
const _1 = require(".");
|
|
16
|
-
const
|
|
16
|
+
const sorting_order_hooks_1 = require("../utilities/sorting-order.hooks");
|
|
17
17
|
let Tag = class Tag {
|
|
18
18
|
name;
|
|
19
19
|
itemType;
|
|
@@ -52,11 +52,11 @@ exports.Tag = Tag = __decorate([
|
|
|
52
52
|
(0, typegoose_1.Index)({ name: 1, itemType: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } }),
|
|
53
53
|
(0, typegoose_1.Index)({ itemType: 1, deletedAt: 1 }),
|
|
54
54
|
(0, typegoose_1.pre)('save', async function (next) {
|
|
55
|
-
await
|
|
55
|
+
await sorting_order_hooks_1.handlePreSaveForSortingWithStatus.call(this, _1.TagModel, { itemType: this.itemType });
|
|
56
56
|
next();
|
|
57
57
|
}),
|
|
58
58
|
(0, typegoose_1.pre)('findOneAndUpdate', async function (next) {
|
|
59
|
-
await
|
|
59
|
+
await sorting_order_hooks_1.handlePreUpdateForSortingWithStatus.call(this, _1.TagModel, ['itemType']);
|
|
60
60
|
next();
|
|
61
61
|
})
|
|
62
62
|
], Tag);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.model.js","sourceRoot":"/","sources":["libraries/mongo/models/tag.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,kDAA2D;AAC3D,wBAA6B;AAE7B,
|
|
1
|
+
{"version":3,"file":"tag.model.js","sourceRoot":"/","sources":["libraries/mongo/models/tag.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,kDAA2D;AAC3D,wBAA6B;AAE7B,0EAG0C;AAenC,IAAM,GAAG,GAAT,MAAM,GAAG;IAER,IAAI,CAAU;IAGd,QAAQ,CAAY;IAGpB,KAAK,CAAU;IAGf,MAAM,CAAU;IAGhB,SAAS,CAAW;IAGpB,YAAY,CAAU;CAC7B,CAAA;AAlBY,kBAAG;AAER;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;;iCAC7C;AAGd;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAQ,EAAE,CAAC;;qCAC5B;AAGpB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kCACD;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;mCACtC;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;sCACZ;AAGpB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;yCACM;cAjBjB,GAAG;IAbf,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IACvD,IAAA,iBAAK,EAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;IAC/F,IAAA,iBAAK,EAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACpC,IAAA,eAAG,EAAM,MAAM,EAAE,KAAK,WAAW,IAAI;QACrC,MAAM,uDAAiC,CAAC,IAAI,CAAC,IAAI,EAAE,WAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1F,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;IACD,IAAA,eAAG,EAAM,kBAAkB,EAAE,KAAK,WAAkC,IAAI;QACxE,MAAM,yDAAmC,CAAC,IAAI,CAAC,IAAI,EAAE,WAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAE7E,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;GACW,GAAG,CAkBf","sourcesContent":["import { Index, modelOptions, pre, prop } from '@typegoose/typegoose';\nimport { ItemType, Status } from '../../../utilities/enum';\nimport { TagModel } from '.';\nimport { Query } from 'mongoose';\nimport {\n\thandlePreSaveForSortingWithStatus,\n\thandlePreUpdateForSortingWithStatus,\n} from '../utilities/sorting-order.hooks';\n\n@modelOptions({ schemaOptions: { collection: 'tags' } })\n@Index({ name: 1, itemType: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } })\n@Index({ itemType: 1, deletedAt: 1 })\n@pre<Tag>('save', async function (next) {\n\tawait handlePreSaveForSortingWithStatus.call(this, TagModel, { itemType: this.itemType });\n\n\tnext();\n})\n@pre<Tag>('findOneAndUpdate', async function (this: Query<any, Tag>, next) {\n\tawait handlePreUpdateForSortingWithStatus.call(this, TagModel, ['itemType']);\n\n\tnext();\n})\nexport class Tag {\n\t@prop({ required: true, type: String, trim: true, maxlength: 30 })\n\tpublic name!: string;\n\n\t@prop({ required: true, type: String, enum: ItemType })\n\tpublic itemType!: ItemType;\n\n\t@prop({ type: String })\n\tpublic image?: string;\n\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status?: Status;\n\n\t@prop({ type: Boolean, default: true })\n\tpublic isVisible?: boolean;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n}\n"]}
|
|
@@ -14,7 +14,7 @@ const typegoose_1 = require("@typegoose/typegoose");
|
|
|
14
14
|
const defaultClasses_1 = require("@typegoose/typegoose/lib/defaultClasses");
|
|
15
15
|
const enum_1 = require("../../../utilities/enum");
|
|
16
16
|
const _1 = require(".");
|
|
17
|
-
const
|
|
17
|
+
const sorting_order_hooks_1 = require("../utilities/sorting-order.hooks");
|
|
18
18
|
let UserAppSectionSetting = class UserAppSectionSetting extends defaultClasses_1.TimeStamps {
|
|
19
19
|
itemType;
|
|
20
20
|
section;
|
|
@@ -47,11 +47,11 @@ exports.UserAppSectionSetting = UserAppSectionSetting = __decorate([
|
|
|
47
47
|
(0, typegoose_1.modelOptions)({ schemaOptions: { collection: 'userAppSectionSetting' } }),
|
|
48
48
|
(0, typegoose_1.Index)({ itemType: 1, section: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } }),
|
|
49
49
|
(0, typegoose_1.pre)('save', async function (next) {
|
|
50
|
-
await
|
|
50
|
+
await sorting_order_hooks_1.handlePreSaveForSortingWithStatus.call(this, _1.UserAppSectionSettingModel, { itemType: this.itemType });
|
|
51
51
|
next();
|
|
52
52
|
}),
|
|
53
53
|
(0, typegoose_1.pre)('findOneAndUpdate', async function (next) {
|
|
54
|
-
await
|
|
54
|
+
await sorting_order_hooks_1.handlePreUpdateForSortingWithStatus.call(this, _1.UserAppSectionSettingModel, ['itemType']);
|
|
55
55
|
next();
|
|
56
56
|
})
|
|
57
57
|
], UserAppSectionSetting);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-app-section-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/user-app-section-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,4EAAqE;AACrE,kDAA6F;AAC7F,wBAA+C;AAE/C,
|
|
1
|
+
{"version":3,"file":"user-app-section-setting.model.js","sourceRoot":"/","sources":["libraries/mongo/models/user-app-section-setting.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsE;AACtE,4EAAqE;AACrE,kDAA6F;AAC7F,wBAA+C;AAE/C,0EAG0C;AAiBnC,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,2BAAU;IAE7C,QAAQ,CAA0B;IAGlC,OAAO,CAAsB;IAG7B,KAAK,CAAU;IAGf,MAAM,CAAU;IAGhB,YAAY,CAAU;CAC7B,CAAA;AAfY,sDAAqB;AAE1B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAAsB,EAAE,CAAC;;uDAC5B;AAGlC;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAkB,EAAE,CAAC;;sDAC7B;AAG7B;IADN,IAAA,gBAAI,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;oDACjB;AAGf;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAM,EAAE,OAAO,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;;qDACtC;AAGhB;IADN,IAAA,gBAAI,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2DACM;gCAdjB,qBAAqB;IAfjC,IAAA,wBAAY,EAAC,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE,EAAE,CAAC;IACxE,IAAA,iBAAK,EAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;IAClG,IAAA,eAAG,EAAwB,MAAM,EAAE,KAAK,WAAW,IAAI;QACvD,MAAM,uDAAiC,CAAC,IAAI,CAAC,IAAI,EAAE,6BAA0B,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5G,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;IACD,IAAA,eAAG,EACH,kBAAkB,EAClB,KAAK,WAAoD,IAAI;QAC5D,MAAM,yDAAmC,CAAC,IAAI,CAAC,IAAI,EAAE,6BAA0B,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAE/F,IAAI,EAAE,CAAC;IACR,CAAC,CACD;GACY,qBAAqB,CAejC","sourcesContent":["import { Index, modelOptions, pre, prop } from '@typegoose/typegoose';\nimport { TimeStamps } from '@typegoose/typegoose/lib/defaultClasses';\nimport { Status, UserAppSectionItemType, UserAppSectionType } from '../../../utilities/enum';\nimport { UserAppSectionSettingModel } from '.';\nimport { Query } from 'mongoose';\nimport {\n\thandlePreSaveForSortingWithStatus,\n\thandlePreUpdateForSortingWithStatus,\n} from '../utilities/sorting-order.hooks';\n\n@modelOptions({ schemaOptions: { collection: 'userAppSectionSetting' } })\n@Index({ itemType: 1, section: 1 }, { unique: true, partialFilterExpression: { deletedAt: null } })\n@pre<UserAppSectionSetting>('save', async function (next) {\n\tawait handlePreSaveForSortingWithStatus.call(this, UserAppSectionSettingModel, { itemType: this.itemType });\n\n\tnext();\n})\n@pre<UserAppSectionSetting>(\n\t'findOneAndUpdate',\n\tasync function (this: Query<any, UserAppSectionSetting>, next) {\n\t\tawait handlePreUpdateForSortingWithStatus.call(this, UserAppSectionSettingModel, ['itemType']);\n\n\t\tnext();\n\t}\n)\nexport class UserAppSectionSetting extends TimeStamps {\n\t@prop({ required: true, type: String, enum: UserAppSectionItemType })\n\tpublic itemType!: UserAppSectionItemType;\n\n\t@prop({ required: true, type: String, enum: UserAppSectionType })\n\tpublic section!: UserAppSectionType;\n\n\t@prop({ required: true, type: String })\n\tpublic alias!: string;\n\n\t@prop({ type: String, enum: Status, default: Status.ACTIVE })\n\tpublic status?: Status;\n\n\t@prop({ type: Number })\n\tpublic sortingOrder?: number;\n}\n"]}
|
|
@@ -31,7 +31,7 @@ export declare class User extends TimeStamps {
|
|
|
31
31
|
isPhoneVerified?: boolean;
|
|
32
32
|
onlineStatus?: OnlineStatus;
|
|
33
33
|
fcmTokens?: string[];
|
|
34
|
-
static updateWallet(this: ReturnModelType<typeof User>, userId: string, amount: number): Promise<(import("mongoose").Document<unknown, import("@typegoose/typegoose/lib/types").BeAnObject, User, import("@typegoose/typegoose/lib/types").BeAnyObject
|
|
34
|
+
static updateWallet(this: ReturnModelType<typeof User>, userId: string, amount: number): Promise<(import("mongoose").Document<unknown, import("@typegoose/typegoose/lib/types").BeAnObject, User, import("@typegoose/typegoose/lib/types").BeAnyObject> & Omit<User & {
|
|
35
35
|
_id: import("mongoose").Types.ObjectId;
|
|
36
36
|
} & {
|
|
37
37
|
__v: number;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeFieldPlugin = normalizeFieldPlugin;
|
|
4
|
+
const normalize_1 = require("../../../utilities/normalize");
|
|
5
|
+
function normalizeFieldPlugin(schema, options) {
|
|
6
|
+
const { field } = options;
|
|
7
|
+
const applyNormalization = (update) => {
|
|
8
|
+
if (!update)
|
|
9
|
+
return;
|
|
10
|
+
if (update[field])
|
|
11
|
+
update[`${field}Normalized`] = (0, normalize_1.normalizeName)(update[field]);
|
|
12
|
+
if (update.$set?.[field])
|
|
13
|
+
update.$set[`${field}Normalized`] = (0, normalize_1.normalizeName)(update.$set[field]);
|
|
14
|
+
if (update.$setOnInsert?.[field])
|
|
15
|
+
update.$setOnInsert[`${field}Normalized`] = (0, normalize_1.normalizeName)(update.$setOnInsert[field]);
|
|
16
|
+
};
|
|
17
|
+
schema.pre('save', function (next) {
|
|
18
|
+
if (this[field]) {
|
|
19
|
+
this[`${field}Normalized`] = (0, normalize_1.normalizeName)(this[field]);
|
|
20
|
+
}
|
|
21
|
+
next();
|
|
22
|
+
});
|
|
23
|
+
const updateHooks = ['updateOne', 'updateMany', 'findOneAndUpdate', 'findByIdAndUpdate'];
|
|
24
|
+
updateHooks.forEach(hook => {
|
|
25
|
+
schema.pre(hook, function (next) {
|
|
26
|
+
const update = this.getUpdate();
|
|
27
|
+
applyNormalization(update);
|
|
28
|
+
next();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
schema.pre('insertMany', function (next, docs) {
|
|
32
|
+
if (Array.isArray(docs)) {
|
|
33
|
+
for (const doc of docs) {
|
|
34
|
+
if (doc[field]) {
|
|
35
|
+
doc[`${field}Normalized`] = (0, normalize_1.normalizeName)(doc[field]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
next();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=normalize-field.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-field.plugin.js","sourceRoot":"/","sources":["libraries/mongo/plugins/normalize-field.plugin.ts"],"names":[],"mappings":";;AAmBA,oDAwDC;AA3ED,4DAA6D;AAmB7D,SAAgB,oBAAoB,CAAC,MAAc,EAAE,OAA0B;IAC9E,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAM1B,MAAM,kBAAkB,GAAG,CAAC,MAAW,EAAE,EAAE;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO;QAGpB,IAAI,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAA,yBAAa,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAG/E,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAA,yBAAa,EAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAGhG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAA,yBAAa,EAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,CAAC,CAAC;IAKF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,UAAgD,IAAI;QACtE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAA,yBAAa,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;IAKH,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,CAAU,CAAC;IAClG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC1B,MAAM,CAAC,GAAG,CAAC,IAAW,EAAE,UAAiC,IAA2B;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,EAAE,CAAC;QACR,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAKH,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,IAA2B,EAAE,IAAW;QAC1E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChB,GAAG,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAA,yBAAa,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvD,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { normalizeName } from '../../../utilities/normalize';\nimport { Schema, Document, Query } from 'mongoose';\n\n/**\n * normalizeFieldPlugin\n * --------------------\n * A Mongoose/Typegoose schema plugin to automatically normalize a specified string field\n * (e.g., convert to lowercase, remove diacritics, etc.) for all types of document operations.\n *\n * This plugin automatically sets `${field}Normalized` whenever the original field is modified\n * during:\n * - save() (new document or document.save())\n * - insertMany() (bulk inserts)\n * - update operations: updateOne, updateMany, findOneAndUpdate, findByIdAndUpdate\n *\n * @param schema - The Mongoose schema to attach the plugin to\n * @param options - Options object with:\n * - field: string; the field name to normalize\n */\nexport function normalizeFieldPlugin(schema: Schema, options: { field: string }) {\n\tconst { field } = options;\n\n\t/**\n\t * Helper function to normalize a field in an update object\n\t * @param update - Mongoose update object\n\t */\n\tconst applyNormalization = (update: any) => {\n\t\tif (!update) return;\n\n\t\t// Direct field update (e.g., update.name)\n\t\tif (update[field]) update[`${field}Normalized`] = normalizeName(update[field]);\n\n\t\t// $set update (e.g., update.$set.name)\n\t\tif (update.$set?.[field]) update.$set[`${field}Normalized`] = normalizeName(update.$set[field]);\n\n\t\t// $setOnInsert for upserts\n\t\tif (update.$setOnInsert?.[field])\n\t\t\tupdate.$setOnInsert[`${field}Normalized`] = normalizeName(update.$setOnInsert[field]);\n\t};\n\n\t// -------------------------------\n\t// Save hook: runs before save() for single documents\n\t// -------------------------------\n\tschema.pre('save', function (this: Document & Record<string, any>, next) {\n\t\tif (this[field]) {\n\t\t\tthis[`${field}Normalized`] = normalizeName(this[field]);\n\t\t}\n\t\tnext();\n\t});\n\n\t// -------------------------------\n\t// Update hooks: run before updateOne, updateMany, findOneAndUpdate, findByIdAndUpdate\n\t// -------------------------------\n\tconst updateHooks = ['updateOne', 'updateMany', 'findOneAndUpdate', 'findByIdAndUpdate'] as const;\n\tupdateHooks.forEach(hook => {\n\t\tschema.pre(hook as any, function (this: Query<any, any>, next: (err?: Error) => void) {\n\t\t\tconst update = this.getUpdate();\n\t\t\tapplyNormalization(update);\n\t\t\tnext();\n\t\t});\n\t});\n\n\t// -------------------------------\n\t// InsertMany hook: runs before bulk inserts\n\t// -------------------------------\n\tschema.pre('insertMany', function (next: (err?: Error) => void, docs: any[]) {\n\t\tif (Array.isArray(docs)) {\n\t\t\tfor (const doc of docs) {\n\t\t\t\tif (doc[field]) {\n\t\t\t\t\tdoc[`${field}Normalized`] = normalizeName(doc[field]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tnext();\n\t});\n}\n"]}
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.handleShopPreSave = handleShopPreSave;
|
|
4
4
|
const enum_1 = require("../../../utilities/enum");
|
|
5
5
|
const models_1 = require("../models");
|
|
6
|
-
const
|
|
6
|
+
const sorting_order_hooks_1 = require("./sorting-order.hooks");
|
|
7
7
|
async function handleShopPreSave() {
|
|
8
|
-
await
|
|
8
|
+
await sorting_order_hooks_1.handlePreSaveForSorting.call(this, models_1.ShopModel, {
|
|
9
9
|
itemType: this.itemType,
|
|
10
10
|
});
|
|
11
11
|
if (typeof this.shopId === 'undefined') {
|
|
@@ -13,4 +13,4 @@ async function handleShopPreSave() {
|
|
|
13
13
|
this.shopId = counter.value.toString().padStart(5, '0');
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=shop.hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shop.hooks.js","sourceRoot":"/","sources":["libraries/mongo/utilities/shop.hooks.ts"],"names":[],"mappings":";;AAYA,8CAgBC;AA5BD,kDAAsD;AACtD,sCAAoD;AACpD,+DAAgE;AAUzD,KAAK,UAAU,iBAAiB;IAEtC,MAAM,6CAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAS,EAAE;QACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACvB,CAAC,CAAC;IAGH,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,qBAAY,CAAC,gBAAgB,CAClD,EAAE,WAAW,EAAE,kBAAW,CAAC,IAAI,EAAE,EACjC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EACtB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAC3B,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;AACF,CAAC","sourcesContent":["import { CounterType } from '../../../utilities/enum';\nimport { CounterModel, ShopModel } from '../models';\nimport { handlePreSaveForSorting } from './sorting-order.hooks';\n\ntype thisDoc = {\n\tshopId?: string;\n\titemType?: string;\n\tsortingOrder?: number;\n\tisNew?: boolean;\n\tisModified?: (field: string) => boolean;\n};\n\nexport async function handleShopPreSave<T extends thisDoc>(this: T): Promise<void> {\n\t// Set sortingOrder\n\tawait handlePreSaveForSorting.call(this, ShopModel, {\n\t\titemType: this.itemType,\n\t});\n\n\t// Set shopId\n\tif (typeof this.shopId === 'undefined') {\n\t\tconst counter = await CounterModel.findOneAndUpdate(\n\t\t\t{ counterType: CounterType.shop },\n\t\t\t{ $inc: { value: 1 } },\n\t\t\t{ new: true, upsert: true }\n\t\t);\n\n\t\tthis.shopId = counter.value.toString().padStart(5, '0');\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorting-order.hooks.js","sourceRoot":"/","sources":["libraries/mongo/utilities/sorting-order.hooks.ts"],"names":[],"mappings":";;AAYA,kDAiBC;AAED,0DASC;AAED,8EAqBC;AAED,kFA0BC;AA1FD,kDAAiD;AAW1C,KAAK,UAAU,mBAAmB,CAAI,KAAU,EAAE,KAA0B;IAClF,MAAM,KAAK,GAAG;QACb,GAAG,KAAK;QACR,SAAS,EAAE,IAAI;KACf,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC;QACrC,EAAE,MAAM,EAAE,KAAK,EAAE;QACjB;YACC,MAAM,EAAE;gBACP,GAAG,EAAE,IAAI;gBACT,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;aAC1C;SACD;KACD,CAAC,CAAC,IAAI,EAAE,CAAkC,CAAC;IAE5C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAE5C,KAAU,EACV,QAA6B,EAAE;IAG/B,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;QAC5D,IAAI,CAAC,YAAY,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,iCAAiC,CAEtD,KAAU,EACV,KAA0B;IAE1B,MAAM,KAAK,GAAwB;QAClC,GAAG,KAAK;QACR,MAAM,EAAE,aAAM,CAAC,MAAM;KACrB,CAAC;IAGF,MAAM,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAGvD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,aAAM,CAAC,MAAM,EAAE,CAAC;QACnF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAM,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC,YAAY,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,mCAAmC,CAExD,KAAU,EACV,WAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAS,CAAC;IAEvC,IAAI,MAAM,EAAE,MAAM,KAAK,aAAM,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEzD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,aAAM,CAAC,MAAM,EAAE,CAAC;YAE/C,MAAM,KAAK,GAAwB,EAAE,MAAM,EAAE,aAAM,CAAC,MAAM,EAAE,CAAC;YAC7D,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBACjC,IAAK,MAAc,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC1C,KAAK,CAAC,KAAK,CAAC,GAAI,MAAc,CAAC,KAAK,CAAC,CAAC;gBACvC,CAAC;YACF,CAAC;YAGD,MAAM,CAAC,YAAY,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAG9D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["import { Query } from 'mongoose';\nimport { Status } from '../../../utilities/enum';\n\ntype SortableDoc = {\n\t_id?: any;\n\titemType?: string;\n\tstatus?: string;\n\tsortingOrder?: number;\n\tisNew?: boolean;\n\tisModified?: (field: string) => boolean;\n};\n\nexport async function getNextSortingOrder<T>(Model: any, match: Record<string, any>): Promise<number> {\n\tconst query = {\n\t\t...match,\n\t\tdeletedAt: null,\n\t};\n\n\tconst result = (await Model.aggregate([\n\t\t{ $match: query },\n\t\t{\n\t\t\t$group: {\n\t\t\t\t_id: null,\n\t\t\t\tmaxSortingOrder: { $max: '$sortingOrder' },\n\t\t\t},\n\t\t},\n\t]).exec()) as { maxSortingOrder: number }[];\n\n\treturn (result[0]?.maxSortingOrder ?? -1) + 1;\n}\n\nexport async function handlePreSaveForSorting<T extends SortableDoc>(\n\tthis: T,\n\tModel: any,\n\tmatch: Record<string, any> = {}\n): Promise<void> {\n\t// Case 1: New doc or no sortingOrder\n\tif (this.isNew || typeof this.sortingOrder === 'undefined') {\n\t\tthis.sortingOrder = await getNextSortingOrder(Model, match);\n\t}\n}\n\nexport async function handlePreSaveForSortingWithStatus<T extends SortableDoc>(\n\tthis: T,\n\tModel: any,\n\tmatch: Record<string, any>\n): Promise<void> {\n\tconst query: Record<string, any> = {\n\t\t...match,\n\t\tstatus: Status.ACTIVE,\n\t};\n\n\t// Case 1: New doc or no sortingOrder\n\tawait handlePreSaveForSorting.call(this, Model, query);\n\n\t// Case 2: Status change INACTIVE → ACTIVE\n\tif (this.isModified && this.isModified('status') && this.status === Status.ACTIVE) {\n\t\tconst original = await Model.findById(this._id);\n\n\t\tif (original && original.status !== Status.ACTIVE) {\n\t\t\tthis.sortingOrder = await getNextSortingOrder(Model, query);\n\t\t}\n\t}\n}\n\nexport async function handlePreUpdateForSortingWithStatus<T>(\n\tthis: Query<any, T>,\n\tModel: any,\n\tmatchFields: string[]\n): Promise<void> {\n\tconst update = this.getUpdate() as any;\n\n\tif (update?.status === Status.ACTIVE) {\n\t\tconst result = await this.model.findOne(this.getQuery());\n\n\t\tif (result && result.status !== Status.ACTIVE) {\n\t\t\t// Build dynamic $match object based on fields from the result\n\t\t\tconst match: Record<string, any> = { status: Status.ACTIVE };\n\t\t\tfor (const field of matchFields) {\n\t\t\t\tif ((result as any)[field] !== undefined) {\n\t\t\t\t\tmatch[field] = (result as any)[field];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compute next sortingOrder\n\t\t\tupdate.sortingOrder = await getNextSortingOrder(Model, match);\n\n\t\t\t// Inject into update\n\t\t\tthis.setUpdate(update);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unique-id.hooks.js","sourceRoot":"/","sources":["libraries/mongo/utilities/unique-id.hooks.ts"],"names":[],"mappings":";;AAiBA,4DAuBC;AAxCD,mCAAwC;AAiBjC,KAAK,UAAU,wBAAwB,CAE7C,KAAU,EACV,KAAa,EACb,MAAM,GAAG,CAAC;IAGV,IAAI,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO;IAGxB,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,gEAAgE,EAAE,MAAM,CAAC,CAAC;IAExG,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,IAAI,CAAC;IAGlB,OAAO,MAAM,EAAE,CAAC;QACf,QAAQ,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAoB,CAAC,CAAC,CAAC;IAC1E,CAAC;IAGD,IAAI,CAAC,GAAG,CAAC,KAAe,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { customAlphabet } from 'nanoid';\nimport { Document, FilterQuery } from 'mongoose';\n\n// Nanoid generator: 6-character alphanumeric\n// const nanoid = customAlphabet('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 6);\n\ninterface BaseDoc extends Document {\n\t[field: string]: any; // allow dynamic field access\n}\n\n/**\n * Pre-save hook handler to ensure a unique ID for a given field\n *\n * @param this Current document being saved\n * @param Model The Mongoose model\n * @param field The field that should have a unique ID\n */\nexport async function handlePreSaveForUniqueId<T extends BaseDoc>(\n\tthis: T,\n\tModel: any,\n\tfield: string,\n\tlength = 6\n): Promise<void> {\n\t// Skip if already has a value\n\tif (this[field]) return;\n\n\t// Prepare generator dynamically\n\tconst nanoid = customAlphabet('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', length);\n\n\tlet uniqueId: string | null = null;\n\tlet exists = true;\n\n\t// Keep generating until unique\n\twhile (exists) {\n\t\tuniqueId = nanoid();\n\t\texists = !!(await Model.exists({ [field]: uniqueId } as FilterQuery<T>));\n\t}\n\n\t// Assign the unique ID to the field\n\tthis.set(field as string, uniqueId);\n}\n"]}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import z, { ZodTypeAny } from 'zod';
|
|
2
2
|
import { SocketEventType } from '../../utilities/enum';
|
|
3
|
+
import { NotificationSocketEvent } from './events/notification.socket.event';
|
|
3
4
|
export declare abstract class BaseSocketEvent<SIn extends ZodTypeAny, SOut extends ZodTypeAny> {
|
|
4
5
|
protected readonly _eventType: SocketEventType;
|
|
5
6
|
readonly inputSchema: SIn;
|
|
6
7
|
readonly outputSchema: SOut;
|
|
7
8
|
protected readonly data: z.infer<SOut>;
|
|
8
|
-
getSubscriptionKey(): string;
|
|
9
9
|
static identifier(input: any): string;
|
|
10
|
+
notification?(): NotificationSocketEvent | null;
|
|
11
|
+
pushNotification?(): NotificationSocketEvent | null;
|
|
10
12
|
protected constructor(eventType: SocketEventType, schemas: {
|
|
11
13
|
input: SIn;
|
|
12
14
|
output: SOut;
|
|
13
15
|
}, data: z.infer<SOut>);
|
|
14
16
|
payload(): z.infer<SOut>;
|
|
15
17
|
eventType(): SocketEventType;
|
|
18
|
+
getSubscriptionKey(): string;
|
|
16
19
|
}
|
|
@@ -6,10 +6,6 @@ class BaseSocketEvent {
|
|
|
6
6
|
inputSchema;
|
|
7
7
|
outputSchema;
|
|
8
8
|
data;
|
|
9
|
-
getSubscriptionKey() {
|
|
10
|
-
const identifier = this.constructor.identifier(this.data);
|
|
11
|
-
return `${this._eventType}:${identifier}`;
|
|
12
|
-
}
|
|
13
9
|
static identifier(input) {
|
|
14
10
|
return 'default';
|
|
15
11
|
}
|
|
@@ -25,6 +21,10 @@ class BaseSocketEvent {
|
|
|
25
21
|
eventType() {
|
|
26
22
|
return this._eventType;
|
|
27
23
|
}
|
|
24
|
+
getSubscriptionKey() {
|
|
25
|
+
const identifier = this.constructor.identifier(this.data);
|
|
26
|
+
return `${this._eventType}:${identifier}`;
|
|
27
|
+
}
|
|
28
28
|
}
|
|
29
29
|
exports.BaseSocketEvent = BaseSocketEvent;
|
|
30
30
|
//# sourceMappingURL=BaseSocketEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseSocketEvent.js","sourceRoot":"/","sources":["libraries/socket/BaseSocketEvent.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"BaseSocketEvent.js","sourceRoot":"/","sources":["libraries/socket/BaseSocketEvent.ts"],"names":[],"mappings":";;;AAIA,MAAsB,eAAe;IACjB,UAAU,CAAkB;IACtC,WAAW,CAAM;IACjB,YAAY,CAAO;IACT,IAAI,CAAgB;IAEvC,MAAM,CAAC,UAAU,CAAC,KAAU;QAC3B,OAAO,SAAS,CAAC;IAClB,CAAC;IAKD,YACC,SAA0B,EAC1B,OAAqC,EACrC,IAAmB;QAEnB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QAEnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAEM,SAAS;QACf,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAEM,kBAAkB;QACxB,MAAM,UAAU,GAAI,IAAI,CAAC,WAAsC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtF,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC;IAC3C,CAAC;CACD;AArCD,0CAqCC","sourcesContent":["import z, { ZodTypeAny } from 'zod';\nimport { SocketEventType } from '../../utilities/enum';\nimport { NotificationSocketEvent } from './events/notification.socket.event';\n\nexport abstract class BaseSocketEvent<SIn extends ZodTypeAny, SOut extends ZodTypeAny> {\n\tprotected readonly _eventType: SocketEventType;\n\treadonly inputSchema: SIn;\n\treadonly outputSchema: SOut;\n\tprotected readonly data: z.infer<SOut>;\n\n\tstatic identifier(input: any): string {\n\t\treturn 'default';\n\t}\n\n\tpublic notification?(): NotificationSocketEvent | null;\n\tpublic pushNotification?(): NotificationSocketEvent | null;\n\n\tprotected constructor(\n\t\teventType: SocketEventType,\n\t\tschemas: { input: SIn; output: SOut },\n\t\tdata: z.infer<SOut>\n\t) {\n\t\tthis._eventType = eventType;\n\t\tthis.inputSchema = schemas.input;\n\t\tthis.outputSchema = schemas.output;\n\n\t\tthis.data = this.outputSchema.parse(data);\n\t}\n\n\tpublic payload(): z.infer<SOut> {\n\t\treturn this.data;\n\t}\n\n\tpublic eventType(): SocketEventType {\n\t\treturn this._eventType;\n\t}\n\n\tpublic getSubscriptionKey(): string {\n\t\tconst identifier = (this.constructor as typeof BaseSocketEvent).identifier(this.data);\n\t\treturn `${this._eventType}:${identifier}`;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseEvent } from '../event/BaseEvent';
|
|
2
|
+
import { PushNotificationEventType } from '../../utilities/enum';
|
|
3
|
+
import { ChatroomMessageSendSocketOutputDTO } from './events';
|
|
4
|
+
type PushNotificationMap = {
|
|
5
|
+
[PushNotificationEventType.CHATROOM_MESSAGE_SEND]: ChatroomMessageSendSocketOutputDTO;
|
|
6
|
+
};
|
|
7
|
+
export declare class PushNotificationEvent<T extends PushNotificationEventType> extends BaseEvent<PushNotificationMap[T]> {
|
|
8
|
+
private readonly _type;
|
|
9
|
+
constructor(type: T, data: PushNotificationMap[T]);
|
|
10
|
+
get type(): T;
|
|
11
|
+
getPayload(): PushNotificationMap[T];
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PushNotificationEvent = void 0;
|
|
4
|
+
const BaseEvent_1 = require("../event/BaseEvent");
|
|
5
|
+
const enum_1 = require("../../utilities/enum");
|
|
6
|
+
class PushNotificationEvent extends BaseEvent_1.BaseEvent {
|
|
7
|
+
_type;
|
|
8
|
+
constructor(type, data) {
|
|
9
|
+
super('notification.push', data);
|
|
10
|
+
this._type = type;
|
|
11
|
+
}
|
|
12
|
+
get type() {
|
|
13
|
+
return this._type;
|
|
14
|
+
}
|
|
15
|
+
getPayload() {
|
|
16
|
+
return this.payload;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.PushNotificationEvent = PushNotificationEvent;
|
|
20
|
+
//# sourceMappingURL=PushNotificationEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PushNotificationEvent.js","sourceRoot":"/","sources":["libraries/socket/PushNotificationEvent.ts"],"names":[],"mappings":";;;AAAA,kDAA+C;AAC/C,+CAAiE;AAOjE,MAAa,qBAA2D,SAAQ,qBAE/E;IACiB,KAAK,CAAI;IAE1B,YAAY,IAAO,EAAE,IAA4B;QAChD,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,UAAU;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;CACD;AAjBD,sDAiBC","sourcesContent":["import { BaseEvent } from '../event/BaseEvent';\nimport { PushNotificationEventType } from '../../utilities/enum';\nimport { ChatroomMessageSendSocketOutputDTO } from './events';\n\ntype PushNotificationMap = {\n\t[PushNotificationEventType.CHATROOM_MESSAGE_SEND]: ChatroomMessageSendSocketOutputDTO;\n};\n\nexport class PushNotificationEvent<T extends PushNotificationEventType> extends BaseEvent<\n\tPushNotificationMap[T]\n> {\n\tprivate readonly _type: T;\n\n\tconstructor(type: T, data: PushNotificationMap[T]) {\n\t\tsuper('notification.push', data);\n\t\tthis._type = type;\n\t}\n\n\tget type(): T {\n\t\treturn this._type;\n\t}\n\n\tpublic getPayload(): PushNotificationMap[T] {\n\t\treturn this.payload;\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function subscribeToSocketEvent(): Promise<void>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subscribeToSocketEvent = subscribeToSocketEvent;
|
|
4
|
+
const instance_utils_1 = require("../../../utilities/instance.utils");
|
|
5
|
+
const event_1 = require("../../event");
|
|
6
|
+
const local_subscription_registry_1 = require("./local-subscription-registry");
|
|
7
|
+
async function subscribeToSocketEvent() {
|
|
8
|
+
const channel = (0, event_1.getChannel)();
|
|
9
|
+
const queueName = `socket-events-${(0, instance_utils_1.getInstanceId)()}`;
|
|
10
|
+
await channel.assertQueue(queueName, { durable: true });
|
|
11
|
+
await channel.bindQueue(queueName, event_1.EXCHANGE_NAME, `instance.${(0, instance_utils_1.getInstanceId)()}`);
|
|
12
|
+
await channel.consume(queueName, msg => {
|
|
13
|
+
if (!msg)
|
|
14
|
+
return;
|
|
15
|
+
try {
|
|
16
|
+
const { localKey, payload, recipient } = JSON.parse(msg.content.toString('utf8'));
|
|
17
|
+
local_subscription_registry_1.LocalSubs.emit(recipient, localKey, payload);
|
|
18
|
+
channel.ack(msg);
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
console.error('Failed to handle socket event:', e);
|
|
22
|
+
channel.nack(msg, false, false);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
console.log(`Subscribed to socket events on queue [${queueName}]`);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=socket-event-consumer.js.map
|