@mody-park-cha-raja/finance_common 1.0.7-beta.0 → 1.0.7-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,3 +1,15 @@
1
+ declare enum ConfigurationKey {
2
+ OPENING_BALANCE = "opening_balance",
3
+ EDIT_ALLOWANCE_PERIOD = "edit_allowance_period"
4
+ }
5
+
6
+ declare enum ConfigurationType {
7
+ NUMBER = "number",
8
+ STRING = "string",
9
+ CRONJOB_EXPRESSION = "cronjob_expression",
10
+ JSON = "json"
11
+ }
12
+
1
13
  declare enum EntityHistoryOperation {
2
14
  CREATE = "CREATE",
3
15
  UPDATE = "UPDATE",
@@ -58,13 +70,6 @@ declare enum VendorType {
58
70
  OTHER = "Other"
59
71
  }
60
72
 
61
- declare enum ConfigurationType {
62
- NUMBER = "number",
63
- STRING = "string",
64
- CRONJOB_EXPRESSION = "cronjob_expression",
65
- JSON = "json"
66
- }
67
-
68
73
  interface IAuditColumnEntity {
69
74
  createdOn: number;
70
75
  updatedOn: number;
@@ -228,6 +233,20 @@ declare class DonationHistoryModel extends BaseEntityModel implements IDonationH
228
233
  static populateFromEntity(entity: IDonationHistoryEntity): DonationHistoryModel;
229
234
  }
230
235
 
236
+ declare class UserModel extends BaseEntityModel implements IUserEntity {
237
+ id: number;
238
+ name: string;
239
+ password: string;
240
+ email: string;
241
+ phone: string;
242
+ createdOn: number;
243
+ updatedOn: number;
244
+ createdBy: number;
245
+ updatedBy: number;
246
+ protected constructor();
247
+ static populateFromEntity(entity: IUserEntity): UserModel;
248
+ }
249
+
231
250
  declare class DonationModel extends BaseEntityModel implements IDonationEntity {
232
251
  id: number;
233
252
  receiptNumber: string;
@@ -241,7 +260,10 @@ declare class DonationModel extends BaseEntityModel implements IDonationEntity {
241
260
  updatedOn: number;
242
261
  createdBy: number;
243
262
  updatedBy: number;
263
+ createdByUser?: UserModel;
264
+ updatedByUser?: UserModel;
244
265
  protected constructor();
266
+ static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList>>>;
245
267
  static populateFromEntity(entity: IDonationEntity): DonationModel;
246
268
  static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string;
247
269
  }
@@ -358,20 +380,6 @@ declare class UserHistoryModel extends BaseEntityModel implements IUserHistoryEn
358
380
  static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel;
359
381
  }
360
382
 
361
- declare class UserModel extends BaseEntityModel implements IUserEntity {
362
- id: number;
363
- name: string;
364
- password: string;
365
- email: string;
366
- phone: string;
367
- createdOn: number;
368
- updatedOn: number;
369
- createdBy: number;
370
- updatedBy: number;
371
- protected constructor();
372
- static populateFromEntity(entity: IUserEntity): UserModel;
373
- }
374
-
375
383
  declare class VendorHistoryModel extends BaseEntityModel implements IVendorHistoryEntity {
376
384
  id: number;
377
385
  entityId: number;
@@ -519,9 +527,13 @@ declare enum RelationType {
519
527
  ONE = "ONE",
520
528
  MANY = "MANY"
521
529
  }
530
+ interface IMappingPropertyEntry {
531
+ sourceProperty: string;
532
+ targetProperty: string;
533
+ }
522
534
  interface IModelRelationConfig<T extends EntityList> {
523
535
  relationType: RelationType;
524
- mappingProperty: keyof EntityType<T> & string;
536
+ mappingProperties: IMappingPropertyEntry[];
525
537
  searchProperty: string;
526
538
  entity: EntityList;
527
539
  }
@@ -687,4 +699,4 @@ interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList
687
699
  interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
688
700
  }
689
701
 
690
- export { BadRequestException, BaseEntityModel, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PaymentType, ReferenceIdPrefix, RelationType, SponsorFor, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionHistoryModel, TransactionModel, TransactionType, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
702
+ export { BadRequestException, BaseEntityModel, ConfigurationKey, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IMappingPropertyEntry, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PaymentType, ReferenceIdPrefix, RelationType, SponsorFor, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionHistoryModel, TransactionModel, TransactionType, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,15 @@
1
+ declare enum ConfigurationKey {
2
+ OPENING_BALANCE = "opening_balance",
3
+ EDIT_ALLOWANCE_PERIOD = "edit_allowance_period"
4
+ }
5
+
6
+ declare enum ConfigurationType {
7
+ NUMBER = "number",
8
+ STRING = "string",
9
+ CRONJOB_EXPRESSION = "cronjob_expression",
10
+ JSON = "json"
11
+ }
12
+
1
13
  declare enum EntityHistoryOperation {
2
14
  CREATE = "CREATE",
3
15
  UPDATE = "UPDATE",
@@ -58,13 +70,6 @@ declare enum VendorType {
58
70
  OTHER = "Other"
59
71
  }
60
72
 
61
- declare enum ConfigurationType {
62
- NUMBER = "number",
63
- STRING = "string",
64
- CRONJOB_EXPRESSION = "cronjob_expression",
65
- JSON = "json"
66
- }
67
-
68
73
  interface IAuditColumnEntity {
69
74
  createdOn: number;
70
75
  updatedOn: number;
@@ -228,6 +233,20 @@ declare class DonationHistoryModel extends BaseEntityModel implements IDonationH
228
233
  static populateFromEntity(entity: IDonationHistoryEntity): DonationHistoryModel;
229
234
  }
230
235
 
236
+ declare class UserModel extends BaseEntityModel implements IUserEntity {
237
+ id: number;
238
+ name: string;
239
+ password: string;
240
+ email: string;
241
+ phone: string;
242
+ createdOn: number;
243
+ updatedOn: number;
244
+ createdBy: number;
245
+ updatedBy: number;
246
+ protected constructor();
247
+ static populateFromEntity(entity: IUserEntity): UserModel;
248
+ }
249
+
231
250
  declare class DonationModel extends BaseEntityModel implements IDonationEntity {
232
251
  id: number;
233
252
  receiptNumber: string;
@@ -241,7 +260,10 @@ declare class DonationModel extends BaseEntityModel implements IDonationEntity {
241
260
  updatedOn: number;
242
261
  createdBy: number;
243
262
  updatedBy: number;
263
+ createdByUser?: UserModel;
264
+ updatedByUser?: UserModel;
244
265
  protected constructor();
266
+ static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList>>>;
245
267
  static populateFromEntity(entity: IDonationEntity): DonationModel;
246
268
  static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string;
247
269
  }
@@ -358,20 +380,6 @@ declare class UserHistoryModel extends BaseEntityModel implements IUserHistoryEn
358
380
  static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel;
359
381
  }
360
382
 
361
- declare class UserModel extends BaseEntityModel implements IUserEntity {
362
- id: number;
363
- name: string;
364
- password: string;
365
- email: string;
366
- phone: string;
367
- createdOn: number;
368
- updatedOn: number;
369
- createdBy: number;
370
- updatedBy: number;
371
- protected constructor();
372
- static populateFromEntity(entity: IUserEntity): UserModel;
373
- }
374
-
375
383
  declare class VendorHistoryModel extends BaseEntityModel implements IVendorHistoryEntity {
376
384
  id: number;
377
385
  entityId: number;
@@ -519,9 +527,13 @@ declare enum RelationType {
519
527
  ONE = "ONE",
520
528
  MANY = "MANY"
521
529
  }
530
+ interface IMappingPropertyEntry {
531
+ sourceProperty: string;
532
+ targetProperty: string;
533
+ }
522
534
  interface IModelRelationConfig<T extends EntityList> {
523
535
  relationType: RelationType;
524
- mappingProperty: keyof EntityType<T> & string;
536
+ mappingProperties: IMappingPropertyEntry[];
525
537
  searchProperty: string;
526
538
  entity: EntityList;
527
539
  }
@@ -687,4 +699,4 @@ interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList
687
699
  interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
688
700
  }
689
701
 
690
- export { BadRequestException, BaseEntityModel, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PaymentType, ReferenceIdPrefix, RelationType, SponsorFor, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionHistoryModel, TransactionModel, TransactionType, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
702
+ export { BadRequestException, BaseEntityModel, ConfigurationKey, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IMappingPropertyEntry, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PaymentType, ReferenceIdPrefix, RelationType, SponsorFor, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionHistoryModel, TransactionModel, TransactionType, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
package/dist/index.js CHANGED
@@ -22,6 +22,7 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  BadRequestException: () => BadRequestException,
24
24
  BaseEntityModel: () => BaseEntityModel,
25
+ ConfigurationKey: () => ConfigurationKey,
25
26
  ConfigurationModel: () => ConfigurationModel,
26
27
  ConfigurationType: () => ConfigurationType,
27
28
  DateCodeUtils: () => DateCodeUtils,
@@ -64,6 +65,22 @@ __export(index_exports, {
64
65
  });
65
66
  module.exports = __toCommonJS(index_exports);
66
67
 
68
+ // src/enums/configuration-key.enum.ts
69
+ var ConfigurationKey = /* @__PURE__ */ ((ConfigurationKey2) => {
70
+ ConfigurationKey2["OPENING_BALANCE"] = "opening_balance";
71
+ ConfigurationKey2["EDIT_ALLOWANCE_PERIOD"] = "edit_allowance_period";
72
+ return ConfigurationKey2;
73
+ })(ConfigurationKey || {});
74
+
75
+ // src/enums/configuration-type.enum.ts
76
+ var ConfigurationType = /* @__PURE__ */ ((ConfigurationType2) => {
77
+ ConfigurationType2["NUMBER"] = "number";
78
+ ConfigurationType2["STRING"] = "string";
79
+ ConfigurationType2["CRONJOB_EXPRESSION"] = "cronjob_expression";
80
+ ConfigurationType2["JSON"] = "json";
81
+ return ConfigurationType2;
82
+ })(ConfigurationType || {});
83
+
67
84
  // src/enums/entity-history-operation.enum.ts
68
85
  var EntityHistoryOperation = /* @__PURE__ */ ((EntityHistoryOperation2) => {
69
86
  EntityHistoryOperation2["CREATE"] = "CREATE";
@@ -141,15 +158,6 @@ var VendorType = /* @__PURE__ */ ((VendorType2) => {
141
158
  return VendorType2;
142
159
  })(VendorType || {});
143
160
 
144
- // src/enums/configuration-type.enum.ts
145
- var ConfigurationType = /* @__PURE__ */ ((ConfigurationType2) => {
146
- ConfigurationType2["NUMBER"] = "number";
147
- ConfigurationType2["STRING"] = "string";
148
- ConfigurationType2["CRONJOB_EXPRESSION"] = "cronjob_expression";
149
- ConfigurationType2["JSON"] = "json";
150
- return ConfigurationType2;
151
- })(ConfigurationType || {});
152
-
153
161
  // src/utils/date-code.utils.ts
154
162
  var DateCodeUtils = class _DateCodeUtils {
155
163
  constructor(dateCode) {
@@ -336,27 +344,35 @@ var BaseEntityModel = class {
336
344
  if (visited.has(selfKey)) return this;
337
345
  visited.add(selfKey);
338
346
  const relations = this.constructor.relations;
339
- for (const [prop, config] of Object.entries(relations)) {
340
- const { relationType, mappingProperty, searchProperty, entity } = config;
341
- const fkValue = this[mappingProperty];
347
+ for (const [, config] of Object.entries(relations)) {
348
+ const { relationType, mappingProperties, searchProperty, entity } = config;
342
349
  const bucket = searchResponse[entity] ?? [];
343
350
  if (!bucket.length) continue;
351
+ const hydrateEntity = (raw) => {
352
+ const hydrated = entityListEntityModelMap[entity](raw);
353
+ hydrated.populateRelations(searchResponse, visited);
354
+ return hydrated;
355
+ };
344
356
  if (relationType === "ONE" /* ONE */) {
345
- const match = bucket.find((e) => e[searchProperty] === fkValue);
346
- if (match) {
347
- const hydrated = entityListEntityModelMap[entity](match);
348
- hydrated.populateRelations(searchResponse, visited);
349
- this[prop] = hydrated;
357
+ for (const { sourceProperty, targetProperty } of mappingProperties) {
358
+ const fkValue = this[sourceProperty];
359
+ if (fkValue == null) continue;
360
+ const match = bucket.find(
361
+ (e) => e[searchProperty] === fkValue
362
+ );
363
+ if (match) {
364
+ this[targetProperty] = hydrateEntity(match);
365
+ }
350
366
  }
351
367
  } else {
368
+ const fkValues = mappingProperties.map((mp) => this[mp.sourceProperty]).filter((v) => v != null);
352
369
  const matches = bucket.filter(
353
- (e) => e[searchProperty] === fkValue
370
+ (e) => fkValues.includes(e[searchProperty])
354
371
  );
355
- this[prop] = matches.map((e) => {
356
- const hydrated = entityListEntityModelMap[entity](e);
357
- hydrated.populateRelations(searchResponse, visited);
358
- return hydrated;
359
- });
372
+ const targetProperty = mappingProperties[0]?.targetProperty;
373
+ if (targetProperty && matches.length) {
374
+ this[targetProperty] = matches.map(hydrateEntity);
375
+ }
360
376
  }
361
377
  }
362
378
  return this;
@@ -385,7 +401,7 @@ _DonationHistoryModel.relations = {};
385
401
  var DonationHistoryModel = _DonationHistoryModel;
386
402
 
387
403
  // src/models/donation.entity.model.ts
388
- var DonationModel = class _DonationModel extends BaseEntityModel {
404
+ var _DonationModel = class _DonationModel extends BaseEntityModel {
389
405
  constructor() {
390
406
  super();
391
407
  this.id = 0;
@@ -412,6 +428,18 @@ var DonationModel = class _DonationModel extends BaseEntityModel {
412
428
  return `MPCR-${year}-${flatNo}-${seq}`;
413
429
  }
414
430
  };
431
+ _DonationModel.relations = {
432
+ ["user" /* USER */]: {
433
+ relationType: "ONE" /* ONE */,
434
+ mappingProperties: [
435
+ { sourceProperty: "createdBy", targetProperty: "createdByUser" },
436
+ { sourceProperty: "updatedBy", targetProperty: "updatedByUser" }
437
+ ],
438
+ searchProperty: "id",
439
+ entity: "user" /* USER */
440
+ }
441
+ };
442
+ var DonationModel = _DonationModel;
415
443
 
416
444
  // src/models/expense-history.entity.model.ts
417
445
  var _ExpenseHistoryModel = class _ExpenseHistoryModel extends BaseEntityModel {
@@ -942,6 +970,7 @@ var EntityFilterDataHelper = class {
942
970
  0 && (module.exports = {
943
971
  BadRequestException,
944
972
  BaseEntityModel,
973
+ ConfigurationKey,
945
974
  ConfigurationModel,
946
975
  ConfigurationType,
947
976
  DateCodeUtils,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-for.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/enums/configuration-type.enum.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts"],"sourcesContent":["export * from \"./enums/index\";\r\nexport * from \"./helpers/index\";\r\nexport * from \"./interfaces/dtos\";\r\nexport * from \"./interfaces/index\";\r\nexport * from \"./models/index\";\r\nexport * from \"./types/index\";\r\nexport * from \"./utils/index\";\r\n","export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorFor {\n GHEE = 'ghee',\n PRASAD = 'prasad',\n BANNER = 'banner',\n}\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","export enum ConfigurationType {\n NUMBER = 'number',\n STRING = 'string',\n CRONJOB_EXPRESSION = 'cronjob_expression',\n JSON = 'json',\n}\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [prop, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // @ts-ignore\r\n const fkValue = this[mappingProperty];\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n if (relationType === RelationType.ONE) {\r\n // @ts-ignore\r\n const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n if (match) {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(match);\r\n hydrated.populateRelations(searchResponse, visited);\r\n this[prop as keyof this] = hydrated;\r\n }\r\n } else {\r\n const matches = bucket.filter(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(e);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n }) as this[keyof this];\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { IDonationEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string {\r\n const count = existingDonations.filter(d => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, '0');\r\n const year = new Date().getFullYear();\r\n return `MPCR-${year}-${flatNo}-${seq}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorName: string = \"\";\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType, SponsorFor } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: SponsorFor = SponsorFor.GHEE;\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: string = \"\";\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n });\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: tx.referenceId,\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserModel extends BaseEntityModel implements IUserEntity {\n id: number = 0;\n name: string = \"\";\n password: string = \"\";\n email: string = \"\";\n phone: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IUserEntity): UserModel {\n return Object.assign(new UserModel(), entity);\n }\n}\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\n id: number = 0;\n name: string = \"\";\n type: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IVendorEntity): VendorModel {\n return Object.assign(new VendorModel(), entity);\n }\n}\n","import { IConfigurationEntity } from \"../interfaces\";\nimport { ConfigurationType } from \"../enums\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ConfigurationModel extends BaseEntityModel implements IConfigurationEntity {\n id: number = 0;\n key: string = \"\";\n value: string = \"\";\n type: ConfigurationType = ConfigurationType.STRING;\n label: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\n return Object.assign(new ConfigurationModel(), entity);\n }\n}\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\nimport { DonationModel } from \"../models/donation.entity.model\";\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\nimport { ExpenseModel } from \"../models/expense.entity.model\";\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\nimport { TransactionModel } from \"../models/transaction.entity.model\";\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\nimport { UserModel } from \"../models/user.entity.model\";\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\nimport { VendorModel } from \"../models/vendor.entity.model\";\n\nexport enum EntityList {\n DONATION = \"donation\",\n DONATION_HISTORY = \"donation_history\",\n USER = \"user\",\n USER_HISTORY = \"user_history\",\n EXPENSE = \"expense\",\n EXPENSE_HISTORY = \"expense_history\",\n VENDOR = \"vendor\",\n VENDOR_HISTORY = \"vendor_history\",\n TRANSACTION = \"transaction\",\n TRANSACTION_HISTORY = \"transaction_history\",\n SPONSOR = \"sponsor\",\n SPONSOR_HISTORY = \"sponsor_history\",\n CONFIGURATION = \"configuration\",\n}\n\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\n ? IDonationEntity\n : T extends EntityList.DONATION_HISTORY\n ? IDonationHistoryEntity\n : T extends EntityList.USER\n ? IUserEntity\n : T extends EntityList.USER_HISTORY\n ? IUserHistoryEntity\n : T extends EntityList.EXPENSE\n ? IExpenseEntity\n : T extends EntityList.EXPENSE_HISTORY\n ? IExpenseHistoryEntity\n : T extends EntityList.VENDOR\n ? IVendorEntity\n : T extends EntityList.VENDOR_HISTORY\n ? IVendorHistoryEntity\n : T extends EntityList.TRANSACTION\n ? ITransactionEntity\n : T extends EntityList.TRANSACTION_HISTORY\n ? ITransactionHistoryEntity\n : T extends EntityList.SPONSOR\n ? ISponsorEntity\n : T extends EntityList.SPONSOR_HISTORY\n ? ISponsorHistoryEntity\n : T extends EntityList.CONFIGURATION\n ? IConfigurationEntity\n : never;\n\nexport type EntityModelType<T extends EntityList> =\n T extends EntityList.DONATION\n ? DonationModel\n : T extends EntityList.DONATION_HISTORY\n ? DonationHistoryModel\n : T extends EntityList.USER\n ? UserModel\n : T extends EntityList.USER_HISTORY\n ? UserHistoryModel\n : T extends EntityList.EXPENSE\n ? ExpenseModel\n : T extends EntityList.EXPENSE_HISTORY\n ? ExpenseHistoryModel\n : T extends EntityList.VENDOR\n ? VendorModel\n : T extends EntityList.VENDOR_HISTORY\n ? VendorHistoryModel\n : T extends EntityList.TRANSACTION\n ? TransactionModel\n : T extends EntityList.TRANSACTION_HISTORY\n ? TransactionHistoryModel\n : T extends EntityList.SPONSOR\n ? SponsorModel\n : T extends EntityList.SPONSOR_HISTORY\n ? SponsorHistoryModel\n : T extends EntityList.CONFIGURATION\n ? ConfigurationModel\n : never;\n\nexport type EntityListEntityModelMap = {\n [T in EntityList]: EntityModelType<T>[];\n};\n","import {\n ConfigurationModel,\n DonationHistoryModel,\n DonationModel,\n ExpenseHistoryModel,\n ExpenseModel,\n SponsorHistoryModel,\n SponsorModel,\n TransactionHistoryModel,\n TransactionModel,\n UserHistoryModel,\n UserModel,\n VendorHistoryModel,\n VendorModel,\n} from \"../models\";\nimport { EntityList } from \"./entity.utils\";\n\nexport const entityListEntityModelMap = {\n [EntityList.DONATION]: DonationModel.populateFromEntity,\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\n [EntityList.USER]: UserModel.populateFromEntity,\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\n};\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperty: keyof EntityType<T> & string;\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n const populateFn = entityListEntityModelMap[name];\r\n const data = this.searchResponse[name] ?? [];\r\n return data.map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof name>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n // getEntityModelsMap(): EntityListEntityModelMap {\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof key>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAK,yBAAL,kBAAKA,4BAAL;AACL,EAAAA,wBAAA,YAAS;AACT,EAAAA,wBAAA,YAAS;AACT,EAAAA,wBAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;;;ACAL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,aAAU;AAFA,SAAAA;AAAA,GAAA;;;ACAL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,gBAAa;AACb,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,oBAAiB;AACjB,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,mBAAgB;AARN,SAAAA;AAAA,GAAA;;;ACAL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,mBAAgB;AAHN,SAAAA;AAAA,GAAA;;;ACAL,IAAM,oBAAoB;AAAA,EAC/B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AACb;;;ACLO,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;;;ACAL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,oBAAiB;AACjB,EAAAA,aAAA,oBAAiB;AACjB,EAAAA,aAAA,qBAAkB;AAJR,SAAAA;AAAA,GAAA;;;ACAL,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AAFA,SAAAA;AAAA,GAAA;;;ACAL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,sBAAmB;AACnB,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,WAAQ;AAJE,SAAAA;AAAA,GAAA;;;ACAL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,YAAS;AACT,EAAAA,mBAAA,wBAAqB;AACrB,EAAAA,mBAAA,UAAO;AAJG,SAAAA;AAAA,GAAA;;;ACQL,IAAM,gBAAN,MAAM,eAAc;AAAA,EAEzB,YAA6B,UAA2B;AAA3B;AAC3B,SAAK,sBAAsB,OAAO,KAAK,QAAQ;AAC/C,QAAI,CAAC,KAAK,gBAAgB,GAAG;AAC3B,YAAM,IAAI;AAAA,QACR,uBAAuB,KAAK,mBAAmB;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAA2B;AACzB,QAAI,CAAC,UAAU,KAAK,KAAK,mBAAmB,EAAG,QAAO;AAEtD,UAAM,EAAE,MAAM,OAAO,IAAI,IAAI,KAAK,eAAe;AAEjD,QAAI,QAAQ,KAAK,QAAQ,GAAI,QAAO;AACpC,QAAI,MAAM,KAAK,MAAM,GAAI,QAAO;AAEhC,UAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAC1C,WACE,KAAK,YAAY,MAAM,QACvB,KAAK,SAAS,MAAM,QAAQ,KAC5B,KAAK,QAAQ,MAAM;AAAA,EAEvB;AAAA,EAEA,mBAA2B;AACzB,UAAM,EAAE,MAAM,OAAO,IAAI,IAAI,KAAK,eAAe;AAEjD,WAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG,EAAE,mBAAmB,SAAS;AAAA,MAChE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAAwB;AAChC,UAAM,EAAE,MAAM,OAAO,IAAI,IAAI,KAAK,eAAe;AAEjD,UAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,IAAI,QAAQ,GAAG;AAEnD,UAAM,UAAU,KAAK,YAAY;AACjC,UAAM,WAAW,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC5D,UAAM,SAAS,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAErD,WAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM;AAAA,EACvC;AAAA,EAEA,QAAQ,MAAsB;AAC5B,UAAM,EAAE,MAAM,OAAO,IAAI,IAAI,KAAK,eAAe;AAEjD,UAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAC1C,SAAK,QAAQ,KAAK,QAAQ,IAAI,IAAI;AAElC,UAAM,UAAU,KAAK,YAAY;AACjC,UAAM,WAAW,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC5D,UAAM,SAAS,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAErD,WAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM;AAAA,EACvC;AAAA,EAEA,SAAS,OAAuB;AAC9B,WAAO,KAAK,QAAQ,QAAQ,CAAC;AAAA,EAC/B;AAAA,EAEA,SAAS,OAAuB;AAC9B,UAAM,EAAE,MAAM,OAAO,IAAI,IAAI,KAAK,eAAe;AAEjD,UAAM,OAAO,IAAI,KAAK,OAAO,OAAO,QAAQ,GAAG,GAAG;AAElD,UAAM,UAAU,KAAK,YAAY;AACjC,UAAM,WAAW,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC5D,UAAM,SAAS,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAErD,WAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM;AAAA,EACvC;AAAA,EAEQ,iBAA+D;AACrE,WAAO;AAAA,MACL,MAAM,SAAS,KAAK,oBAAoB,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,MAC3D,OAAO,SAAS,KAAK,oBAAoB,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,MAC5D,KAAK,SAAS,KAAK,oBAAoB,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,OAAO,iBAAyB;AAC9B,YAAO,oBAAI,KAAK,GAAE,YAAY;AAAA,EAChC;AAAA,EAEA,OAAO,SAAS,UAAmC;AACjD,UAAM,EAAE,MAAM,OAAO,IAAI,IAAI,IAAI,eAAc,QAAQ,EAAE,eAAe;AACxE,UAAM,SAAS,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAC5C,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,SAAS,GAAG,GAAG,GAAG,CAAC;AAEzB,UAAM,SAAS,OAAO,QAAQ,IAAI,MAAM,QAAQ;AAChD,WAAO,KAAK,MAAM,UAAU,MAAO,KAAK,KAAK,GAAG;AAAA,EAClD;AAAA,EAEA,OAAO,qBAA6B;AAClC,UAAM,QAAQ,oBAAI,KAAK;AACvB,UAAM,OAAO,MAAM,YAAY;AAC/B,UAAM,QAAQ,OAAO,MAAM,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAC1D,UAAM,MAAM,OAAO,MAAM,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AACnD,WAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG;AAAA,EAC9B;AACF;;;AClHO,IAAM,WAAN,MAAe;AAAA;AAAA,EAEpB,OAAO,MAAc;AACnB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA;AAAA,EAGA,OAAO,QAAQ,MAAoB;AACjC,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA;AAAA,EAGA,OAAO,OAAO,OAAqB;AACjC,WAAO,IAAI,KAAK,KAAK;AAAA,EACvB;AAAA;AAAA,EAGA,OAAO,WAAW,OAAuB;AACvC,WAAO,IAAI,KAAK,KAAK,EAAE,YAAY;AAAA,EACrC;AAAA;AAAA,EAGA,OAAO,QAAQ,OAAe,MAAsB;AAClD,WAAO,QAAQ,OAAO,KAAK,KAAK,KAAK;AAAA,EACvC;AAAA;AAAA,EAGA,OAAO,UAAU,OAAe,QAAwB;AACtD,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,SAAK,SAAS,KAAK,SAAS,IAAI,MAAM;AACtC,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA;AAAA,EAGA,OAAO,SAAS,OAAe,OAAuB;AACpD,WAAO,KAAK,QAAQ,OAAO,QAAQ,CAAC;AAAA,EACtC;AAAA;AAAA,EAGA,OAAO,SAAS,OAAe,OAAuB;AACpD,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,SAAK,YAAY,KAAK,YAAY,IAAI,KAAK;AAC3C,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA;AAAA,EAGA,OAAO,eAAe,QAAgB,QAAwB;AAC5D,WAAO,KAAK,MAAM,SAAS,WAAW,MAAO,KAAK,KAAK,GAAG;AAAA,EAC5D;AAAA;AAAA,EAGA,OAAO,QAAQ,OAAwB;AACrC,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAM,QAAQ,oBAAI,KAAK;AACvB,WACE,KAAK,QAAQ,MAAM,MAAM,QAAQ,KACjC,KAAK,SAAS,MAAM,MAAM,SAAS,KACnC,KAAK,YAAY,MAAM,MAAM,YAAY;AAAA,EAE7C;AAAA;AAAA,EAGA,OAAO,OAAO,OAAwB;AACpC,WAAO,QAAQ,KAAK,IAAI;AAAA,EAC1B;AAAA;AAAA,EAGA,OAAO,SAAS,OAAwB;AACtC,WAAO,QAAQ,KAAK,IAAI;AAAA,EAC1B;AACF;;;AC/DO,IAAe,kBAAf,MAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8CpC,kBACE,gBACA,UAAU,oBAAI,IAAY,GACpB;AACN,UAAM,UAAU,GAAG,KAAK,YAAY,IAAI,IAAK,KAAa,EAAE;AAC5D,QAAI,QAAQ,IAAI,OAAO,EAAG,QAAO;AACjC,YAAQ,IAAI,OAAO;AAEnB,UAAM,YAAa,KAAK,YAAuC;AAC/D,eAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,SAAS,GAAG;AACtD,YAAM,EAAE,cAAc,iBAAiB,gBAAgB,OAAO,IAAI;AAElE,YAAM,UAAU,KAAK,eAAe;AACpC,YAAM,SAAS,eAAe,MAAM,KAAK,CAAC;AAC1C,UAAI,CAAC,OAAO,OAAQ;AAEpB,UAAI,kCAAmC;AAErC,cAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,cAAc,MAAM,OAAO;AAC9D,YAAI,OAAO;AACT,gBAAM,WACJ,yBAAyB,MAAM,EAG/B,KAAK;AACP,mBAAS,kBAAkB,gBAAgB,OAAO;AAClD,eAAK,IAAkB,IAAI;AAAA,QAC7B;AAAA,MACF,OAAO;AACL,cAAM,UAAU,OAAO;AAAA,UACrB,CAAC,MAAW,EAAE,cAAc,MAAM;AAAA,QACpC;AACA,aAAK,IAAkB,IAAI,QAAQ,IAAI,CAAC,MAA8B;AACpE,gBAAM,WACJ,yBAAyB,MAAM,EAG/B,CAAC;AACH,mBAAS,kBAAkB,gBAAgB,OAAO;AAClD,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AA3FsB,gBACb,YAEH,CAAC;;;ACNA,IAAM,wBAAN,MAAM,8BACH,gBAEV;AAAA,EAWY,cAAc;AACtB,UAAM;AAXR,cAAa;AACb,oBAAmB;AACnB,gBAAe;AACf;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAMA,OAAO,mBACL,QACsB;AACtB,WAAO,OAAO,OAAO,IAAI,sBAAqB,GAAG,MAAM;AAAA,EACzD;AACF;AA3Ba,sBAkBJ,YAEH,CAAC;AApBA,IAAM,uBAAN;;;ACDA,IAAM,gBAAN,MAAM,uBAAsB,gBAA2C;AAAA,EAelE,cAAc;AACtB,UAAM;AAfR,cAAa;AACb,yBAAwB;AACxB,kBAAiB;AACjB,kBAAiB;AAEjB;AACA;AACA,yBAAuB,oBAAI,KAAK,GAAE,YAAY;AAE9C,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAEA,OAAO,mBAAmB,QAAwC;AAChE,WAAO,OAAO,OAAO,IAAI,eAAc,GAAG,QAAQ;AAAA,MAChD,QAAQ,OAAO,OAAO,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,sBAAsB,QAAgB,mBAA4C;AACvF,UAAM,QAAQ,kBAAkB,OAAO,OAAK,EAAE,WAAW,MAAM,EAAE,SAAS;AAC1E,UAAM,MAAM,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG;AACzC,UAAM,QAAO,oBAAI,KAAK,GAAE,YAAY;AACpC,WAAO,QAAQ,IAAI,IAAI,MAAM,IAAI,GAAG;AAAA,EACtC;AACF;;;AC9BO,IAAM,uBAAN,MAAM,6BACH,gBAEV;AAAA,EAWY,cAAc;AACtB,UAAM;AAXR,cAAa;AACb,oBAAmB;AACnB,gBAAe;AACf;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAMA,OAAO,mBACL,QACqB;AACrB,WAAO,OAAO,OAAO,IAAI,qBAAoB,GAAG,MAAM;AAAA,EACxD;AACF;AA3Ba,qBAkBJ,YAEH,CAAC;AApBA,IAAM,sBAAN;;;ACDA,IAAM,eAAN,MAAM,sBAAqB,gBAA0C;AAAA,EAgBhE,cAAc;AACtB,UAAM;AAhBR,cAAa;AACb,gBAAe;AACf;AACA,sBAAqB;AACrB,kBAAiB;AAGjB;AACA;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAEA,OAAO,mBAAmB,QAAsC;AAC9D,WAAO,OAAO,OAAO,IAAI,cAAa,GAAG,QAAQ;AAAA,MAC/C,QAAQ,OAAO,OAAO,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;;;ACxBO,IAAM,uBAAN,MAAM,6BACH,gBAEV;AAAA,EAWY,cAAc;AACtB,UAAM;AAXR,cAAa;AACb,oBAAmB;AACnB,gBAAe;AACf;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAMA,OAAO,mBACL,QACqB;AACrB,WAAO,OAAO,OAAO,IAAI,qBAAoB,GAAG,MAAM;AAAA,EACxD;AACF;AA3Ba,qBAkBJ,YAEH,CAAC;AApBA,IAAM,sBAAN;;;ACDA,IAAM,eAAN,MAAM,sBAAqB,gBAA0C;AAAA,EAgBhE,cAAc;AACtB,UAAM;AAhBR,cAAa;AACb,uBAAsB;AACtB,uBAAsB;AACtB,qBAAoB;AACpB;AACA,gBAAe;AACf,kBAAiB;AACjB;AACA;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAEA,OAAO,mBAAmB,QAAsC;AAC9D,WAAO,OAAO,OAAO,IAAI,cAAa,GAAG,QAAQ;AAAA,MAC/C,QAAQ,OAAO,OAAO,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;;;ACxBO,IAAM,2BAAN,MAAM,iCACH,gBAEV;AAAA,EAWY,cAAc;AACtB,UAAM;AAXR,cAAa;AACb,oBAAmB;AACnB,gBAAe;AACf;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAMA,OAAO,mBACL,QACyB;AACzB,WAAO,OAAO,OAAO,IAAI,yBAAwB,GAAG,MAAM;AAAA,EAC5D;AACF;AA3Ba,yBAkBJ,YAEH,CAAC;AApBA,IAAM,0BAAN;;;ACDA,IAAM,mBAAN,MAAM,0BACH,gBAEV;AAAA,EAgBY,cAAc;AACtB,UAAM;AAhBR,cAAa;AACb,gBAAe;AACf;AACA,uBAAsB;AACtB,kBAAiB;AACjB,wBAAuB;AACvB,uBAAsB;AACtB;AACA;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAEA,OAAO,mBAAmB,QAA8C;AACtE,WAAO,OAAO,OAAO,IAAI,kBAAiB,GAAG,QAAQ;AAAA,MACnD,QAAQ,OAAO,OAAO,MAAM;AAAA,MAC5B,cAAc,OAAO,OAAO,YAAY;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,gBAAgB,IAAsC;AAC3D,UAAM,YAAY,GAAG;AACrB,WAAO;AAAA,MACL,MAAM,GAAG;AAAA,MACT,aAAa,GAAG;AAAA,MAChB,SAAS,YAAY,IAAI,GAAG;AAAA,MAC5B,SAAS,YAAY,GAAG,SAAS;AAAA,MACjC,SAAS,GAAG;AAAA,MACZ,aAAa,GAAG;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,OAAO,WAAW,MAA4C;AAC5D,WAAO,KAAK,IAAI,kBAAiB,eAAe;AAAA,EAClD;AACF;;;AC5CO,IAAM,oBAAN,MAAM,0BACH,gBAEV;AAAA,EAWY,cAAc;AACtB,UAAM;AAXR,cAAa;AACb,oBAAmB;AACnB,gBAAe;AACf;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAMA,OAAO,mBAAmB,QAA8C;AACtE,WAAO,OAAO,OAAO,IAAI,kBAAiB,GAAG,MAAM;AAAA,EACrD;AACF;AAzBa,kBAkBJ,YAEH,CAAC;AApBA,IAAM,mBAAN;;;ACFA,IAAM,YAAN,MAAM,mBAAkB,gBAAuC;AAAA,EAY1D,cAAc;AACtB,UAAM;AAZR,cAAa;AACb,gBAAe;AACf,oBAAmB;AACnB,iBAAgB;AAChB,iBAAgB;AAEhB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAEA,OAAO,mBAAmB,QAAgC;AACxD,WAAO,OAAO,OAAO,IAAI,WAAU,GAAG,MAAM;AAAA,EAC9C;AACF;;;ACjBO,IAAM,sBAAN,MAAM,4BACH,gBAEV;AAAA,EAWY,cAAc;AACtB,UAAM;AAXR,cAAa;AACb,oBAAmB;AACnB,gBAAe;AACf;AAEA,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAMA,OAAO,mBACL,QACoB;AACpB,WAAO,OAAO,OAAO,IAAI,oBAAmB,GAAG,MAAM;AAAA,EACvD;AACF;AA3Ba,oBAkBJ,YAEH,CAAC;AApBA,IAAM,qBAAN;;;ACFA,IAAM,cAAN,MAAM,qBAAoB,gBAAyC;AAAA,EAU9D,cAAc;AACtB,UAAM;AAVR,cAAa;AACb,gBAAe;AACf,gBAAe;AAEf,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAEA,OAAO,mBAAmB,QAAoC;AAC5D,WAAO,OAAO,OAAO,IAAI,aAAY,GAAG,MAAM;AAAA,EAChD;AACF;;;AChBO,IAAM,qBAAN,MAAM,4BAA2B,gBAAgD;AAAA,EAY5E,cAAc;AACtB,UAAM;AAZR,cAAa;AACb,eAAc;AACd,iBAAgB;AAChB;AACA,iBAAgB;AAEhB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AACpB,qBAAoB;AAAA,EAIpB;AAAA,EAEA,OAAO,mBAAmB,QAAkD;AAC1E,WAAO,OAAO,OAAO,IAAI,oBAAmB,GAAG,MAAM;AAAA,EACvD;AACF;;;ACIO,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,sBAAmB;AACnB,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,kBAAe;AACf,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,oBAAiB;AACjB,EAAAA,YAAA,iBAAc;AACd,EAAAA,YAAA,yBAAsB;AACtB,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,mBAAgB;AAbN,SAAAA;AAAA,GAAA;;;ACVL,IAAM,2BAA2B;AAAA,EACtC,0BAAoB,GAAG,cAAc;AAAA,EACrC,0CAA4B,GAAG,qBAAqB;AAAA,EACpD,kBAAgB,GAAG,UAAU;AAAA,EAC7B,kCAAwB,GAAG,iBAAiB;AAAA,EAC5C,wBAAmB,GAAG,aAAa;AAAA,EACnC,wCAA2B,GAAG,oBAAoB;AAAA,EAClD,sBAAkB,GAAG,YAAY;AAAA,EACjC,sCAA0B,GAAG,mBAAmB;AAAA,EAChD,gCAAuB,GAAG,iBAAiB;AAAA,EAC3C,gDAA+B,GAAG,wBAAwB;AAAA,EAC1D,wBAAmB,GAAG,aAAa;AAAA,EACnC,wCAA2B,GAAG,oBAAoB;AAAA,EAClD,oCAAyB,GAAG,mBAAmB;AACjD;;;AC/BO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YACkB,SACA,YACA,KACA,QAChB;AACA,UAAM,OAAO;AALG;AACA;AACA;AACA;AAGhB,SAAK,OAAO,KAAK,YAAY;AAC7B,QAAK,MAAc,mBAAmB;AACpC,MAAC,MAAc,kBAAkB,MAAM,KAAK,WAAW;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,cAAc;AACZ,WAAO;AAAA,MACL,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd,KAAK,KAAK;AAAA,MACV,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAAA,EAEA,YAAY;AACV,WAAO,KAAK;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,cAAc;AAAA,EACrD,YACE,OACA,QACA;AACA,QAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AACtD,YAAM,MAAM,SAAS,KAAK,MAAM,KAAK,MAAM;AAAA,IAC7C,OAAO;AACL;AAAA,QACE,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oBAAN,cAAgC,cAAc;AAAA,EACnD,YAAY,QAAmD,aAAa;AAC1E,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,MAAM,SAAS,KAAK,MAAM,GAAG;AAAA,IACrC,OAAO;AACL,YAAM,OAAO,GAAG;AAAA,IAClB;AAAA,EACF;AACF;AAEO,IAAM,wBAAN,cAAoC,cAAc;AAAA,EACvD,YACE,QAAmD,gBACnD;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,MAAM,SAAS,KAAK,MAAM,GAAG;AAAA,IACrC,OAAO;AACL,YAAM,OAAO,GAAG;AAAA,IAClB;AAAA,EACF;AACF;AAEO,IAAM,qBAAN,cAAiC,cAAc;AAAA,EACpD,YAAY,QAAmD,aAAa;AAC1E,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,MAAM,SAAS,KAAK,MAAM,GAAG;AAAA,IACrC,OAAO;AACL,YAAM,OAAO,GAAG;AAAA,IAClB;AAAA,EACF;AACF;;;ACzEO,SAAS,qBACd,WACA,WACY;AACZ,QAAM,gBAA8C;AAAA,IAClD;AAAA,IACA;AAAA,EACF;AACA,QAAM,kBAAkB,OAAO,KAAK,SAAS;AAC7C,QAAM,kBAAkB,OAAO,KAAK,SAAS;AAE7C,MAAI,gBAAgB,WAAW,gBAAgB,QAAQ;AACrD,UAAM,IAAI,oBAAoB;AAAA,MAC5B,KAAK;AAAA,MACL,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiB,CAAC;AACxB,QAAM,iBAAiB,CAAC;AAExB,aAAW,OAAO,iBAAmC;AACnD,QAAI,cAAc,SAAS,GAA+B,EAAG;AAE7D,UAAM,SAAS,UAAU,GAAG;AAC5B,UAAM,SAAS,UAAU,GAAG;AAE5B,QAAI,KAAK,UAAU,MAAM,MAAM,KAAK,UAAU,MAAM,GAAG;AACrD,qBAAe,GAAG,IAAI;AACtB,qBAAe,GAAG,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AACT;AAwBO,SAAS,WAAc,MAAW,MAAW;AAClD,QAAM,OAAO,IAAI,IAAI,IAAI;AACzB,QAAM,OAAO,IAAI,IAAI,IAAI;AAEzB,SAAO;AAAA,IACL,SAAS,KAAK,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC;AAAA,IAC7C,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC9C,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,EAC9C;AACF;AAiBO,SAAS,QAAW,OAAY,KAAgC;AACrE,QAAM,SAAS,oBAAI,IAAiB;AACpC,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,OAAO,KAAK,GAAG,CAAC;AACjC,QAAI,CAAC,OAAO,IAAI,QAAQ,GAAG;AACzB,aAAO,IAAI,UAAU,CAAC,CAAC;AAAA,IACzB;AACA,WAAO,IAAI,QAAQ,EAAG,KAAK,IAAI;AAAA,EACjC;AACA,SAAO;AACT;AAEO,SAAS,cAAiB,KAAuC;AACtE,SAAO,IAAI,OAAO,CAAC,UAAsB,SAAS,IAAI;AACxD;AAiBO,SAAS,oBACd,OACA,SAAmC,OAC3B;AACR,QAAM,KAAK,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AACvD,QAAM,OAAO,IAAI,KAAK,EAAE;AAExB,MAAI,MAAM,KAAK,QAAQ,CAAC,GAAG;AACzB,YAAQ,KAAK,sDAAsD,KAAK,EAAE;AAC1E,WAAO;AAAA,EACT;AAEA,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,KAAK,mBAAmB,OAAO;AAAA,IACxC,KAAK;AACH,aAAO,KAAK,mBAAmB,SAAS;AAAA,QACtC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,MACP,CAAC;AAAA,IACH,KAAK;AAAA,IACL;AACE,aAAO,KAAK,YAAY;AAAA,EAC5B;AACF;;;AC7IO,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,SAAM;AACN,EAAAA,cAAA,UAAO;AAFG,SAAAA;AAAA,GAAA;;;ACFL,IAAK,mBAAL,kBAAKC,sBAAL;AACL,EAAAA,kBAAA,SAAM;AACN,EAAAA,kBAAA,UAAO;AAFG,SAAAA;AAAA,GAAA;;;ACkBL,IAAM,yBAAN,MAA6B;AAAA,EAGlC,YAA6B,gBAAmC;AAAnC;AAF7B,2BAA4C,CAAC;AAG3C,SAAK,kBAAkB,KAAK,wBAAwB;AAAA,EACtD;AAAA,EAEA,kBAAwC,MAA+B;AACrE,UAAM,aAAa,yBAAyB,IAAI;AAChD,UAAM,OAAO,KAAK,eAAe,IAAI,KAAK,CAAC;AAC3C,WAAO,KAAK;AAAA,MAAI,CAAC,WACd;AAAA,QACC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGQ,0BAAoD;AAC1D,UAAM,cACJ,CAAC;AAEH,eAAW,OAAO,OAAO,KAAK,KAAK,cAAc,GAAmB;AAClE,YAAM,aAAa,yBAAyB,GAAG;AAC/C,UAAI,CAAC,WAAY;AAEjB,YAAM,MAAM,KAAK,eAAe,GAAG;AACnC,UAAI,CAAC,MAAM,QAAQ,GAAG,EAAG;AAGzB,MAAC,YAAY,GAAG,IAAsC,KAAK,eACzD,GACF,EAAE;AAAA,QAAI,CAAC,WACJ;AAAA,UACC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,wBACE,YACA,QACsB;AACtB,UAAM,iBAAiB,KAAK,gBAAgB,UAAU,EAAE;AAAA,MAAO,CAAC,UAC9D,OAAO,MAAM,SAAU,MAAc,OAAO,GAAG,CAAC;AAAA,IAClD;AAEA,QAAI,eAAe,WAAW,GAAG;AAC/B,YAAM,IAAI,oBAAoB;AAAA,QAC5B,KAAK,GAAG,OAAO,GAAG;AAAA,QAClB,SAAS,GAAG,UAAU,iBAAiB,OAAO,MAAM,KAAK,IAAI,CAAC;AAAA,MAChE,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,uBACE,YACA,QACA;AACA,UAAM,gBAAgB,KAAK,gBAAgB,UAAU,EAAE;AAAA,MACrD,CAAC,UAAW,MAAc,OAAO,GAAG,MAAM,OAAO;AAAA,IACnD;AACA,QAAI,cAAc,WAAW,GAAG;AAC9B,YAAM,IAAI,oBAAoB;AAAA,QAC5B,KAAK,GAAG,OAAO,GAAG;AAAA,QAClB,SAAS,GAAG,UAAU,iBAAiB,OAAO,KAAK;AAAA,MACrD,CAAC;AAAA,IACH;AAGA,WAAO,cAAc,CAAC;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,qBAAqB,aAAqD;AACxE,eAAW,cAAc,aAAa;AACpC,YAAM,SAAS,KAAK,gBAAgB,UAAU;AAC9C,UAAI,CAAC,OAAQ;AACb,iBAAW,SAAS,QAAQ;AAC1B,QAAC,MAAqC;AAAA,UACpC,KAAK;AAAA,UACL,oBAAI,IAAY;AAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YACE,YACA,aACoB;AACpB,UAAM,aAAa,yBAAyB,UAAU;AACtD,UAAM,QAAS;AAAA,MACb;AAAA,IACF;AAEA,IAAC,MAAqC;AAAA,MACpC,KAAK;AAAA,MACL,oBAAI,IAAY;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AACF;","names":["EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorFor","SponsorTier","TransactionType","VendorType","ConfigurationType","EntityList","RelationType","OrderByDirection"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/enums/configuration-key.enum.ts","../src/enums/configuration-type.enum.ts","../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-for.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts"],"sourcesContent":["export * from \"./enums/index\";\r\nexport * from \"./helpers/index\";\r\nexport * from \"./interfaces/dtos\";\r\nexport * from \"./interfaces/index\";\r\nexport * from \"./models/index\";\r\nexport * from \"./types/index\";\r\nexport * from \"./utils/index\";\r\n","export enum ConfigurationKey {\r\n OPENING_BALANCE = \"opening_balance\",\r\n EDIT_ALLOWANCE_PERIOD = \"edit_allowance_period\",\r\n}\r\n","export enum ConfigurationType {\r\n NUMBER = 'number',\r\n STRING = 'string',\r\n CRONJOB_EXPRESSION = 'cronjob_expression',\r\n JSON = 'json',\r\n}\r\n","export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorFor {\n GHEE = 'ghee',\n PRASAD = 'prasad',\n BANNER = 'banner',\n}\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperties, searchProperty, entity } = config!;\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n const hydrateEntity = (raw: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(raw);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n };\r\n\r\n if (relationType === RelationType.ONE) {\r\n for (const { sourceProperty, targetProperty } of mappingProperties) {\r\n // @ts-ignore\r\n const fkValue = this[sourceProperty];\r\n if (fkValue == null) continue;\r\n const match = bucket.find(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n if (match) {\r\n (this as any)[targetProperty] = hydrateEntity(match);\r\n }\r\n }\r\n } else {\r\n const fkValues = mappingProperties\r\n .map((mp) => (this as any)[mp.sourceProperty])\r\n .filter((v: any) => v != null);\r\n const matches = bucket.filter((e: any) =>\r\n fkValues.includes(e[searchProperty]),\r\n );\r\n const targetProperty = mappingProperties[0]?.targetProperty;\r\n if (targetProperty && matches.length) {\r\n (this as any)[targetProperty] = matches.map(hydrateEntity);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { IDonationEntity } from \"../interfaces\";\r\nimport {\r\n EntityList,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static generateReceiptNumber(\r\n flatNo: string,\r\n existingDonations: DonationModel[],\r\n ): string {\r\n const count =\r\n existingDonations.filter((d) => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, \"0\");\r\n const year = new Date().getFullYear();\r\n return `MPCR-${year}-${flatNo}-${seq}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorName: string = \"\";\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType, SponsorFor } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: SponsorFor = SponsorFor.GHEE;\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: string = \"\";\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n });\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: tx.referenceId,\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserModel extends BaseEntityModel implements IUserEntity {\n id: number = 0;\n name: string = \"\";\n password: string = \"\";\n email: string = \"\";\n phone: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IUserEntity): UserModel {\n return Object.assign(new UserModel(), entity);\n }\n}\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\n id: number = 0;\n name: string = \"\";\n type: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IVendorEntity): VendorModel {\n return Object.assign(new VendorModel(), entity);\n }\n}\n","import { IConfigurationEntity } from \"../interfaces\";\r\nimport { ConfigurationType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ConfigurationModel extends BaseEntityModel implements IConfigurationEntity {\r\n id: number = 0;\r\n key: string = \"\";\r\n value: string = \"\";\r\n type: ConfigurationType = ConfigurationType.STRING;\r\n label: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\r\n return Object.assign(new ConfigurationModel(), entity);\r\n }\r\n}\r\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\r\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\r\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\r\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\r\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\r\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\r\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\r\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\r\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\r\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\r\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\r\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\r\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\r\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\r\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\r\nimport { DonationModel } from \"../models/donation.entity.model\";\r\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\r\nimport { ExpenseModel } from \"../models/expense.entity.model\";\r\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\r\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\r\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\r\nimport { TransactionModel } from \"../models/transaction.entity.model\";\r\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\r\nimport { UserModel } from \"../models/user.entity.model\";\r\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\r\nimport { VendorModel } from \"../models/vendor.entity.model\";\r\n\r\nexport enum EntityList {\r\n DONATION = \"donation\",\r\n DONATION_HISTORY = \"donation_history\",\r\n USER = \"user\",\r\n USER_HISTORY = \"user_history\",\r\n EXPENSE = \"expense\",\r\n EXPENSE_HISTORY = \"expense_history\",\r\n VENDOR = \"vendor\",\r\n VENDOR_HISTORY = \"vendor_history\",\r\n TRANSACTION = \"transaction\",\r\n TRANSACTION_HISTORY = \"transaction_history\",\r\n SPONSOR = \"sponsor\",\r\n SPONSOR_HISTORY = \"sponsor_history\",\r\n CONFIGURATION = \"configuration\",\r\n}\r\n\r\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\r\n ? IDonationEntity\r\n : T extends EntityList.DONATION_HISTORY\r\n ? IDonationHistoryEntity\r\n : T extends EntityList.USER\r\n ? IUserEntity\r\n : T extends EntityList.USER_HISTORY\r\n ? IUserHistoryEntity\r\n : T extends EntityList.EXPENSE\r\n ? IExpenseEntity\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? IExpenseHistoryEntity\r\n : T extends EntityList.VENDOR\r\n ? IVendorEntity\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? IVendorHistoryEntity\r\n : T extends EntityList.TRANSACTION\r\n ? ITransactionEntity\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? ITransactionHistoryEntity\r\n : T extends EntityList.SPONSOR\r\n ? ISponsorEntity\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? ISponsorHistoryEntity\r\n : T extends EntityList.CONFIGURATION\r\n ? IConfigurationEntity\r\n : never;\r\n\r\nexport type EntityModelType<T extends EntityList> =\r\n T extends EntityList.DONATION\r\n ? DonationModel\r\n : T extends EntityList.DONATION_HISTORY\r\n ? DonationHistoryModel\r\n : T extends EntityList.USER\r\n ? UserModel\r\n : T extends EntityList.USER_HISTORY\r\n ? UserHistoryModel\r\n : T extends EntityList.EXPENSE\r\n ? ExpenseModel\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? ExpenseHistoryModel\r\n : T extends EntityList.VENDOR\r\n ? VendorModel\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? VendorHistoryModel\r\n : T extends EntityList.TRANSACTION\r\n ? TransactionModel\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? TransactionHistoryModel\r\n : T extends EntityList.SPONSOR\r\n ? SponsorModel\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? SponsorHistoryModel\r\n : T extends EntityList.CONFIGURATION\r\n ? ConfigurationModel\r\n : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\r\n ConfigurationModel,\r\n DonationHistoryModel,\r\n DonationModel,\r\n ExpenseHistoryModel,\r\n ExpenseModel,\r\n SponsorHistoryModel,\r\n SponsorModel,\r\n TransactionHistoryModel,\r\n TransactionModel,\r\n UserHistoryModel,\r\n UserModel,\r\n VendorHistoryModel,\r\n VendorModel,\r\n} from \"../models\";\r\nimport { EntityList } from \"./entity.utils\";\r\n\r\nexport const entityListEntityModelMap = {\r\n [EntityList.DONATION]: DonationModel.populateFromEntity,\r\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\r\n [EntityList.USER]: UserModel.populateFromEntity,\r\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\r\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\r\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\r\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\r\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\r\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\r\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\r\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\r\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\r\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\r\n};\r\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IMappingPropertyEntry {\r\n sourceProperty: string;\r\n targetProperty: string;\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperties: IMappingPropertyEntry[];\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n const populateFn = entityListEntityModelMap[name];\r\n const data = this.searchResponse[name] ?? [];\r\n return data.map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof name>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n // getEntityModelsMap(): EntityListEntityModelMap {\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof key>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n"],"mappings":"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","names":["ConfigurationKey","ConfigurationType","EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorFor","SponsorTier","TransactionType","VendorType","EntityList","RelationType","OrderByDirection"]}
package/dist/index.mjs CHANGED
@@ -1,3 +1,19 @@
1
+ // src/enums/configuration-key.enum.ts
2
+ var ConfigurationKey = /* @__PURE__ */ ((ConfigurationKey2) => {
3
+ ConfigurationKey2["OPENING_BALANCE"] = "opening_balance";
4
+ ConfigurationKey2["EDIT_ALLOWANCE_PERIOD"] = "edit_allowance_period";
5
+ return ConfigurationKey2;
6
+ })(ConfigurationKey || {});
7
+
8
+ // src/enums/configuration-type.enum.ts
9
+ var ConfigurationType = /* @__PURE__ */ ((ConfigurationType2) => {
10
+ ConfigurationType2["NUMBER"] = "number";
11
+ ConfigurationType2["STRING"] = "string";
12
+ ConfigurationType2["CRONJOB_EXPRESSION"] = "cronjob_expression";
13
+ ConfigurationType2["JSON"] = "json";
14
+ return ConfigurationType2;
15
+ })(ConfigurationType || {});
16
+
1
17
  // src/enums/entity-history-operation.enum.ts
2
18
  var EntityHistoryOperation = /* @__PURE__ */ ((EntityHistoryOperation2) => {
3
19
  EntityHistoryOperation2["CREATE"] = "CREATE";
@@ -75,15 +91,6 @@ var VendorType = /* @__PURE__ */ ((VendorType2) => {
75
91
  return VendorType2;
76
92
  })(VendorType || {});
77
93
 
78
- // src/enums/configuration-type.enum.ts
79
- var ConfigurationType = /* @__PURE__ */ ((ConfigurationType2) => {
80
- ConfigurationType2["NUMBER"] = "number";
81
- ConfigurationType2["STRING"] = "string";
82
- ConfigurationType2["CRONJOB_EXPRESSION"] = "cronjob_expression";
83
- ConfigurationType2["JSON"] = "json";
84
- return ConfigurationType2;
85
- })(ConfigurationType || {});
86
-
87
94
  // src/utils/date-code.utils.ts
88
95
  var DateCodeUtils = class _DateCodeUtils {
89
96
  constructor(dateCode) {
@@ -270,27 +277,35 @@ var BaseEntityModel = class {
270
277
  if (visited.has(selfKey)) return this;
271
278
  visited.add(selfKey);
272
279
  const relations = this.constructor.relations;
273
- for (const [prop, config] of Object.entries(relations)) {
274
- const { relationType, mappingProperty, searchProperty, entity } = config;
275
- const fkValue = this[mappingProperty];
280
+ for (const [, config] of Object.entries(relations)) {
281
+ const { relationType, mappingProperties, searchProperty, entity } = config;
276
282
  const bucket = searchResponse[entity] ?? [];
277
283
  if (!bucket.length) continue;
284
+ const hydrateEntity = (raw) => {
285
+ const hydrated = entityListEntityModelMap[entity](raw);
286
+ hydrated.populateRelations(searchResponse, visited);
287
+ return hydrated;
288
+ };
278
289
  if (relationType === "ONE" /* ONE */) {
279
- const match = bucket.find((e) => e[searchProperty] === fkValue);
280
- if (match) {
281
- const hydrated = entityListEntityModelMap[entity](match);
282
- hydrated.populateRelations(searchResponse, visited);
283
- this[prop] = hydrated;
290
+ for (const { sourceProperty, targetProperty } of mappingProperties) {
291
+ const fkValue = this[sourceProperty];
292
+ if (fkValue == null) continue;
293
+ const match = bucket.find(
294
+ (e) => e[searchProperty] === fkValue
295
+ );
296
+ if (match) {
297
+ this[targetProperty] = hydrateEntity(match);
298
+ }
284
299
  }
285
300
  } else {
301
+ const fkValues = mappingProperties.map((mp) => this[mp.sourceProperty]).filter((v) => v != null);
286
302
  const matches = bucket.filter(
287
- (e) => e[searchProperty] === fkValue
303
+ (e) => fkValues.includes(e[searchProperty])
288
304
  );
289
- this[prop] = matches.map((e) => {
290
- const hydrated = entityListEntityModelMap[entity](e);
291
- hydrated.populateRelations(searchResponse, visited);
292
- return hydrated;
293
- });
305
+ const targetProperty = mappingProperties[0]?.targetProperty;
306
+ if (targetProperty && matches.length) {
307
+ this[targetProperty] = matches.map(hydrateEntity);
308
+ }
294
309
  }
295
310
  }
296
311
  return this;
@@ -319,7 +334,7 @@ _DonationHistoryModel.relations = {};
319
334
  var DonationHistoryModel = _DonationHistoryModel;
320
335
 
321
336
  // src/models/donation.entity.model.ts
322
- var DonationModel = class _DonationModel extends BaseEntityModel {
337
+ var _DonationModel = class _DonationModel extends BaseEntityModel {
323
338
  constructor() {
324
339
  super();
325
340
  this.id = 0;
@@ -346,6 +361,18 @@ var DonationModel = class _DonationModel extends BaseEntityModel {
346
361
  return `MPCR-${year}-${flatNo}-${seq}`;
347
362
  }
348
363
  };
364
+ _DonationModel.relations = {
365
+ ["user" /* USER */]: {
366
+ relationType: "ONE" /* ONE */,
367
+ mappingProperties: [
368
+ { sourceProperty: "createdBy", targetProperty: "createdByUser" },
369
+ { sourceProperty: "updatedBy", targetProperty: "updatedByUser" }
370
+ ],
371
+ searchProperty: "id",
372
+ entity: "user" /* USER */
373
+ }
374
+ };
375
+ var DonationModel = _DonationModel;
349
376
 
350
377
  // src/models/expense-history.entity.model.ts
351
378
  var _ExpenseHistoryModel = class _ExpenseHistoryModel extends BaseEntityModel {
@@ -875,6 +902,7 @@ var EntityFilterDataHelper = class {
875
902
  export {
876
903
  BadRequestException,
877
904
  BaseEntityModel,
905
+ ConfigurationKey,
878
906
  ConfigurationModel,
879
907
  ConfigurationType,
880
908
  DateCodeUtils,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-for.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/enums/configuration-type.enum.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts"],"sourcesContent":["export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorFor {\n GHEE = 'ghee',\n PRASAD = 'prasad',\n BANNER = 'banner',\n}\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","export enum ConfigurationType {\n NUMBER = 'number',\n STRING = 'string',\n CRONJOB_EXPRESSION = 'cronjob_expression',\n JSON = 'json',\n}\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [prop, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // @ts-ignore\r\n const fkValue = this[mappingProperty];\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n if (relationType === RelationType.ONE) {\r\n // @ts-ignore\r\n const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n if (match) {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(match);\r\n hydrated.populateRelations(searchResponse, visited);\r\n this[prop as keyof this] = hydrated;\r\n }\r\n } else {\r\n const matches = bucket.filter(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(e);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n }) as this[keyof this];\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { IDonationEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string {\r\n const count = existingDonations.filter(d => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, '0');\r\n const year = new Date().getFullYear();\r\n return `MPCR-${year}-${flatNo}-${seq}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorName: string = \"\";\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType, SponsorFor } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: SponsorFor = SponsorFor.GHEE;\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: string = \"\";\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n });\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: tx.referenceId,\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserModel extends BaseEntityModel implements IUserEntity {\n id: number = 0;\n name: string = \"\";\n password: string = \"\";\n email: string = \"\";\n phone: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IUserEntity): UserModel {\n return Object.assign(new UserModel(), entity);\n }\n}\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\n id: number = 0;\n name: string = \"\";\n type: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IVendorEntity): VendorModel {\n return Object.assign(new VendorModel(), entity);\n }\n}\n","import { IConfigurationEntity } from \"../interfaces\";\nimport { ConfigurationType } from \"../enums\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ConfigurationModel extends BaseEntityModel implements IConfigurationEntity {\n id: number = 0;\n key: string = \"\";\n value: string = \"\";\n type: ConfigurationType = ConfigurationType.STRING;\n label: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\n return Object.assign(new ConfigurationModel(), entity);\n }\n}\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\nimport { DonationModel } from \"../models/donation.entity.model\";\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\nimport { ExpenseModel } from \"../models/expense.entity.model\";\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\nimport { TransactionModel } from \"../models/transaction.entity.model\";\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\nimport { UserModel } from \"../models/user.entity.model\";\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\nimport { VendorModel } from \"../models/vendor.entity.model\";\n\nexport enum EntityList {\n DONATION = \"donation\",\n DONATION_HISTORY = \"donation_history\",\n USER = \"user\",\n USER_HISTORY = \"user_history\",\n EXPENSE = \"expense\",\n EXPENSE_HISTORY = \"expense_history\",\n VENDOR = \"vendor\",\n VENDOR_HISTORY = \"vendor_history\",\n TRANSACTION = \"transaction\",\n TRANSACTION_HISTORY = \"transaction_history\",\n SPONSOR = \"sponsor\",\n SPONSOR_HISTORY = \"sponsor_history\",\n CONFIGURATION = \"configuration\",\n}\n\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\n ? IDonationEntity\n : T extends EntityList.DONATION_HISTORY\n ? IDonationHistoryEntity\n : T extends EntityList.USER\n ? IUserEntity\n : T extends EntityList.USER_HISTORY\n ? IUserHistoryEntity\n : T extends EntityList.EXPENSE\n ? IExpenseEntity\n : T extends EntityList.EXPENSE_HISTORY\n ? IExpenseHistoryEntity\n : T extends EntityList.VENDOR\n ? IVendorEntity\n : T extends EntityList.VENDOR_HISTORY\n ? IVendorHistoryEntity\n : T extends EntityList.TRANSACTION\n ? ITransactionEntity\n : T extends EntityList.TRANSACTION_HISTORY\n ? ITransactionHistoryEntity\n : T extends EntityList.SPONSOR\n ? ISponsorEntity\n : T extends EntityList.SPONSOR_HISTORY\n ? ISponsorHistoryEntity\n : T extends EntityList.CONFIGURATION\n ? IConfigurationEntity\n : never;\n\nexport type EntityModelType<T extends EntityList> =\n T extends EntityList.DONATION\n ? DonationModel\n : T extends EntityList.DONATION_HISTORY\n ? DonationHistoryModel\n : T extends EntityList.USER\n ? UserModel\n : T extends EntityList.USER_HISTORY\n ? UserHistoryModel\n : T extends EntityList.EXPENSE\n ? ExpenseModel\n : T extends EntityList.EXPENSE_HISTORY\n ? ExpenseHistoryModel\n : T extends EntityList.VENDOR\n ? VendorModel\n : T extends EntityList.VENDOR_HISTORY\n ? VendorHistoryModel\n : T extends EntityList.TRANSACTION\n ? TransactionModel\n : T extends EntityList.TRANSACTION_HISTORY\n ? TransactionHistoryModel\n : T extends EntityList.SPONSOR\n ? SponsorModel\n : T extends EntityList.SPONSOR_HISTORY\n ? SponsorHistoryModel\n : T extends EntityList.CONFIGURATION\n ? ConfigurationModel\n : never;\n\nexport type EntityListEntityModelMap = {\n [T in EntityList]: EntityModelType<T>[];\n};\n","import {\n ConfigurationModel,\n DonationHistoryModel,\n DonationModel,\n ExpenseHistoryModel,\n ExpenseModel,\n SponsorHistoryModel,\n SponsorModel,\n TransactionHistoryModel,\n TransactionModel,\n UserHistoryModel,\n UserModel,\n VendorHistoryModel,\n VendorModel,\n} from \"../models\";\nimport { EntityList } from \"./entity.utils\";\n\nexport const entityListEntityModelMap = {\n [EntityList.DONATION]: DonationModel.populateFromEntity,\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\n [EntityList.USER]: UserModel.populateFromEntity,\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\n};\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperty: keyof EntityType<T> & string;\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n const populateFn = entityListEntityModelMap[name];\r\n const data = this.searchResponse[name] ?? [];\r\n return data.map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof name>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n // getEntityModelsMap(): EntityListEntityModelMap {\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof key>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n"],"mappings":"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","names":["EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorFor","SponsorTier","TransactionType","VendorType","ConfigurationType","EntityList","RelationType","OrderByDirection"]}
1
+ {"version":3,"sources":["../src/enums/configuration-key.enum.ts","../src/enums/configuration-type.enum.ts","../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-for.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts"],"sourcesContent":["export enum ConfigurationKey {\r\n OPENING_BALANCE = \"opening_balance\",\r\n EDIT_ALLOWANCE_PERIOD = \"edit_allowance_period\",\r\n}\r\n","export enum ConfigurationType {\r\n NUMBER = 'number',\r\n STRING = 'string',\r\n CRONJOB_EXPRESSION = 'cronjob_expression',\r\n JSON = 'json',\r\n}\r\n","export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorFor {\n GHEE = 'ghee',\n PRASAD = 'prasad',\n BANNER = 'banner',\n}\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperties, searchProperty, entity } = config!;\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n const hydrateEntity = (raw: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(raw);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n };\r\n\r\n if (relationType === RelationType.ONE) {\r\n for (const { sourceProperty, targetProperty } of mappingProperties) {\r\n // @ts-ignore\r\n const fkValue = this[sourceProperty];\r\n if (fkValue == null) continue;\r\n const match = bucket.find(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n if (match) {\r\n (this as any)[targetProperty] = hydrateEntity(match);\r\n }\r\n }\r\n } else {\r\n const fkValues = mappingProperties\r\n .map((mp) => (this as any)[mp.sourceProperty])\r\n .filter((v: any) => v != null);\r\n const matches = bucket.filter((e: any) =>\r\n fkValues.includes(e[searchProperty]),\r\n );\r\n const targetProperty = mappingProperties[0]?.targetProperty;\r\n if (targetProperty && matches.length) {\r\n (this as any)[targetProperty] = matches.map(hydrateEntity);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { IDonationEntity } from \"../interfaces\";\r\nimport {\r\n EntityList,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static generateReceiptNumber(\r\n flatNo: string,\r\n existingDonations: DonationModel[],\r\n ): string {\r\n const count =\r\n existingDonations.filter((d) => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, \"0\");\r\n const year = new Date().getFullYear();\r\n return `MPCR-${year}-${flatNo}-${seq}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorName: string = \"\";\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType, SponsorFor } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: SponsorFor = SponsorFor.GHEE;\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: string = \"\";\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n });\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: tx.referenceId,\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserModel extends BaseEntityModel implements IUserEntity {\n id: number = 0;\n name: string = \"\";\n password: string = \"\";\n email: string = \"\";\n phone: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IUserEntity): UserModel {\n return Object.assign(new UserModel(), entity);\n }\n}\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\n id: number = 0;\n name: string = \"\";\n type: string = \"\";\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static populateFromEntity(entity: IVendorEntity): VendorModel {\n return Object.assign(new VendorModel(), entity);\n }\n}\n","import { IConfigurationEntity } from \"../interfaces\";\r\nimport { ConfigurationType } from \"../enums\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ConfigurationModel extends BaseEntityModel implements IConfigurationEntity {\r\n id: number = 0;\r\n key: string = \"\";\r\n value: string = \"\";\r\n type: ConfigurationType = ConfigurationType.STRING;\r\n label: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\r\n return Object.assign(new ConfigurationModel(), entity);\r\n }\r\n}\r\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\r\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\r\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\r\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\r\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\r\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\r\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\r\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\r\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\r\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\r\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\r\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\r\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\r\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\r\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\r\nimport { DonationModel } from \"../models/donation.entity.model\";\r\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\r\nimport { ExpenseModel } from \"../models/expense.entity.model\";\r\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\r\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\r\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\r\nimport { TransactionModel } from \"../models/transaction.entity.model\";\r\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\r\nimport { UserModel } from \"../models/user.entity.model\";\r\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\r\nimport { VendorModel } from \"../models/vendor.entity.model\";\r\n\r\nexport enum EntityList {\r\n DONATION = \"donation\",\r\n DONATION_HISTORY = \"donation_history\",\r\n USER = \"user\",\r\n USER_HISTORY = \"user_history\",\r\n EXPENSE = \"expense\",\r\n EXPENSE_HISTORY = \"expense_history\",\r\n VENDOR = \"vendor\",\r\n VENDOR_HISTORY = \"vendor_history\",\r\n TRANSACTION = \"transaction\",\r\n TRANSACTION_HISTORY = \"transaction_history\",\r\n SPONSOR = \"sponsor\",\r\n SPONSOR_HISTORY = \"sponsor_history\",\r\n CONFIGURATION = \"configuration\",\r\n}\r\n\r\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\r\n ? IDonationEntity\r\n : T extends EntityList.DONATION_HISTORY\r\n ? IDonationHistoryEntity\r\n : T extends EntityList.USER\r\n ? IUserEntity\r\n : T extends EntityList.USER_HISTORY\r\n ? IUserHistoryEntity\r\n : T extends EntityList.EXPENSE\r\n ? IExpenseEntity\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? IExpenseHistoryEntity\r\n : T extends EntityList.VENDOR\r\n ? IVendorEntity\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? IVendorHistoryEntity\r\n : T extends EntityList.TRANSACTION\r\n ? ITransactionEntity\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? ITransactionHistoryEntity\r\n : T extends EntityList.SPONSOR\r\n ? ISponsorEntity\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? ISponsorHistoryEntity\r\n : T extends EntityList.CONFIGURATION\r\n ? IConfigurationEntity\r\n : never;\r\n\r\nexport type EntityModelType<T extends EntityList> =\r\n T extends EntityList.DONATION\r\n ? DonationModel\r\n : T extends EntityList.DONATION_HISTORY\r\n ? DonationHistoryModel\r\n : T extends EntityList.USER\r\n ? UserModel\r\n : T extends EntityList.USER_HISTORY\r\n ? UserHistoryModel\r\n : T extends EntityList.EXPENSE\r\n ? ExpenseModel\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? ExpenseHistoryModel\r\n : T extends EntityList.VENDOR\r\n ? VendorModel\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? VendorHistoryModel\r\n : T extends EntityList.TRANSACTION\r\n ? TransactionModel\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? TransactionHistoryModel\r\n : T extends EntityList.SPONSOR\r\n ? SponsorModel\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? SponsorHistoryModel\r\n : T extends EntityList.CONFIGURATION\r\n ? ConfigurationModel\r\n : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\r\n ConfigurationModel,\r\n DonationHistoryModel,\r\n DonationModel,\r\n ExpenseHistoryModel,\r\n ExpenseModel,\r\n SponsorHistoryModel,\r\n SponsorModel,\r\n TransactionHistoryModel,\r\n TransactionModel,\r\n UserHistoryModel,\r\n UserModel,\r\n VendorHistoryModel,\r\n VendorModel,\r\n} from \"../models\";\r\nimport { EntityList } from \"./entity.utils\";\r\n\r\nexport const entityListEntityModelMap = {\r\n [EntityList.DONATION]: DonationModel.populateFromEntity,\r\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\r\n [EntityList.USER]: UserModel.populateFromEntity,\r\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\r\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\r\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\r\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\r\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\r\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\r\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\r\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\r\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\r\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\r\n};\r\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IMappingPropertyEntry {\r\n sourceProperty: string;\r\n targetProperty: string;\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperties: IMappingPropertyEntry[];\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n const populateFn = entityListEntityModelMap[name];\r\n const data = this.searchResponse[name] ?? [];\r\n return data.map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof name>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n // getEntityModelsMap(): EntityListEntityModelMap {\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) =>\r\n (populateFn as (e: typeof entity) => EntityModelType<typeof key>)(\r\n entity,\r\n ),\r\n );\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n"],"mappings":"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","names":["ConfigurationKey","ConfigurationType","EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorFor","SponsorTier","TransactionType","VendorType","EntityList","RelationType","OrderByDirection"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mody-park-cha-raja/finance_common",
3
- "version": "1.0.7-beta.0",
3
+ "version": "1.0.7-beta.3",
4
4
  "description": "Common interfaces, models, enums, and utilities for the Mody Park Cha Raja finance ecosystem",
5
5
  "homepage": "https://github.com/mody-park-cha-raja/finance-common#readme",
6
6
  "bugs": {