@mody-park-cha-raja/finance_common 3.0.0 → 4.0.1-beta.0
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 +57 -13
- package/dist/index.d.ts +57 -13
- package/dist/index.js +51 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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",
|
|
@@ -65,6 +77,14 @@ interface IAuditColumnEntity {
|
|
|
65
77
|
updatedBy: number;
|
|
66
78
|
}
|
|
67
79
|
|
|
80
|
+
interface IConfigurationEntity extends IAuditColumnEntity {
|
|
81
|
+
id: number;
|
|
82
|
+
key: string;
|
|
83
|
+
value: string;
|
|
84
|
+
type: ConfigurationType;
|
|
85
|
+
label: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
68
88
|
interface IBaseHistoryEntity extends IAuditColumnEntity {
|
|
69
89
|
id: number;
|
|
70
90
|
entityId: number;
|
|
@@ -199,9 +219,18 @@ declare class DateUtil {
|
|
|
199
219
|
static isFuture(epoch: number): boolean;
|
|
200
220
|
}
|
|
201
221
|
|
|
202
|
-
declare
|
|
203
|
-
|
|
204
|
-
|
|
222
|
+
declare class DonationHistoryModel extends BaseEntityModel implements IDonationHistoryEntity {
|
|
223
|
+
id: number;
|
|
224
|
+
entityId: number;
|
|
225
|
+
data: string;
|
|
226
|
+
operation: EntityHistoryOperation;
|
|
227
|
+
createdOn: number;
|
|
228
|
+
updatedOn: number;
|
|
229
|
+
createdBy: number;
|
|
230
|
+
updatedBy: number;
|
|
231
|
+
protected constructor();
|
|
232
|
+
static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>>;
|
|
233
|
+
static populateFromEntity(entity: IDonationHistoryEntity): DonationHistoryModel;
|
|
205
234
|
}
|
|
206
235
|
|
|
207
236
|
declare class DonationModel extends BaseEntityModel implements IDonationEntity {
|
|
@@ -219,6 +248,7 @@ declare class DonationModel extends BaseEntityModel implements IDonationEntity {
|
|
|
219
248
|
updatedBy: number;
|
|
220
249
|
protected constructor();
|
|
221
250
|
static populateFromEntity(entity: IDonationEntity): DonationModel;
|
|
251
|
+
static getReceiptPrefix(flatNo: string): string;
|
|
222
252
|
static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string;
|
|
223
253
|
}
|
|
224
254
|
|
|
@@ -387,6 +417,7 @@ declare const entityListEntityModelMap: {
|
|
|
387
417
|
transaction_history: typeof TransactionHistoryModel.populateFromEntity;
|
|
388
418
|
sponsor: typeof SponsorModel.populateFromEntity;
|
|
389
419
|
sponsor_history: typeof SponsorHistoryModel.populateFromEntity;
|
|
420
|
+
configuration: typeof ConfigurationModel.populateFromEntity;
|
|
390
421
|
};
|
|
391
422
|
|
|
392
423
|
declare class HttpException extends Error {
|
|
@@ -506,18 +537,23 @@ declare enum OrderByDirection {
|
|
|
506
537
|
DESC = "DESC"
|
|
507
538
|
}
|
|
508
539
|
|
|
509
|
-
declare class
|
|
540
|
+
declare abstract class BaseEntityModel {
|
|
541
|
+
static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList>>>;
|
|
542
|
+
populateRelations(searchResponse: ISearchV2Response, visited?: Set<string>): this;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
declare class ConfigurationModel extends BaseEntityModel implements IConfigurationEntity {
|
|
510
546
|
id: number;
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
547
|
+
key: string;
|
|
548
|
+
value: string;
|
|
549
|
+
type: ConfigurationType;
|
|
550
|
+
label: string;
|
|
514
551
|
createdOn: number;
|
|
515
552
|
updatedOn: number;
|
|
516
553
|
createdBy: number;
|
|
517
554
|
updatedBy: number;
|
|
518
555
|
protected constructor();
|
|
519
|
-
static
|
|
520
|
-
static populateFromEntity(entity: IDonationHistoryEntity): DonationHistoryModel;
|
|
556
|
+
static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel;
|
|
521
557
|
}
|
|
522
558
|
|
|
523
559
|
declare enum EntityList {
|
|
@@ -532,10 +568,11 @@ declare enum EntityList {
|
|
|
532
568
|
TRANSACTION = "transaction",
|
|
533
569
|
TRANSACTION_HISTORY = "transaction_history",
|
|
534
570
|
SPONSOR = "sponsor",
|
|
535
|
-
SPONSOR_HISTORY = "sponsor_history"
|
|
571
|
+
SPONSOR_HISTORY = "sponsor_history",
|
|
572
|
+
CONFIGURATION = "configuration"
|
|
536
573
|
}
|
|
537
|
-
type EntityType<T extends EntityList> = T extends EntityList.DONATION ? IDonationEntity : T extends EntityList.DONATION_HISTORY ? IDonationHistoryEntity : T extends EntityList.USER ? IUserEntity : T extends EntityList.USER_HISTORY ? IUserHistoryEntity : T extends EntityList.EXPENSE ? IExpenseEntity : T extends EntityList.EXPENSE_HISTORY ? IExpenseHistoryEntity : T extends EntityList.VENDOR ? IVendorEntity : T extends EntityList.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityList.TRANSACTION ? ITransactionEntity : T extends EntityList.TRANSACTION_HISTORY ? ITransactionHistoryEntity : T extends EntityList.SPONSOR ? ISponsorEntity : T extends EntityList.SPONSOR_HISTORY ? ISponsorHistoryEntity : never;
|
|
538
|
-
type EntityModelType<T extends EntityList> = T extends EntityList.DONATION ? DonationModel : T extends EntityList.DONATION_HISTORY ? DonationHistoryModel : T extends EntityList.USER ? UserModel : T extends EntityList.USER_HISTORY ? UserHistoryModel : T extends EntityList.EXPENSE ? ExpenseModel : T extends EntityList.EXPENSE_HISTORY ? ExpenseHistoryModel : T extends EntityList.VENDOR ? VendorModel : T extends EntityList.VENDOR_HISTORY ? VendorHistoryModel : T extends EntityList.TRANSACTION ? TransactionModel : T extends EntityList.TRANSACTION_HISTORY ? TransactionHistoryModel : T extends EntityList.SPONSOR ? SponsorModel : T extends EntityList.SPONSOR_HISTORY ? SponsorHistoryModel : never;
|
|
574
|
+
type EntityType<T extends EntityList> = T extends EntityList.DONATION ? IDonationEntity : T extends EntityList.DONATION_HISTORY ? IDonationHistoryEntity : T extends EntityList.USER ? IUserEntity : T extends EntityList.USER_HISTORY ? IUserHistoryEntity : T extends EntityList.EXPENSE ? IExpenseEntity : T extends EntityList.EXPENSE_HISTORY ? IExpenseHistoryEntity : T extends EntityList.VENDOR ? IVendorEntity : T extends EntityList.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityList.TRANSACTION ? ITransactionEntity : T extends EntityList.TRANSACTION_HISTORY ? ITransactionHistoryEntity : T extends EntityList.SPONSOR ? ISponsorEntity : T extends EntityList.SPONSOR_HISTORY ? ISponsorHistoryEntity : T extends EntityList.CONFIGURATION ? IConfigurationEntity : never;
|
|
575
|
+
type EntityModelType<T extends EntityList> = T extends EntityList.DONATION ? DonationModel : T extends EntityList.DONATION_HISTORY ? DonationHistoryModel : T extends EntityList.USER ? UserModel : T extends EntityList.USER_HISTORY ? UserHistoryModel : T extends EntityList.EXPENSE ? ExpenseModel : T extends EntityList.EXPENSE_HISTORY ? ExpenseHistoryModel : T extends EntityList.VENDOR ? VendorModel : T extends EntityList.VENDOR_HISTORY ? VendorHistoryModel : T extends EntityList.TRANSACTION ? TransactionModel : T extends EntityList.TRANSACTION_HISTORY ? TransactionHistoryModel : T extends EntityList.SPONSOR ? SponsorModel : T extends EntityList.SPONSOR_HISTORY ? SponsorHistoryModel : T extends EntityList.CONFIGURATION ? ConfigurationModel : never;
|
|
539
576
|
type EntityListEntityModelMap = {
|
|
540
577
|
[T in EntityList]: EntityModelType<T>[];
|
|
541
578
|
};
|
|
@@ -649,4 +686,11 @@ interface IUserUpdateDto extends IEntityUpdateDto<EntityType<EntityList.USER>> {
|
|
|
649
686
|
interface IUserSearchDto extends IEntityFilterData<EntityType<EntityList.USER>> {
|
|
650
687
|
}
|
|
651
688
|
|
|
652
|
-
|
|
689
|
+
interface IConfigurationCreateDto extends IEntityCreateDto<EntityType<EntityList.CONFIGURATION>> {
|
|
690
|
+
}
|
|
691
|
+
interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList.CONFIGURATION>> {
|
|
692
|
+
}
|
|
693
|
+
interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
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 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",
|
|
@@ -65,6 +77,14 @@ interface IAuditColumnEntity {
|
|
|
65
77
|
updatedBy: number;
|
|
66
78
|
}
|
|
67
79
|
|
|
80
|
+
interface IConfigurationEntity extends IAuditColumnEntity {
|
|
81
|
+
id: number;
|
|
82
|
+
key: string;
|
|
83
|
+
value: string;
|
|
84
|
+
type: ConfigurationType;
|
|
85
|
+
label: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
68
88
|
interface IBaseHistoryEntity extends IAuditColumnEntity {
|
|
69
89
|
id: number;
|
|
70
90
|
entityId: number;
|
|
@@ -199,9 +219,18 @@ declare class DateUtil {
|
|
|
199
219
|
static isFuture(epoch: number): boolean;
|
|
200
220
|
}
|
|
201
221
|
|
|
202
|
-
declare
|
|
203
|
-
|
|
204
|
-
|
|
222
|
+
declare class DonationHistoryModel extends BaseEntityModel implements IDonationHistoryEntity {
|
|
223
|
+
id: number;
|
|
224
|
+
entityId: number;
|
|
225
|
+
data: string;
|
|
226
|
+
operation: EntityHistoryOperation;
|
|
227
|
+
createdOn: number;
|
|
228
|
+
updatedOn: number;
|
|
229
|
+
createdBy: number;
|
|
230
|
+
updatedBy: number;
|
|
231
|
+
protected constructor();
|
|
232
|
+
static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>>;
|
|
233
|
+
static populateFromEntity(entity: IDonationHistoryEntity): DonationHistoryModel;
|
|
205
234
|
}
|
|
206
235
|
|
|
207
236
|
declare class DonationModel extends BaseEntityModel implements IDonationEntity {
|
|
@@ -219,6 +248,7 @@ declare class DonationModel extends BaseEntityModel implements IDonationEntity {
|
|
|
219
248
|
updatedBy: number;
|
|
220
249
|
protected constructor();
|
|
221
250
|
static populateFromEntity(entity: IDonationEntity): DonationModel;
|
|
251
|
+
static getReceiptPrefix(flatNo: string): string;
|
|
222
252
|
static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string;
|
|
223
253
|
}
|
|
224
254
|
|
|
@@ -387,6 +417,7 @@ declare const entityListEntityModelMap: {
|
|
|
387
417
|
transaction_history: typeof TransactionHistoryModel.populateFromEntity;
|
|
388
418
|
sponsor: typeof SponsorModel.populateFromEntity;
|
|
389
419
|
sponsor_history: typeof SponsorHistoryModel.populateFromEntity;
|
|
420
|
+
configuration: typeof ConfigurationModel.populateFromEntity;
|
|
390
421
|
};
|
|
391
422
|
|
|
392
423
|
declare class HttpException extends Error {
|
|
@@ -506,18 +537,23 @@ declare enum OrderByDirection {
|
|
|
506
537
|
DESC = "DESC"
|
|
507
538
|
}
|
|
508
539
|
|
|
509
|
-
declare class
|
|
540
|
+
declare abstract class BaseEntityModel {
|
|
541
|
+
static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList>>>;
|
|
542
|
+
populateRelations(searchResponse: ISearchV2Response, visited?: Set<string>): this;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
declare class ConfigurationModel extends BaseEntityModel implements IConfigurationEntity {
|
|
510
546
|
id: number;
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
547
|
+
key: string;
|
|
548
|
+
value: string;
|
|
549
|
+
type: ConfigurationType;
|
|
550
|
+
label: string;
|
|
514
551
|
createdOn: number;
|
|
515
552
|
updatedOn: number;
|
|
516
553
|
createdBy: number;
|
|
517
554
|
updatedBy: number;
|
|
518
555
|
protected constructor();
|
|
519
|
-
static
|
|
520
|
-
static populateFromEntity(entity: IDonationHistoryEntity): DonationHistoryModel;
|
|
556
|
+
static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel;
|
|
521
557
|
}
|
|
522
558
|
|
|
523
559
|
declare enum EntityList {
|
|
@@ -532,10 +568,11 @@ declare enum EntityList {
|
|
|
532
568
|
TRANSACTION = "transaction",
|
|
533
569
|
TRANSACTION_HISTORY = "transaction_history",
|
|
534
570
|
SPONSOR = "sponsor",
|
|
535
|
-
SPONSOR_HISTORY = "sponsor_history"
|
|
571
|
+
SPONSOR_HISTORY = "sponsor_history",
|
|
572
|
+
CONFIGURATION = "configuration"
|
|
536
573
|
}
|
|
537
|
-
type EntityType<T extends EntityList> = T extends EntityList.DONATION ? IDonationEntity : T extends EntityList.DONATION_HISTORY ? IDonationHistoryEntity : T extends EntityList.USER ? IUserEntity : T extends EntityList.USER_HISTORY ? IUserHistoryEntity : T extends EntityList.EXPENSE ? IExpenseEntity : T extends EntityList.EXPENSE_HISTORY ? IExpenseHistoryEntity : T extends EntityList.VENDOR ? IVendorEntity : T extends EntityList.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityList.TRANSACTION ? ITransactionEntity : T extends EntityList.TRANSACTION_HISTORY ? ITransactionHistoryEntity : T extends EntityList.SPONSOR ? ISponsorEntity : T extends EntityList.SPONSOR_HISTORY ? ISponsorHistoryEntity : never;
|
|
538
|
-
type EntityModelType<T extends EntityList> = T extends EntityList.DONATION ? DonationModel : T extends EntityList.DONATION_HISTORY ? DonationHistoryModel : T extends EntityList.USER ? UserModel : T extends EntityList.USER_HISTORY ? UserHistoryModel : T extends EntityList.EXPENSE ? ExpenseModel : T extends EntityList.EXPENSE_HISTORY ? ExpenseHistoryModel : T extends EntityList.VENDOR ? VendorModel : T extends EntityList.VENDOR_HISTORY ? VendorHistoryModel : T extends EntityList.TRANSACTION ? TransactionModel : T extends EntityList.TRANSACTION_HISTORY ? TransactionHistoryModel : T extends EntityList.SPONSOR ? SponsorModel : T extends EntityList.SPONSOR_HISTORY ? SponsorHistoryModel : never;
|
|
574
|
+
type EntityType<T extends EntityList> = T extends EntityList.DONATION ? IDonationEntity : T extends EntityList.DONATION_HISTORY ? IDonationHistoryEntity : T extends EntityList.USER ? IUserEntity : T extends EntityList.USER_HISTORY ? IUserHistoryEntity : T extends EntityList.EXPENSE ? IExpenseEntity : T extends EntityList.EXPENSE_HISTORY ? IExpenseHistoryEntity : T extends EntityList.VENDOR ? IVendorEntity : T extends EntityList.VENDOR_HISTORY ? IVendorHistoryEntity : T extends EntityList.TRANSACTION ? ITransactionEntity : T extends EntityList.TRANSACTION_HISTORY ? ITransactionHistoryEntity : T extends EntityList.SPONSOR ? ISponsorEntity : T extends EntityList.SPONSOR_HISTORY ? ISponsorHistoryEntity : T extends EntityList.CONFIGURATION ? IConfigurationEntity : never;
|
|
575
|
+
type EntityModelType<T extends EntityList> = T extends EntityList.DONATION ? DonationModel : T extends EntityList.DONATION_HISTORY ? DonationHistoryModel : T extends EntityList.USER ? UserModel : T extends EntityList.USER_HISTORY ? UserHistoryModel : T extends EntityList.EXPENSE ? ExpenseModel : T extends EntityList.EXPENSE_HISTORY ? ExpenseHistoryModel : T extends EntityList.VENDOR ? VendorModel : T extends EntityList.VENDOR_HISTORY ? VendorHistoryModel : T extends EntityList.TRANSACTION ? TransactionModel : T extends EntityList.TRANSACTION_HISTORY ? TransactionHistoryModel : T extends EntityList.SPONSOR ? SponsorModel : T extends EntityList.SPONSOR_HISTORY ? SponsorHistoryModel : T extends EntityList.CONFIGURATION ? ConfigurationModel : never;
|
|
539
576
|
type EntityListEntityModelMap = {
|
|
540
577
|
[T in EntityList]: EntityModelType<T>[];
|
|
541
578
|
};
|
|
@@ -649,4 +686,11 @@ interface IUserUpdateDto extends IEntityUpdateDto<EntityType<EntityList.USER>> {
|
|
|
649
686
|
interface IUserSearchDto extends IEntityFilterData<EntityType<EntityList.USER>> {
|
|
650
687
|
}
|
|
651
688
|
|
|
652
|
-
|
|
689
|
+
interface IConfigurationCreateDto extends IEntityCreateDto<EntityType<EntityList.CONFIGURATION>> {
|
|
690
|
+
}
|
|
691
|
+
interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList.CONFIGURATION>> {
|
|
692
|
+
}
|
|
693
|
+
interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
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 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,9 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
BadRequestException: () => BadRequestException,
|
|
24
24
|
BaseEntityModel: () => BaseEntityModel,
|
|
25
|
+
ConfigurationKey: () => ConfigurationKey,
|
|
26
|
+
ConfigurationModel: () => ConfigurationModel,
|
|
27
|
+
ConfigurationType: () => ConfigurationType,
|
|
25
28
|
DateCodeUtils: () => DateCodeUtils,
|
|
26
29
|
DateUtil: () => DateUtil,
|
|
27
30
|
DonationHistoryModel: () => DonationHistoryModel,
|
|
@@ -62,6 +65,22 @@ __export(index_exports, {
|
|
|
62
65
|
});
|
|
63
66
|
module.exports = __toCommonJS(index_exports);
|
|
64
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
|
+
|
|
65
84
|
// src/enums/entity-history-operation.enum.ts
|
|
66
85
|
var EntityHistoryOperation = /* @__PURE__ */ ((EntityHistoryOperation2) => {
|
|
67
86
|
EntityHistoryOperation2["CREATE"] = "CREATE";
|
|
@@ -394,11 +413,16 @@ var DonationModel = class _DonationModel extends BaseEntityModel {
|
|
|
394
413
|
amount: Number(entity.amount)
|
|
395
414
|
});
|
|
396
415
|
}
|
|
416
|
+
static getReceiptPrefix(flatNo) {
|
|
417
|
+
const year = (/* @__PURE__ */ new Date()).getFullYear();
|
|
418
|
+
if (flatNo === "Devotee") return `MPCR-${year}-OD`;
|
|
419
|
+
if (flatNo === "Ex-Member Devotee") return `MPCR-${year}-EMD`;
|
|
420
|
+
return `MPCR-${year}-${flatNo}`;
|
|
421
|
+
}
|
|
397
422
|
static generateReceiptNumber(flatNo, existingDonations) {
|
|
398
423
|
const count = existingDonations.filter((d) => d.flatNo === flatNo).length + 1;
|
|
399
424
|
const seq = String(count).padStart(2, "0");
|
|
400
|
-
|
|
401
|
-
return `MPCR-${year}-${flatNo}-${seq}`;
|
|
425
|
+
return `${_DonationModel.getReceiptPrefix(flatNo)}-${seq}`;
|
|
402
426
|
}
|
|
403
427
|
};
|
|
404
428
|
|
|
@@ -626,6 +650,25 @@ var VendorModel = class _VendorModel extends BaseEntityModel {
|
|
|
626
650
|
}
|
|
627
651
|
};
|
|
628
652
|
|
|
653
|
+
// src/models/configuration.entity.model.ts
|
|
654
|
+
var ConfigurationModel = class _ConfigurationModel extends BaseEntityModel {
|
|
655
|
+
constructor() {
|
|
656
|
+
super();
|
|
657
|
+
this.id = 0;
|
|
658
|
+
this.key = "";
|
|
659
|
+
this.value = "";
|
|
660
|
+
this.type = "string" /* STRING */;
|
|
661
|
+
this.label = "";
|
|
662
|
+
this.createdOn = 0;
|
|
663
|
+
this.updatedOn = 0;
|
|
664
|
+
this.createdBy = 0;
|
|
665
|
+
this.updatedBy = 0;
|
|
666
|
+
}
|
|
667
|
+
static populateFromEntity(entity) {
|
|
668
|
+
return Object.assign(new _ConfigurationModel(), entity);
|
|
669
|
+
}
|
|
670
|
+
};
|
|
671
|
+
|
|
629
672
|
// src/utils/entity.utils.ts
|
|
630
673
|
var EntityList = /* @__PURE__ */ ((EntityList2) => {
|
|
631
674
|
EntityList2["DONATION"] = "donation";
|
|
@@ -640,6 +683,7 @@ var EntityList = /* @__PURE__ */ ((EntityList2) => {
|
|
|
640
683
|
EntityList2["TRANSACTION_HISTORY"] = "transaction_history";
|
|
641
684
|
EntityList2["SPONSOR"] = "sponsor";
|
|
642
685
|
EntityList2["SPONSOR_HISTORY"] = "sponsor_history";
|
|
686
|
+
EntityList2["CONFIGURATION"] = "configuration";
|
|
643
687
|
return EntityList2;
|
|
644
688
|
})(EntityList || {});
|
|
645
689
|
|
|
@@ -656,7 +700,8 @@ var entityListEntityModelMap = {
|
|
|
656
700
|
["transaction" /* TRANSACTION */]: TransactionModel.populateFromEntity,
|
|
657
701
|
["transaction_history" /* TRANSACTION_HISTORY */]: TransactionHistoryModel.populateFromEntity,
|
|
658
702
|
["sponsor" /* SPONSOR */]: SponsorModel.populateFromEntity,
|
|
659
|
-
["sponsor_history" /* SPONSOR_HISTORY */]: SponsorHistoryModel.populateFromEntity
|
|
703
|
+
["sponsor_history" /* SPONSOR_HISTORY */]: SponsorHistoryModel.populateFromEntity,
|
|
704
|
+
["configuration" /* CONFIGURATION */]: ConfigurationModel.populateFromEntity
|
|
660
705
|
};
|
|
661
706
|
|
|
662
707
|
// src/utils/error.utils.ts
|
|
@@ -910,6 +955,9 @@ var EntityFilterDataHelper = class {
|
|
|
910
955
|
0 && (module.exports = {
|
|
911
956
|
BadRequestException,
|
|
912
957
|
BaseEntityModel,
|
|
958
|
+
ConfigurationKey,
|
|
959
|
+
ConfigurationModel,
|
|
960
|
+
ConfigurationType,
|
|
913
961
|
DateCodeUtils,
|
|
914
962
|
DateUtil,
|
|
915
963
|
DonationHistoryModel,
|
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/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/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","/**\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 { 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 { 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}\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 : 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 : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\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};\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 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","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 [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 getReceiptPrefix(flatNo: string): string {\r\n const year = new Date().getFullYear();\r\n if (flatNo === 'Devotee') return `MPCR-${year}-OD`;\r\n if (flatNo === 'Ex-Member Devotee') return `MPCR-${year}-EMD`;\r\n return `MPCR-${year}-${flatNo}`;\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 return `${DonationModel.getReceiptPrefix(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\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: 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: IVendorEntity): VendorModel {\r\n return Object.assign(new VendorModel(), entity);\r\n }\r\n}\r\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 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":["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";
|
|
@@ -330,11 +346,16 @@ var DonationModel = class _DonationModel extends BaseEntityModel {
|
|
|
330
346
|
amount: Number(entity.amount)
|
|
331
347
|
});
|
|
332
348
|
}
|
|
349
|
+
static getReceiptPrefix(flatNo) {
|
|
350
|
+
const year = (/* @__PURE__ */ new Date()).getFullYear();
|
|
351
|
+
if (flatNo === "Devotee") return `MPCR-${year}-OD`;
|
|
352
|
+
if (flatNo === "Ex-Member Devotee") return `MPCR-${year}-EMD`;
|
|
353
|
+
return `MPCR-${year}-${flatNo}`;
|
|
354
|
+
}
|
|
333
355
|
static generateReceiptNumber(flatNo, existingDonations) {
|
|
334
356
|
const count = existingDonations.filter((d) => d.flatNo === flatNo).length + 1;
|
|
335
357
|
const seq = String(count).padStart(2, "0");
|
|
336
|
-
|
|
337
|
-
return `MPCR-${year}-${flatNo}-${seq}`;
|
|
358
|
+
return `${_DonationModel.getReceiptPrefix(flatNo)}-${seq}`;
|
|
338
359
|
}
|
|
339
360
|
};
|
|
340
361
|
|
|
@@ -562,6 +583,25 @@ var VendorModel = class _VendorModel extends BaseEntityModel {
|
|
|
562
583
|
}
|
|
563
584
|
};
|
|
564
585
|
|
|
586
|
+
// src/models/configuration.entity.model.ts
|
|
587
|
+
var ConfigurationModel = class _ConfigurationModel extends BaseEntityModel {
|
|
588
|
+
constructor() {
|
|
589
|
+
super();
|
|
590
|
+
this.id = 0;
|
|
591
|
+
this.key = "";
|
|
592
|
+
this.value = "";
|
|
593
|
+
this.type = "string" /* STRING */;
|
|
594
|
+
this.label = "";
|
|
595
|
+
this.createdOn = 0;
|
|
596
|
+
this.updatedOn = 0;
|
|
597
|
+
this.createdBy = 0;
|
|
598
|
+
this.updatedBy = 0;
|
|
599
|
+
}
|
|
600
|
+
static populateFromEntity(entity) {
|
|
601
|
+
return Object.assign(new _ConfigurationModel(), entity);
|
|
602
|
+
}
|
|
603
|
+
};
|
|
604
|
+
|
|
565
605
|
// src/utils/entity.utils.ts
|
|
566
606
|
var EntityList = /* @__PURE__ */ ((EntityList2) => {
|
|
567
607
|
EntityList2["DONATION"] = "donation";
|
|
@@ -576,6 +616,7 @@ var EntityList = /* @__PURE__ */ ((EntityList2) => {
|
|
|
576
616
|
EntityList2["TRANSACTION_HISTORY"] = "transaction_history";
|
|
577
617
|
EntityList2["SPONSOR"] = "sponsor";
|
|
578
618
|
EntityList2["SPONSOR_HISTORY"] = "sponsor_history";
|
|
619
|
+
EntityList2["CONFIGURATION"] = "configuration";
|
|
579
620
|
return EntityList2;
|
|
580
621
|
})(EntityList || {});
|
|
581
622
|
|
|
@@ -592,7 +633,8 @@ var entityListEntityModelMap = {
|
|
|
592
633
|
["transaction" /* TRANSACTION */]: TransactionModel.populateFromEntity,
|
|
593
634
|
["transaction_history" /* TRANSACTION_HISTORY */]: TransactionHistoryModel.populateFromEntity,
|
|
594
635
|
["sponsor" /* SPONSOR */]: SponsorModel.populateFromEntity,
|
|
595
|
-
["sponsor_history" /* SPONSOR_HISTORY */]: SponsorHistoryModel.populateFromEntity
|
|
636
|
+
["sponsor_history" /* SPONSOR_HISTORY */]: SponsorHistoryModel.populateFromEntity,
|
|
637
|
+
["configuration" /* CONFIGURATION */]: ConfigurationModel.populateFromEntity
|
|
596
638
|
};
|
|
597
639
|
|
|
598
640
|
// src/utils/error.utils.ts
|
|
@@ -845,6 +887,9 @@ var EntityFilterDataHelper = class {
|
|
|
845
887
|
export {
|
|
846
888
|
BadRequestException,
|
|
847
889
|
BaseEntityModel,
|
|
890
|
+
ConfigurationKey,
|
|
891
|
+
ConfigurationModel,
|
|
892
|
+
ConfigurationType,
|
|
848
893
|
DateCodeUtils,
|
|
849
894
|
DateUtil,
|
|
850
895
|
DonationHistoryModel,
|
package/dist/index.mjs.map
CHANGED
|
@@ -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/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/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","/**\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 { 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 { 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}\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 : 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 : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\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};\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 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","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 [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 getReceiptPrefix(flatNo: string): string {\r\n const year = new Date().getFullYear();\r\n if (flatNo === 'Devotee') return `MPCR-${year}-OD`;\r\n if (flatNo === 'Ex-Member Devotee') return `MPCR-${year}-EMD`;\r\n return `MPCR-${year}-${flatNo}`;\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 return `${DonationModel.getReceiptPrefix(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\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: 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: IVendorEntity): VendorModel {\r\n return Object.assign(new VendorModel(), entity);\r\n }\r\n}\r\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 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":["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": "
|
|
3
|
+
"version": "4.0.1-beta.0",
|
|
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": {
|