@zeeshan60/event-processor 1.0.144 → 1.0.146

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.
Files changed (102) hide show
  1. package/dist/AttachmentProcessEvents.d.ts +2 -0
  2. package/dist/AttachmentProcessEvents.d.ts.map +1 -1
  3. package/dist/AttachmentProcessEvents.js +2 -0
  4. package/dist/AttachmentProcessEvents.js.map +1 -1
  5. package/dist/EventProcessorSDK.d.ts.map +1 -1
  6. package/dist/EventProcessorSDK.js +1 -1
  7. package/dist/EventProcessorSDK.js.map +1 -1
  8. package/dist/ExpenseEventHandler.d.ts +16 -2
  9. package/dist/ExpenseEventHandler.d.ts.map +1 -1
  10. package/dist/ExpenseEventHandler.js +249 -16
  11. package/dist/ExpenseEventHandler.js.map +1 -1
  12. package/dist/ExpenseEvents.d.ts +6 -0
  13. package/dist/ExpenseEvents.d.ts.map +1 -1
  14. package/dist/ExpenseEvents.js +3 -0
  15. package/dist/ExpenseEvents.js.map +1 -1
  16. package/dist/TransactionEventHandler.d.ts +2 -0
  17. package/dist/TransactionEventHandler.d.ts.map +1 -1
  18. package/dist/TransactionEventHandler.js +91 -3
  19. package/dist/TransactionEventHandler.js.map +1 -1
  20. package/dist/TransactionEvents.d.ts +6 -0
  21. package/dist/TransactionEvents.d.ts.map +1 -1
  22. package/dist/TransactionEvents.js +3 -0
  23. package/dist/TransactionEvents.js.map +1 -1
  24. package/dist/__tests__/test-helpers/IMMetadataStore.d.ts +9 -0
  25. package/dist/__tests__/test-helpers/IMMetadataStore.d.ts.map +1 -0
  26. package/dist/__tests__/test-helpers/IMMetadataStore.js +17 -0
  27. package/dist/__tests__/test-helpers/IMMetadataStore.js.map +1 -0
  28. package/dist/__tests__/test-helpers/IMRecurringExpenseEventStore.d.ts +12 -0
  29. package/dist/__tests__/test-helpers/IMRecurringExpenseEventStore.d.ts.map +1 -0
  30. package/dist/__tests__/test-helpers/IMRecurringExpenseEventStore.js +28 -0
  31. package/dist/__tests__/test-helpers/IMRecurringExpenseEventStore.js.map +1 -0
  32. package/dist/__tests__/test-helpers/IMRecurringExpenseModelStore.d.ts +19 -0
  33. package/dist/__tests__/test-helpers/IMRecurringExpenseModelStore.d.ts.map +1 -0
  34. package/dist/__tests__/test-helpers/IMRecurringExpenseModelStore.js +57 -0
  35. package/dist/__tests__/test-helpers/IMRecurringExpenseModelStore.js.map +1 -0
  36. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionEventStore.d.ts +12 -0
  37. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionEventStore.d.ts.map +1 -0
  38. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionEventStore.js +28 -0
  39. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionEventStore.js.map +1 -0
  40. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionModelStore.d.ts +19 -0
  41. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionModelStore.d.ts.map +1 -0
  42. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionModelStore.js +57 -0
  43. package/dist/__tests__/test-helpers/IMRecurringGroupTransactionModelStore.js.map +1 -0
  44. package/dist/__tests__/test-helpers/IMRecurringTransactionEventStore.d.ts +12 -0
  45. package/dist/__tests__/test-helpers/IMRecurringTransactionEventStore.d.ts.map +1 -0
  46. package/dist/__tests__/test-helpers/IMRecurringTransactionEventStore.js +28 -0
  47. package/dist/__tests__/test-helpers/IMRecurringTransactionEventStore.js.map +1 -0
  48. package/dist/__tests__/test-helpers/IMRecurringTransactionModelStore.d.ts +19 -0
  49. package/dist/__tests__/test-helpers/IMRecurringTransactionModelStore.d.ts.map +1 -0
  50. package/dist/__tests__/test-helpers/IMRecurringTransactionModelStore.js +59 -0
  51. package/dist/__tests__/test-helpers/IMRecurringTransactionModelStore.js.map +1 -0
  52. package/dist/client/controllers/BudgetController.d.ts +2 -7
  53. package/dist/client/controllers/BudgetController.d.ts.map +1 -1
  54. package/dist/client/controllers/BudgetController.js +12 -69
  55. package/dist/client/controllers/BudgetController.js.map +1 -1
  56. package/dist/client/controllers/ExpenseController.d.ts +4 -0
  57. package/dist/client/controllers/ExpenseController.d.ts.map +1 -1
  58. package/dist/client/controllers/ExpenseController.js +63 -1
  59. package/dist/client/controllers/ExpenseController.js.map +1 -1
  60. package/dist/client/controllers/ExportsController.d.ts.map +1 -1
  61. package/dist/client/controllers/ExportsController.js +26 -10
  62. package/dist/client/controllers/ExportsController.js.map +1 -1
  63. package/dist/client/controllers/GroupController.d.ts.map +1 -1
  64. package/dist/client/controllers/GroupController.js +4 -0
  65. package/dist/client/controllers/GroupController.js.map +1 -1
  66. package/dist/client/controllers/SuggestionController.js +1 -1
  67. package/dist/client/controllers/SuggestionController.js.map +1 -1
  68. package/dist/client/controllers/TransactionController.d.ts +4 -0
  69. package/dist/client/controllers/TransactionController.d.ts.map +1 -1
  70. package/dist/client/controllers/TransactionController.js +117 -15
  71. package/dist/client/controllers/TransactionController.js.map +1 -1
  72. package/dist/common/DomainEvents.d.ts +2 -0
  73. package/dist/common/DomainEvents.d.ts.map +1 -1
  74. package/dist/common/EventTypes.d.ts +1 -0
  75. package/dist/common/EventTypes.d.ts.map +1 -1
  76. package/dist/common/EventTypes.js +1 -0
  77. package/dist/common/EventTypes.js.map +1 -1
  78. package/dist/contracts/CurrencyConverter.d.ts +5 -0
  79. package/dist/contracts/CurrencyConverter.d.ts.map +1 -0
  80. package/dist/contracts/CurrencyConverter.js +11 -0
  81. package/dist/contracts/CurrencyConverter.js.map +1 -0
  82. package/dist/contracts/expenses/index.d.ts +2 -0
  83. package/dist/contracts/expenses/index.d.ts.map +1 -1
  84. package/dist/contracts/expenses/index.js.map +1 -1
  85. package/dist/contracts/index.d.ts +1 -0
  86. package/dist/contracts/index.d.ts.map +1 -1
  87. package/dist/contracts/index.js +1 -0
  88. package/dist/contracts/index.js.map +1 -1
  89. package/dist/contracts/transactions/index.d.ts +6 -0
  90. package/dist/contracts/transactions/index.d.ts.map +1 -1
  91. package/dist/contracts/transactions/index.js.map +1 -1
  92. package/dist/index.d.ts +1 -1
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js.map +1 -1
  95. package/dist/utils/BalanceUtil.d.ts +3 -3
  96. package/dist/utils/BalanceUtil.d.ts.map +1 -1
  97. package/dist/utils/BalanceUtil.js +2 -9
  98. package/dist/utils/BalanceUtil.js.map +1 -1
  99. package/dist/utils/GroupUtil.d.ts.map +1 -1
  100. package/dist/utils/GroupUtil.js +4 -11
  101. package/dist/utils/GroupUtil.js.map +1 -1
  102. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMRecurringGroupTransactionModelStore = void 0;
4
+ class IMRecurringGroupTransactionModelStore {
5
+ constructor() {
6
+ this.models = new Map();
7
+ }
8
+ async getByStreamId(streamId) {
9
+ return this.models.get(streamId);
10
+ }
11
+ async getByStreamIdWhereDeletedIsFalse(streamId) {
12
+ const model = this.models.get(streamId);
13
+ if (!model || model.deleted)
14
+ return undefined;
15
+ return model;
16
+ }
17
+ async getLatestByUpdatedAt() {
18
+ const models = Array.from(this.models.values());
19
+ if (models.length === 0)
20
+ return undefined;
21
+ return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
22
+ }
23
+ async save(model) {
24
+ this.models.set(model.streamId, model);
25
+ }
26
+ async saveAll(models) {
27
+ for (const model of models) {
28
+ await this.save(model);
29
+ }
30
+ }
31
+ async getByUserId(userId) {
32
+ return Array.from(this.models.values()).filter((m) => m.userId === userId);
33
+ }
34
+ async findAllByUserIdWhereDeletedIsFalse(userId) {
35
+ return Array.from(this.models.values()).filter((m) => m.userId === userId && !m.deleted);
36
+ }
37
+ async findAllByUserIdAndGroupIdWhereDeletedIsFalse(userId, groupId) {
38
+ return Array.from(this.models.values()).filter((m) => m.userId === userId && m.groupId === groupId && !m.deleted);
39
+ }
40
+ async findAllByStatusWhereDeletedIsFalse(userId, status) {
41
+ return Array.from(this.models.values()).filter((m) => m.userId === userId && m.status === status && !m.deleted);
42
+ }
43
+ async findAllActiveRecurringGroupTransactions() {
44
+ return Array.from(this.models.values()).filter((m) => m.status === "active" && !m.deleted);
45
+ }
46
+ getAll() {
47
+ return Array.from(this.models.values());
48
+ }
49
+ getAllWhereDeletedIsFalse() {
50
+ return Array.from(this.models.values()).filter((m) => !m.deleted);
51
+ }
52
+ clear() {
53
+ this.models.clear();
54
+ }
55
+ }
56
+ exports.IMRecurringGroupTransactionModelStore = IMRecurringGroupTransactionModelStore;
57
+ //# sourceMappingURL=IMRecurringGroupTransactionModelStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMRecurringGroupTransactionModelStore.js","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMRecurringGroupTransactionModelStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { RecurringTransactionEventStore } from "../../stores/RecurringTransactionEventStore";
2
+ import { RecurringTransactionEvent } from "../../common/DomainEvents";
3
+ export declare class IMRecurringTransactionEventStore implements RecurringTransactionEventStore {
4
+ private events;
5
+ addEvent(event: RecurringTransactionEvent): Promise<void>;
6
+ addEvents(events: RecurringTransactionEvent[]): Promise<void>;
7
+ getAllEventsByStreamId(streamId: string): Promise<RecurringTransactionEvent[]>;
8
+ deleteEventsByStreamId(streamId: string): Promise<void>;
9
+ getAll(): RecurringTransactionEvent[];
10
+ clear(): void;
11
+ }
12
+ //# sourceMappingURL=IMRecurringTransactionEventStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMRecurringTransactionEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMRecurringTransactionEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,qBAAa,gCACX,YAAW,8BAA8B;IAEzC,OAAO,CAAC,MAAM,CAAmC;IAE3C,QAAQ,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,SAAS,CAAC,MAAM,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAIjC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,MAAM,IAAI,yBAAyB,EAAE;IAIrC,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMRecurringTransactionEventStore = void 0;
4
+ class IMRecurringTransactionEventStore {
5
+ constructor() {
6
+ this.events = [];
7
+ }
8
+ async addEvent(event) {
9
+ this.events.push(event);
10
+ }
11
+ async addEvents(events) {
12
+ this.events.push(...events);
13
+ }
14
+ async getAllEventsByStreamId(streamId) {
15
+ return this.events.filter((e) => e.streamId === streamId);
16
+ }
17
+ async deleteEventsByStreamId(streamId) {
18
+ this.events = this.events.filter((e) => e.streamId !== streamId);
19
+ }
20
+ getAll() {
21
+ return this.events;
22
+ }
23
+ clear() {
24
+ this.events = [];
25
+ }
26
+ }
27
+ exports.IMRecurringTransactionEventStore = IMRecurringTransactionEventStore;
28
+ //# sourceMappingURL=IMRecurringTransactionEventStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMRecurringTransactionEventStore.js","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMRecurringTransactionEventStore.ts"],"names":[],"mappings":";;;AAGA,MAAa,gCAAgC;IAA7C;QAGU,WAAM,GAAgC,EAAE,CAAC;IA2BnD,CAAC;IAzBC,KAAK,CAAC,QAAQ,CAAC,KAAgC;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAmC;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,QAAgB;QAEhB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,QAAgB;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF;AA9BD,4EA8BC"}
@@ -0,0 +1,19 @@
1
+ import { RecurringTransactionModelStore } from "../../stores/RecurringTransactionModelStore";
2
+ import { RecurringTransactionModel } from "../../RecurringTransactionEvents";
3
+ export declare class IMRecurringTransactionModelStore implements RecurringTransactionModelStore {
4
+ private models;
5
+ getByStreamId(streamId: string): Promise<RecurringTransactionModel | undefined>;
6
+ getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<RecurringTransactionModel | undefined>;
7
+ getLatestByUpdatedAt(): Promise<RecurringTransactionModel | undefined>;
8
+ save(model: RecurringTransactionModel): Promise<void>;
9
+ saveAll(models: RecurringTransactionModel[]): Promise<void>;
10
+ getByUserId(userId: string): Promise<RecurringTransactionModel[]>;
11
+ findAllByUserIdWhereDeletedIsFalse(userId: string): Promise<RecurringTransactionModel[]>;
12
+ findAllByUserIdAndRecipientUserIdWhereDeletedIsFalse(userId: string, recipientUserId: string): Promise<RecurringTransactionModel[]>;
13
+ findAllByStatusWhereDeletedIsFalse(userId: string, status: string): Promise<RecurringTransactionModel[]>;
14
+ findAllActiveRecurringTransactions(): Promise<RecurringTransactionModel[]>;
15
+ getAll(): RecurringTransactionModel[];
16
+ getAllWhereDeletedIsFalse(): RecurringTransactionModel[];
17
+ clear(): void;
18
+ }
19
+ //# sourceMappingURL=IMRecurringTransactionModelStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMRecurringTransactionModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMRecurringTransactionModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,qBAAa,gCACX,YAAW,8BAA8B;IAEzC,OAAO,CAAC,MAAM,CAAqD;IAE7D,aAAa,CACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAI3C,gCAAgC,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAM3C,oBAAoB,IAAI,OAAO,CACnC,yBAAyB,GAAG,SAAS,CACtC;IAQK,IAAI,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,OAAO,CAAC,MAAM,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAMjE,kCAAkC,CACtC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAMjC,oDAAoD,CACxD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,yBAAyB,EAAE,CAAC;IASjC,kCAAkC,CACtC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAMjC,kCAAkC,IAAI,OAAO,CACjD,yBAAyB,EAAE,CAC5B;IAMD,MAAM,IAAI,yBAAyB,EAAE;IAIrC,yBAAyB,IAAI,yBAAyB,EAAE;IAIxD,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IMRecurringTransactionModelStore = void 0;
4
+ class IMRecurringTransactionModelStore {
5
+ constructor() {
6
+ this.models = new Map();
7
+ }
8
+ async getByStreamId(streamId) {
9
+ return this.models.get(streamId);
10
+ }
11
+ async getByStreamIdWhereDeletedIsFalse(streamId) {
12
+ const model = this.models.get(streamId);
13
+ if (!model || model.deleted)
14
+ return undefined;
15
+ return model;
16
+ }
17
+ async getLatestByUpdatedAt() {
18
+ const models = Array.from(this.models.values());
19
+ if (models.length === 0)
20
+ return undefined;
21
+ return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
22
+ }
23
+ async save(model) {
24
+ this.models.set(model.streamId, model);
25
+ }
26
+ async saveAll(models) {
27
+ for (const model of models) {
28
+ await this.save(model);
29
+ }
30
+ }
31
+ async getByUserId(userId) {
32
+ return Array.from(this.models.values()).filter((m) => m.userId === userId);
33
+ }
34
+ async findAllByUserIdWhereDeletedIsFalse(userId) {
35
+ return Array.from(this.models.values()).filter((m) => m.userId === userId && !m.deleted);
36
+ }
37
+ async findAllByUserIdAndRecipientUserIdWhereDeletedIsFalse(userId, recipientUserId) {
38
+ return Array.from(this.models.values()).filter((m) => m.userId === userId &&
39
+ m.recipientUserId === recipientUserId &&
40
+ !m.deleted);
41
+ }
42
+ async findAllByStatusWhereDeletedIsFalse(userId, status) {
43
+ return Array.from(this.models.values()).filter((m) => m.userId === userId && m.status === status && !m.deleted);
44
+ }
45
+ async findAllActiveRecurringTransactions() {
46
+ return Array.from(this.models.values()).filter((m) => m.status === "active" && !m.deleted);
47
+ }
48
+ getAll() {
49
+ return Array.from(this.models.values());
50
+ }
51
+ getAllWhereDeletedIsFalse() {
52
+ return Array.from(this.models.values()).filter((m) => !m.deleted);
53
+ }
54
+ clear() {
55
+ this.models.clear();
56
+ }
57
+ }
58
+ exports.IMRecurringTransactionModelStore = IMRecurringTransactionModelStore;
59
+ //# sourceMappingURL=IMRecurringTransactionModelStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMRecurringTransactionModelStore.js","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMRecurringTransactionModelStore.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { BudgetModel } from "../../BudgetEvents";
2
1
  import { BudgetCreateRequest, BudgetUpdateRequest, BudgetResponse, BudgetsResponse } from "../../contracts/budgets";
3
2
  import { EventProcessorSDK } from "../../EventProcessorSDK";
4
3
  export declare class BudgetController {
@@ -7,8 +6,9 @@ export declare class BudgetController {
7
6
  private get logger();
8
7
  private get modelStore();
9
8
  private get budgetEventHandler();
10
- private get expenseModelStore();
11
9
  private get expenseAccountModelStore();
10
+ private get currencyStore();
11
+ private get expenseEventHandler();
12
12
  private derivePeriodFromAccount;
13
13
  createBudget(userId: string, request: BudgetCreateRequest): Promise<string>;
14
14
  updateBudget(userId: string, budgetId: string, request: BudgetUpdateRequest): Promise<void>;
@@ -16,11 +16,6 @@ export declare class BudgetController {
16
16
  getBudget(userId: string, budgetId: string): Promise<BudgetResponse>;
17
17
  getAllBudgets(userId: string): Promise<BudgetsResponse>;
18
18
  getActiveBudgets(userId: string): Promise<BudgetsResponse>;
19
- getBudgetSpentAmount(userId: string, budget: BudgetModel): Promise<number>;
20
- getPeriodDateRange(budget: BudgetModel): {
21
- startDate?: number;
22
- endDate?: number;
23
- };
24
19
  private mapModelToResponse;
25
20
  }
26
21
  //# sourceMappingURL=BudgetController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BudgetController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/BudgetController.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EAIZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,EAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAI5D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;gBAE5B,GAAG,EAAE,iBAAiB;IAIlC,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,wBAAwB,GAEnC;YAEa,uBAAuB;IAuB/B,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC;IAsCZ,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC;IA8CV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAwBpE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAmBvD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAsB1D,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC;IAgClB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG;QACvC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAoDD,OAAO,CAAC,kBAAkB;CAiC3B"}
1
+ {"version":3,"file":"BudgetController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/BudgetController.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAI5D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;gBAE5B,GAAG,EAAE,iBAAiB;IAIlC,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,KAAK,wBAAwB,GAEnC;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,mBAAmB,GAE9B;YAEa,uBAAuB;IAuB/B,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC;IAsCZ,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC;IA8CV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA6BpE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBvD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2BhE,OAAO,CAAC,kBAAkB;CAiC3B"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BudgetController = void 0;
4
4
  const BudgetEvents_1 = require("../../BudgetEvents");
5
- const expenses_1 = require("../../contracts/expenses");
6
5
  const ExpenseAccountEvents_1 = require("../../ExpenseAccountEvents");
7
6
  const uuid_1 = require("uuid");
8
7
  class BudgetController {
@@ -18,12 +17,15 @@ class BudgetController {
18
17
  get budgetEventHandler() {
19
18
  return this.sdk.getBudgetEventHandler();
20
19
  }
21
- get expenseModelStore() {
22
- return this.sdk.getStoreConfig().expenseModelStore;
23
- }
24
20
  get expenseAccountModelStore() {
25
21
  return this.sdk.getStoreConfig().expenseAccountModelStore;
26
22
  }
23
+ get currencyStore() {
24
+ return this.sdk.getCurrencyStore();
25
+ }
26
+ get expenseEventHandler() {
27
+ return this.sdk.getExpenseEventHandler();
28
+ }
27
29
  async derivePeriodFromAccount(userId, accountId) {
28
30
  if (!accountId) {
29
31
  return BudgetEvents_1.BudgetPeriodEnum.ALL_TIME;
@@ -128,7 +130,8 @@ class BudgetController {
128
130
  if (!budgetModel) {
129
131
  throw new Error(`Budget not found: ${budgetId}`);
130
132
  }
131
- const spent = await this.getBudgetSpentAmount(userId, budgetModel);
133
+ const rates = (await this.currencyStore.getCurrencyRates())?.rates;
134
+ const spent = await this.expenseEventHandler.getBudgetSpentAmount(userId, budgetModel, rates);
132
135
  const response = this.mapModelToResponse(budgetModel, spent);
133
136
  this.logger.log("[BudgetController.getBudget] Returning budget", {
134
137
  request: { userId, budgetId },
@@ -142,8 +145,9 @@ class BudgetController {
142
145
  }
143
146
  async getAllBudgets(userId) {
144
147
  const budgets = await this.modelStore.findAllByUserIdAndDeletedIsFalse(userId);
148
+ const rates = (await this.currencyStore.getCurrencyRates())?.rates;
145
149
  const budgetsWithSpent = await Promise.all(budgets.map(async (budget) => {
146
- const spent = await this.getBudgetSpentAmount(userId, budget);
150
+ const spent = await this.expenseEventHandler.getBudgetSpentAmount(userId, budget, rates);
147
151
  return this.mapModelToResponse(budget, spent);
148
152
  }));
149
153
  this.logger.log("[BudgetController.getAllBudgets] Returning budgets", {
@@ -154,8 +158,9 @@ class BudgetController {
154
158
  }
155
159
  async getActiveBudgets(userId) {
156
160
  const budgets = await this.modelStore.findAllByUserIdAndIsActiveAndDeletedIsFalse(userId);
161
+ const rates = (await this.currencyStore.getCurrencyRates())?.rates;
157
162
  const budgetsWithSpent = await Promise.all(budgets.map(async (budget) => {
158
- const spent = await this.getBudgetSpentAmount(userId, budget);
163
+ const spent = await this.expenseEventHandler.getBudgetSpentAmount(userId, budget, rates);
159
164
  return this.mapModelToResponse(budget, spent);
160
165
  }));
161
166
  this.logger.log("[BudgetController.getActiveBudgets] Returning active budgets", {
@@ -164,68 +169,6 @@ class BudgetController {
164
169
  });
165
170
  return { budgets: budgetsWithSpent };
166
171
  }
167
- async getBudgetSpentAmount(userId, budget) {
168
- const { startDate, endDate } = this.getPeriodDateRange(budget);
169
- const expenses = await this.expenseModelStore.queryExpenses(userId, {
170
- transactionTypes: [expenses_1.TransactionType.EXPENSE],
171
- dateFrom: startDate,
172
- dateTo: endDate,
173
- accountIds: budget.accountId ? [budget.accountId] : undefined,
174
- categories: budget.category ? [budget.category] : undefined,
175
- paymentMethods: budget.paymentMethod ? [budget.paymentMethod] : undefined,
176
- });
177
- const totalSpent = expenses.reduce((sum, expense) => sum + expense.amount, 0);
178
- this.logger.log("[BudgetController.getBudgetSpentAmount] Calculated spent", {
179
- budgetId: budget.budgetId,
180
- period: budget.period,
181
- startDate: startDate ? new Date(startDate).toISOString() : "ALL_TIME",
182
- endDate: endDate ? new Date(endDate).toISOString() : "ALL_TIME",
183
- expenseCount: expenses.length,
184
- totalSpent,
185
- });
186
- return totalSpent;
187
- }
188
- getPeriodDateRange(budget) {
189
- const now = new Date();
190
- switch (budget.period) {
191
- case BudgetEvents_1.BudgetPeriodEnum.WEEKLY: {
192
- const dayOfWeek = now.getDay();
193
- const startOfWeek = new Date(now);
194
- startOfWeek.setDate(now.getDate() - dayOfWeek);
195
- startOfWeek.setHours(0, 0, 0, 0);
196
- const endOfWeek = new Date(startOfWeek);
197
- endOfWeek.setDate(startOfWeek.getDate() + 6);
198
- endOfWeek.setHours(23, 59, 59, 999);
199
- return {
200
- startDate: startOfWeek.getTime(),
201
- endDate: endOfWeek.getTime(),
202
- };
203
- }
204
- case BudgetEvents_1.BudgetPeriodEnum.MONTHLY: {
205
- const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);
206
- startOfMonth.setHours(0, 0, 0, 0);
207
- const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0);
208
- endOfMonth.setHours(23, 59, 59, 999);
209
- return {
210
- startDate: startOfMonth.getTime(),
211
- endDate: endOfMonth.getTime(),
212
- };
213
- }
214
- case BudgetEvents_1.BudgetPeriodEnum.YEARLY: {
215
- const startOfYear = new Date(now.getFullYear(), 0, 1);
216
- startOfYear.setHours(0, 0, 0, 0);
217
- const endOfYear = new Date(now.getFullYear(), 11, 31);
218
- endOfYear.setHours(23, 59, 59, 999);
219
- return {
220
- startDate: startOfYear.getTime(),
221
- endDate: endOfYear.getTime(),
222
- };
223
- }
224
- case BudgetEvents_1.BudgetPeriodEnum.ALL_TIME:
225
- default:
226
- return { startDate: undefined, endDate: undefined };
227
- }
228
- }
229
172
  mapModelToResponse(model, spent) {
230
173
  const effectiveBudget = model.amount + (model.rollover ? model.rolloverAmount : 0);
231
174
  const remaining = effectiveBudget - spent;
@@ -1 +1 @@
1
- {"version":3,"file":"BudgetController.js","sourceRoot":"","sources":["../../../src/client/controllers/BudgetController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BudgetController.js","sourceRoot":"","sources":["../../../src/client/controllers/BudgetController.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,10 @@ export declare class ExpenseController {
26
26
  bulkCreate(userId: string, requests: ExpenseCreateRequest[]): Promise<BulkExpenseCreateResponse>;
27
27
  updateExpense(userId: string, streamId: string, request: ExpenseUpdateRequest): Promise<void>;
28
28
  deleteExpense(userId: string, streamId: string): Promise<void>;
29
+ bulkDeleteExpenses(userId: string, streamIds: string[]): Promise<{
30
+ successCount: number;
31
+ failedCount: number;
32
+ }>;
29
33
  getExpense(userId: string, streamId: string): Promise<ExpenseResponse>;
30
34
  getExpensesByAccountAndMonth(userId: string, accountId: string, timeZone: string, month?: string, search?: string, sortByAmountAscending?: boolean, filters?: ExpenseFilterType[], category?: string): Promise<ExpensesByMonthResponse>;
31
35
  getExpensesByAccountMonthAndDay(userId: string, accountId: string, timeZone: string, month?: string, search?: string, sortByAmountAscending?: boolean, filters?: ExpenseFilterType[], category?: string): Promise<ExpensesByMonthAndDayResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"ExpenseController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/ExpenseController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExpenseController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/ExpenseController.ts"],"names":[],"mappings":"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"}
@@ -204,6 +204,7 @@ class ExpenseController {
204
204
  streamId,
205
205
  version: 1,
206
206
  systemGenerated: false,
207
+ bulkOperationId: request.bulkOperationId,
207
208
  });
208
209
  await this.expenseEventHandler.handleEvent(event);
209
210
  this.logger.log("[ExpenseController.createExpense] Expense created", {
@@ -226,6 +227,8 @@ class ExpenseController {
226
227
  if (uniqueTags.length > 0) {
227
228
  await this.ensureTagsExist(userId, uniqueTags);
228
229
  }
230
+ const bulkOperationId = (0, uuid_1.v4)();
231
+ const accountCounts = new Map();
229
232
  const events = [];
230
233
  for (let i = 0; i < requests.length; i++) {
231
234
  const request = requests[i];
@@ -262,9 +265,11 @@ class ExpenseController {
262
265
  streamId,
263
266
  version: 1,
264
267
  systemGenerated: false,
268
+ bulkOperationId,
265
269
  });
266
270
  events.push(event);
267
271
  expenseIds.push(expenseId);
272
+ accountCounts.set(request.accountId, (accountCounts.get(request.accountId) ?? 0) + 1);
268
273
  }
269
274
  catch (err) {
270
275
  errors.push({
@@ -274,7 +279,15 @@ class ExpenseController {
274
279
  }
275
280
  }
276
281
  if (events.length > 0) {
277
- await this.expenseEventHandler.bulkCreateEvents(events);
282
+ await this.expenseEventHandler.bulkHandleClientEvents(events);
283
+ }
284
+ for (const [accountId, count] of accountCounts) {
285
+ try {
286
+ await this.expenseEventHandler.createBulkOperationSummary(userId, accountId, count, "created", bulkOperationId);
287
+ }
288
+ catch (err) {
289
+ this.logger.log("[ExpenseController.bulkCreate] Failed to create bulk summary", { accountId, error: err });
290
+ }
278
291
  }
279
292
  const response = {
280
293
  expenseIds,
@@ -328,6 +341,7 @@ class ExpenseController {
328
341
  streamId: expenseModel.streamId,
329
342
  version: expenseModel.version + 1,
330
343
  systemGenerated: false,
344
+ bulkOperationId: request.bulkOperationId,
331
345
  });
332
346
  await this.expenseEventHandler.handleEvent(event);
333
347
  this.logger.log("[ExpenseController.updateExpense] Expense updated", {
@@ -357,6 +371,54 @@ class ExpenseController {
357
371
  request: { userId, streamId },
358
372
  });
359
373
  }
374
+ async bulkDeleteExpenses(userId, streamIds) {
375
+ const bulkOperationId = (0, uuid_1.v4)();
376
+ const accountCounts = new Map();
377
+ const events = [];
378
+ let failedCount = 0;
379
+ for (const streamId of streamIds) {
380
+ try {
381
+ const expenseModel = await this.modelStore.getByStreamIdWhereDeletedIsFalse(streamId);
382
+ if (!expenseModel) {
383
+ failedCount++;
384
+ continue;
385
+ }
386
+ if (expenseModel.userId !== userId) {
387
+ failedCount++;
388
+ continue;
389
+ }
390
+ const event = new ExpenseEvents_1.ExpenseDeleted({
391
+ eventId: (0, uuid_1.v4)(),
392
+ userId,
393
+ streamId: expenseModel.streamId,
394
+ version: expenseModel.version + 1,
395
+ createdAt: Date.now(),
396
+ createdBy: userId,
397
+ systemGenerated: false,
398
+ bulkOperationId,
399
+ });
400
+ events.push(event);
401
+ accountCounts.set(expenseModel.accountId, (accountCounts.get(expenseModel.accountId) ?? 0) + 1);
402
+ }
403
+ catch (err) {
404
+ this.logger.log("[ExpenseController.bulkDeleteExpenses] Failed to build delete event", { streamId, error: err });
405
+ failedCount++;
406
+ }
407
+ }
408
+ if (events.length > 0) {
409
+ await this.expenseEventHandler.bulkHandleClientEvents(events);
410
+ }
411
+ for (const [accountId, count] of accountCounts) {
412
+ try {
413
+ await this.expenseEventHandler.createBulkOperationSummary(userId, accountId, count, "deleted", bulkOperationId);
414
+ }
415
+ catch (err) {
416
+ this.logger.log("[ExpenseController.bulkDeleteExpenses] Failed to create bulk summary", { accountId, error: err });
417
+ }
418
+ }
419
+ this.logger.log("[ExpenseController.bulkDeleteExpenses] Bulk delete completed", { userId, total: streamIds.length, successCount: events.length, failedCount });
420
+ return { successCount: events.length, failedCount };
421
+ }
360
422
  async getExpense(userId, streamId) {
361
423
  const expenseModel = await this.modelStore.getByStreamId(streamId);
362
424
  if (!expenseModel) {