@zeeshan60/event-processor 1.0.16 → 1.0.17
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/ActivityEventHandler.d.ts +4 -1
- package/dist/ActivityEventHandler.d.ts.map +1 -1
- package/dist/ActivityEventHandler.js +23 -7
- package/dist/ActivityLogEvents.d.ts.map +1 -1
- package/dist/ActivityLogEvents.js +1 -0
- package/dist/BaseEventHandler.d.ts +7 -0
- package/dist/BaseEventHandler.d.ts.map +1 -1
- package/dist/BaseEventHandler.js +4 -0
- package/dist/EventProcessorSDK.d.ts +4 -0
- package/dist/EventProcessorSDK.d.ts.map +1 -1
- package/dist/EventProcessorSDK.js +13 -6
- package/dist/FriendEventHandler.d.ts +4 -1
- package/dist/FriendEventHandler.d.ts.map +1 -1
- package/dist/FriendEventHandler.js +25 -13
- package/dist/GroupEventHandler.d.ts +4 -1
- package/dist/GroupEventHandler.d.ts.map +1 -1
- package/dist/GroupEventHandler.js +34 -18
- package/dist/GroupTransactionEventHandler.d.ts +4 -6
- package/dist/GroupTransactionEventHandler.d.ts.map +1 -1
- package/dist/GroupTransactionEventHandler.js +24 -291
- package/dist/TransactionEventHandler.d.ts +4 -1
- package/dist/TransactionEventHandler.d.ts.map +1 -1
- package/dist/TransactionEventHandler.js +24 -6
- package/dist/TransactionEvents.d.ts +10 -9
- package/dist/TransactionEvents.d.ts.map +1 -1
- package/dist/TransactionEvents.js +10 -12
- package/dist/UserEventHandler.d.ts +4 -1
- package/dist/UserEventHandler.d.ts.map +1 -1
- package/dist/UserEventHandler.js +25 -7
- package/dist/__tests__/test-helpers/IMActivityLogEventStore.d.ts +1 -0
- package/dist/__tests__/test-helpers/IMActivityLogEventStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMActivityLogEventStore.js +3 -0
- package/dist/__tests__/test-helpers/IMActivityLogModelStore.d.ts +2 -0
- package/dist/__tests__/test-helpers/IMActivityLogModelStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMActivityLogModelStore.js +10 -0
- package/dist/__tests__/test-helpers/IMCurrencyStore.d.ts +1 -0
- package/dist/__tests__/test-helpers/IMCurrencyStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMCurrencyStore.js +3 -0
- package/dist/__tests__/test-helpers/IMFriendModelStore.d.ts +1 -0
- package/dist/__tests__/test-helpers/IMFriendModelStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMFriendModelStore.js +7 -0
- package/dist/__tests__/test-helpers/IMGroupModelStore.d.ts +1 -0
- package/dist/__tests__/test-helpers/IMGroupModelStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMGroupModelStore.js +7 -0
- package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.d.ts +2 -0
- package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMGroupTransactionEventStore.js +18 -0
- package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.d.ts +1 -0
- package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMGroupTransactionModelStore.js +7 -0
- package/dist/__tests__/test-helpers/IMTransactionEventStore.d.ts +2 -0
- package/dist/__tests__/test-helpers/IMTransactionEventStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMTransactionEventStore.js +6 -0
- package/dist/__tests__/test-helpers/IMTransactionModelStore.d.ts +1 -0
- package/dist/__tests__/test-helpers/IMTransactionModelStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMTransactionModelStore.js +7 -0
- package/dist/__tests__/test-helpers/IMUserModelStore.d.ts +1 -0
- package/dist/__tests__/test-helpers/IMUserModelStore.d.ts.map +1 -1
- package/dist/__tests__/test-helpers/IMUserModelStore.js +7 -0
- package/dist/client/controllers/FriendController.d.ts.map +1 -1
- package/dist/client/controllers/FriendController.js +40 -4
- package/dist/client/controllers/TransactionController.d.ts +7 -2
- package/dist/client/controllers/TransactionController.d.ts.map +1 -1
- package/dist/client/controllers/TransactionController.js +90 -17
- package/dist/client/handlers/UIEventHandler.d.ts +3 -0
- package/dist/client/handlers/UIEventHandler.d.ts.map +1 -1
- package/dist/client/handlers/UIEventHandler.js +36 -0
- package/dist/common/Model.d.ts +1 -0
- package/dist/common/Model.d.ts.map +1 -1
- package/dist/contracts/friends/index.d.ts +1 -0
- package/dist/contracts/friends/index.d.ts.map +1 -1
- package/dist/contracts/groups/index.d.ts +1 -1
- package/dist/contracts/groups/index.d.ts.map +1 -1
- package/dist/contracts/transactions/index.d.ts +33 -23
- package/dist/contracts/transactions/index.d.ts.map +1 -1
- package/dist/contracts/transactions/index.js +14 -11
- package/dist/converters/ActivityLogConverters.d.ts.map +1 -1
- package/dist/converters/ActivityLogConverters.js +3 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/store/CurrencyStore.d.ts +1 -0
- package/dist/store/CurrencyStore.d.ts.map +1 -1
- package/dist/store/ModelStore.d.ts +1 -0
- package/dist/store/ModelStore.d.ts.map +1 -1
- package/dist/utils/BalanceUtil.d.ts +5 -1
- package/dist/utils/BalanceUtil.d.ts.map +1 -1
- package/dist/utils/BalanceUtil.js +9 -1
- package/dist/utils/splitTypeUtils.d.ts.map +1 -1
- package/dist/utils/splitTypeUtils.js +21 -21
- package/package.json +1 -1
- package/dist/environment.d.ts +0 -12
- package/dist/environment.d.ts.map +0 -1
- package/dist/environment.js +0 -50
|
@@ -3,8 +3,10 @@ export declare class IMActivityLogModelStore implements ActivityLogModelStore {
|
|
|
3
3
|
private models;
|
|
4
4
|
getByStreamId(streamId: string): Promise<ActivityLogModel | undefined>;
|
|
5
5
|
getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<ActivityLogModel | undefined>;
|
|
6
|
+
getLatestByUpdatedAt(): Promise<ActivityLogModel | undefined>;
|
|
6
7
|
save(model: ActivityLogModel): Promise<void>;
|
|
7
8
|
clear(): void;
|
|
8
9
|
getAllModels(): ActivityLogModel[];
|
|
10
|
+
getAll(): ActivityLogModel[];
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=IMActivityLogModelStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMActivityLogModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMActivityLogModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEhE,qBAAa,uBAAwB,YAAW,qBAAqB;IACjE,OAAO,CAAC,MAAM,CAA4C;IAEpD,aAAa,CACf,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAIlC,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQlC,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,KAAK,IAAI,IAAI;IAIb,YAAY,IAAI,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"IMActivityLogModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMActivityLogModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEhE,qBAAa,uBAAwB,YAAW,qBAAqB;IACjE,OAAO,CAAC,MAAM,CAA4C;IAEpD,aAAa,CACf,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAIlC,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQlC,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7D,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,KAAK,IAAI,IAAI;IAIb,YAAY,IAAI,gBAAgB,EAAE;IAIlC,MAAM,IAAI,gBAAgB,EAAE;CAG/B"}
|
|
@@ -15,6 +15,13 @@ class IMActivityLogModelStore {
|
|
|
15
15
|
}
|
|
16
16
|
return undefined;
|
|
17
17
|
}
|
|
18
|
+
async getLatestByUpdatedAt() {
|
|
19
|
+
const models = Array.from(this.models.values());
|
|
20
|
+
if (models.length === 0) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
|
|
24
|
+
}
|
|
18
25
|
async save(model) {
|
|
19
26
|
this.models.set(model.streamId, model);
|
|
20
27
|
}
|
|
@@ -25,5 +32,8 @@ class IMActivityLogModelStore {
|
|
|
25
32
|
getAllModels() {
|
|
26
33
|
return Array.from(this.models.values());
|
|
27
34
|
}
|
|
35
|
+
getAll() {
|
|
36
|
+
return this.getAllModels();
|
|
37
|
+
}
|
|
28
38
|
}
|
|
29
39
|
exports.IMActivityLogModelStore = IMActivityLogModelStore;
|
|
@@ -2,6 +2,7 @@ import { CurrencyRate, CurrencyStore } from "../..";
|
|
|
2
2
|
export declare class IMCurrencyStore extends CurrencyStore {
|
|
3
3
|
private currencyRate;
|
|
4
4
|
getCurrencyRates(): Promise<CurrencyRate | undefined>;
|
|
5
|
+
saveCurrencyRates(rates: CurrencyRate): Promise<void>;
|
|
5
6
|
setCurrencyRates(rate: CurrencyRate): void;
|
|
6
7
|
clear(): void;
|
|
7
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMCurrencyStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMCurrencyStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEpD,qBAAa,eAAgB,SAAQ,aAAa;IAC9C,OAAO,CAAC,YAAY,CAA2B;IAEzC,gBAAgB,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAI3D,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAI1C,KAAK,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"IMCurrencyStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMCurrencyStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEpD,qBAAa,eAAgB,SAAQ,aAAa;IAC9C,OAAO,CAAC,YAAY,CAA2B;IAEzC,gBAAgB,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAIrD,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAI1C,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -3,6 +3,7 @@ export declare class IMFriendModelStore implements FriendModelStore {
|
|
|
3
3
|
private models;
|
|
4
4
|
getByStreamId(streamId: string): Promise<FriendModel | undefined>;
|
|
5
5
|
getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<FriendModel | undefined>;
|
|
6
|
+
getLatestByUpdatedAt(): Promise<FriendModel | undefined>;
|
|
6
7
|
findByUserIdAndStreamIdAndDeletedIsFalse(userId: string, streamId: string): Promise<FriendModel | undefined>;
|
|
7
8
|
findByUserIdAndFriendIdAndDeletedIsFalse(userId: string, friendId: string): Promise<FriendModel | undefined>;
|
|
8
9
|
findByUserIdAndFriendEmailAndDeletedIsFalse(userId: string, email: string): Promise<FriendModel | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMFriendModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMFriendModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAEtD,qBAAa,kBAAmB,YAAW,gBAAgB;IACvD,OAAO,CAAC,MAAM,CAAuC;IAE/C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAKjE,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAQ7B,wCAAwC,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,wCAAwC,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,2CAA2C,CAC7C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,iDAAiD,CACnD,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,kCAAkC,CACpC,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,EAAE,CAAC;IAUnB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,MAAM,IAAI,WAAW,EAAE;IAIvB,yBAAyB,IAAI,WAAW,EAAE;IAM1C,KAAK,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"IMFriendModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMFriendModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAEtD,qBAAa,kBAAmB,YAAW,gBAAgB;IACvD,OAAO,CAAC,MAAM,CAAuC;IAE/C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAKjE,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAQ7B,oBAAoB,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAUxD,wCAAwC,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,wCAAwC,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,2CAA2C,CAC7C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,iDAAiD,CACnD,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAa7B,kCAAkC,CACpC,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,EAAE,CAAC;IAUnB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,MAAM,IAAI,WAAW,EAAE;IAIvB,yBAAyB,IAAI,WAAW,EAAE;IAM1C,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -16,6 +16,13 @@ class IMFriendModelStore {
|
|
|
16
16
|
}
|
|
17
17
|
return model;
|
|
18
18
|
}
|
|
19
|
+
async getLatestByUpdatedAt() {
|
|
20
|
+
const models = Array.from(this.models.values());
|
|
21
|
+
if (models.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
|
|
25
|
+
}
|
|
19
26
|
async findByUserIdAndStreamIdAndDeletedIsFalse(userId, streamId) {
|
|
20
27
|
for (const model of this.models.values()) {
|
|
21
28
|
if (model.userId === userId &&
|
|
@@ -3,6 +3,7 @@ export declare class IMGroupModelStore implements GroupModelStore {
|
|
|
3
3
|
private models;
|
|
4
4
|
getByStreamId(streamId: string): Promise<GroupModel | undefined>;
|
|
5
5
|
getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<GroupModel | undefined>;
|
|
6
|
+
getLatestByUpdatedAt(): Promise<GroupModel | undefined>;
|
|
6
7
|
findByUserIdAndGroupIdAndDeletedIsFalse(userId: string, groupId: string): Promise<GroupModel | undefined>;
|
|
7
8
|
findAllByGroupIdAndDeletedIsFalse(groupId: string): Promise<GroupModel[]>;
|
|
8
9
|
save(model: GroupModel): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMGroupModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAEpD,qBAAa,iBAAkB,YAAW,eAAe;IACrD,OAAO,CAAC,MAAM,CAAsC;IAE9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAKhE,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAQ5B,uCAAuC,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAa5B,iCAAiC,CACnC,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IAUlB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,IAAI,UAAU,EAAE;IAItB,yBAAyB,IAAI,UAAU,EAAE;IAMzC,KAAK,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"IMGroupModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAEpD,qBAAa,iBAAkB,YAAW,eAAe;IACrD,OAAO,CAAC,MAAM,CAAsC;IAE9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAKhE,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAQ5B,oBAAoB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAUvD,uCAAuC,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAa5B,iCAAiC,CACnC,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IAUlB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,IAAI,UAAU,EAAE;IAItB,yBAAyB,IAAI,UAAU,EAAE;IAMzC,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -16,6 +16,13 @@ class IMGroupModelStore {
|
|
|
16
16
|
}
|
|
17
17
|
return model;
|
|
18
18
|
}
|
|
19
|
+
async getLatestByUpdatedAt() {
|
|
20
|
+
const models = Array.from(this.models.values());
|
|
21
|
+
if (models.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
|
|
25
|
+
}
|
|
19
26
|
async findByUserIdAndGroupIdAndDeletedIsFalse(userId, groupId) {
|
|
20
27
|
for (const model of this.models.values()) {
|
|
21
28
|
if (model.userId === userId &&
|
|
@@ -3,6 +3,8 @@ export declare class IMGroupTransactionEventStore implements GroupTransactionEve
|
|
|
3
3
|
private events;
|
|
4
4
|
addEvent(event: GroupTransactionEvent): Promise<void>;
|
|
5
5
|
getEvents(userId: string): GroupTransactionEvent[];
|
|
6
|
+
getAll(): GroupTransactionEvent[];
|
|
7
|
+
clearSystemGenerated(): void;
|
|
6
8
|
clear(): void;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=IMGroupTransactionEventStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMGroupTransactionEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupTransactionEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,OAAO,CAAC;AAE1E,qBAAa,4BACT,YAAW,0BAA0B;IAErC,OAAO,CAAC,MAAM,CAAmD;IAE3D,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAIlD,KAAK,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"IMGroupTransactionEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupTransactionEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,OAAO,CAAC;AAE1E,qBAAa,4BACT,YAAW,0BAA0B;IAErC,OAAO,CAAC,MAAM,CAAmD;IAE3D,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAIlD,MAAM,IAAI,qBAAqB,EAAE;IAQjC,oBAAoB,IAAI,IAAI;IAa5B,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -13,6 +13,24 @@ class IMGroupTransactionEventStore {
|
|
|
13
13
|
getEvents(userId) {
|
|
14
14
|
return this.events.get(userId) || [];
|
|
15
15
|
}
|
|
16
|
+
getAll() {
|
|
17
|
+
const allEvents = [];
|
|
18
|
+
for (const userEvents of this.events.values()) {
|
|
19
|
+
allEvents.push(...userEvents);
|
|
20
|
+
}
|
|
21
|
+
return allEvents;
|
|
22
|
+
}
|
|
23
|
+
clearSystemGenerated() {
|
|
24
|
+
for (const [userId, userEvents] of this.events.entries()) {
|
|
25
|
+
const filtered = userEvents.filter((e) => e.systemGenerated !== true);
|
|
26
|
+
if (filtered.length > 0) {
|
|
27
|
+
this.events.set(userId, filtered);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.events.delete(userId);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
16
34
|
clear() {
|
|
17
35
|
this.events.clear();
|
|
18
36
|
}
|
|
@@ -3,6 +3,7 @@ export declare class IMGroupTransactionModelStore implements GroupTransactionMod
|
|
|
3
3
|
private models;
|
|
4
4
|
getByStreamId(streamId: string): Promise<GroupTransactionModel | undefined>;
|
|
5
5
|
getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<GroupTransactionModel | undefined>;
|
|
6
|
+
getLatestByUpdatedAt(): Promise<GroupTransactionModel | undefined>;
|
|
6
7
|
findAllByGroupIdAndTransactionIdAndDeletedIsFalse(groupId: string, transactionId: string): Promise<GroupTransactionModel[]>;
|
|
7
8
|
findByUserIdAndTransactionId(userId: string, transactionId: string): Promise<GroupTransactionModel | undefined>;
|
|
8
9
|
save(model: GroupTransactionModel): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMGroupTransactionModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupTransactionModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,OAAO,CAAC;AAE1E,qBAAa,4BACT,YAAW,0BAA0B;IAErC,OAAO,CAAC,MAAM,CAAiD;IAEzD,aAAa,CACf,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAKvC,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAQvC,iDAAiD,CACnD,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAc7B,4BAA4B,CAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAavC,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,MAAM,IAAI,qBAAqB,EAAE;IAIjC,yBAAyB,IAAI,qBAAqB,EAAE;IAMpD,KAAK,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"IMGroupTransactionModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMGroupTransactionModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,OAAO,CAAC;AAE1E,qBAAa,4BACT,YAAW,0BAA0B;IAErC,OAAO,CAAC,MAAM,CAAiD;IAEzD,aAAa,CACf,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAKvC,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAQvC,oBAAoB,IAAI,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAUlE,iDAAiD,CACnD,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAc7B,4BAA4B,CAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAavC,IAAI,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,MAAM,IAAI,qBAAqB,EAAE;IAIjC,yBAAyB,IAAI,qBAAqB,EAAE;IAMpD,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -16,6 +16,13 @@ class IMGroupTransactionModelStore {
|
|
|
16
16
|
}
|
|
17
17
|
return model;
|
|
18
18
|
}
|
|
19
|
+
async getLatestByUpdatedAt() {
|
|
20
|
+
const models = Array.from(this.models.values());
|
|
21
|
+
if (models.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
|
|
25
|
+
}
|
|
19
26
|
async findAllByGroupIdAndTransactionIdAndDeletedIsFalse(groupId, transactionId) {
|
|
20
27
|
const results = [];
|
|
21
28
|
for (const model of this.models.values()) {
|
|
@@ -3,7 +3,9 @@ export declare class IMTransactionEventStore implements TransactionEventStore {
|
|
|
3
3
|
private events;
|
|
4
4
|
addEvent(event: TransactionEvent): Promise<void>;
|
|
5
5
|
getEvents(): TransactionEvent[];
|
|
6
|
+
getAll(): TransactionEvent[];
|
|
6
7
|
getEventsByStreamId(streamId: string): TransactionEvent[];
|
|
8
|
+
clearSystemGenerated(): void;
|
|
7
9
|
clear(): void;
|
|
8
10
|
}
|
|
9
11
|
//# sourceMappingURL=IMTransactionEventStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMTransactionEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMTransactionEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEhE,qBAAa,uBAAwB,YAAW,qBAAqB;IACjE,OAAO,CAAC,MAAM,CAA0B;IAElC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,SAAS,IAAI,gBAAgB,EAAE;IAI/B,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAIzD,KAAK,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"IMTransactionEventStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMTransactionEventStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEhE,qBAAa,uBAAwB,YAAW,qBAAqB;IACjE,OAAO,CAAC,MAAM,CAA0B;IAElC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,SAAS,IAAI,gBAAgB,EAAE;IAI/B,MAAM,IAAI,gBAAgB,EAAE;IAI5B,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAIzD,oBAAoB,IAAI,IAAI;IAI5B,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -11,9 +11,15 @@ class IMTransactionEventStore {
|
|
|
11
11
|
getEvents() {
|
|
12
12
|
return [...this.events];
|
|
13
13
|
}
|
|
14
|
+
getAll() {
|
|
15
|
+
return this.getEvents();
|
|
16
|
+
}
|
|
14
17
|
getEventsByStreamId(streamId) {
|
|
15
18
|
return this.events.filter((event) => event.streamId === streamId);
|
|
16
19
|
}
|
|
20
|
+
clearSystemGenerated() {
|
|
21
|
+
this.events = this.events.filter((e) => e.systemGenerated !== true);
|
|
22
|
+
}
|
|
17
23
|
clear() {
|
|
18
24
|
this.events = [];
|
|
19
25
|
}
|
|
@@ -3,6 +3,7 @@ export declare class IMTransactionModelStore implements TransactionModelStore {
|
|
|
3
3
|
private models;
|
|
4
4
|
getByStreamId(streamId: string): Promise<TransactionModel | undefined>;
|
|
5
5
|
getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<TransactionModel | undefined>;
|
|
6
|
+
getLatestByUpdatedAt(): Promise<TransactionModel | undefined>;
|
|
6
7
|
findByUserAndLogicalTransactionId(userId: string, recipientUserId: string, logicalTransactionId: string): Promise<TransactionModel | undefined>;
|
|
7
8
|
findByGroupTransactionId(userId: string, groupTransactionId: string): Promise<TransactionModel[]>;
|
|
8
9
|
findByUserIdAndRecipientUserIdWhereDeletedIsFalse(userId: string, recipientUserId: string): Promise<TransactionModel[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMTransactionModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMTransactionModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEhE,qBAAa,uBAAwB,YAAW,qBAAqB;IACjE,OAAO,CAAC,MAAM,CAA4C;IAEpD,aAAa,CACf,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAKlC,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQlC,iCAAiC,CACnC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,GAC7B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAclC,wBAAwB,CAC1B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAcxB,iDAAiD,CACnD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACxB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAcxB,kCAAkC,CACpC,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAUxB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,MAAM,IAAI,gBAAgB,EAAE;IAI5B,yBAAyB,IAAI,gBAAgB,EAAE;IAM/C,KAAK,IAAI,IAAI;CAGhB"}
|
|
1
|
+
{"version":3,"file":"IMTransactionModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMTransactionModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEhE,qBAAa,uBAAwB,YAAW,qBAAqB;IACjE,OAAO,CAAC,MAAM,CAA4C;IAEpD,aAAa,CACf,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAKlC,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAQlC,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAU7D,iCAAiC,CACnC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,GAC7B,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAclC,wBAAwB,CAC1B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAcxB,iDAAiD,CACnD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACxB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAcxB,kCAAkC,CACpC,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAUxB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,MAAM,IAAI,gBAAgB,EAAE;IAI5B,yBAAyB,IAAI,gBAAgB,EAAE;IAM/C,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -16,6 +16,13 @@ class IMTransactionModelStore {
|
|
|
16
16
|
}
|
|
17
17
|
return model;
|
|
18
18
|
}
|
|
19
|
+
async getLatestByUpdatedAt() {
|
|
20
|
+
const models = Array.from(this.models.values());
|
|
21
|
+
if (models.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
|
|
25
|
+
}
|
|
19
26
|
async findByUserAndLogicalTransactionId(userId, recipientUserId, logicalTransactionId) {
|
|
20
27
|
for (const model of this.models.values()) {
|
|
21
28
|
if (model.userId === userId &&
|
|
@@ -4,6 +4,7 @@ export declare class IMUserModelStore implements UserModelStore {
|
|
|
4
4
|
private currentUser;
|
|
5
5
|
getByStreamId(streamId: string): Promise<UserModel | undefined>;
|
|
6
6
|
getByStreamIdWhereDeletedIsFalse(streamId: string): Promise<UserModel | undefined>;
|
|
7
|
+
getLatestByUpdatedAt(): Promise<UserModel | undefined>;
|
|
7
8
|
save(model: UserModel): Promise<void>;
|
|
8
9
|
findByEmail(email: string): Promise<UserModel | undefined>;
|
|
9
10
|
findByPhone(phone: string): Promise<UserModel | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IMUserModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMUserModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAElD,qBAAa,gBAAiB,YAAW,cAAc;IACnD,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,WAAW,CAAwB;IAErC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK/D,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAQ3B,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAS1D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAS1D,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IASpE,MAAM,IAAI,SAAS,EAAE;IAIrB,yBAAyB,IAAI,SAAS,EAAE;IAMxC,KAAK,IAAI,IAAI;IAIb,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI/B,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;CAOtC"}
|
|
1
|
+
{"version":3,"file":"IMUserModelStore.d.ts","sourceRoot":"","sources":["../../../src/__tests__/test-helpers/IMUserModelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAElD,qBAAa,gBAAiB,YAAW,cAAc;IACnD,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,WAAW,CAAwB;IAErC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK/D,gCAAgC,CAClC,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAQ3B,oBAAoB,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAUtD,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAS1D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAS1D,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IASpE,MAAM,IAAI,SAAS,EAAE;IAIrB,yBAAyB,IAAI,SAAS,EAAE;IAMxC,KAAK,IAAI,IAAI;IAIb,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI/B,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;CAOtC"}
|
|
@@ -16,6 +16,13 @@ class IMUserModelStore {
|
|
|
16
16
|
}
|
|
17
17
|
return model;
|
|
18
18
|
}
|
|
19
|
+
async getLatestByUpdatedAt() {
|
|
20
|
+
const models = Array.from(this.models.values());
|
|
21
|
+
if (models.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return models.reduce((latest, current) => current.updatedAt > latest.updatedAt ? current : latest);
|
|
25
|
+
}
|
|
19
26
|
async save(model) {
|
|
20
27
|
this.models.set(model.streamId, model);
|
|
21
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FriendController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/FriendController.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAMjC,qBAAa,gBAAgB;IACzB,OAAO,KAAK,UAAU,GAGrB;IAED,OAAO,KAAK,qBAAqB,GAGhC;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,KAAK,WAAW,GAEtB;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FriendController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/FriendController.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAMjC,qBAAa,gBAAgB;IACzB,OAAO,KAAK,UAAU,GAGrB;IAED,OAAO,KAAK,qBAAqB,GAGhC;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,KAAK,WAAW,GAEtB;IAEK,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAqDlE,YAAY,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAgGV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkCpE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU9D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA4C7D,OAAO,CAAC,gBAAgB;CAoB3B"}
|
|
@@ -30,6 +30,18 @@ class FriendController {
|
|
|
30
30
|
if (!request.email && !request.phoneNumber) {
|
|
31
31
|
throw new Error("Either email or phoneNumber must be provided");
|
|
32
32
|
}
|
|
33
|
+
if (request.email) {
|
|
34
|
+
const existingFriendByEmail = await this.modelStore.findByUserIdAndFriendEmailAndDeletedIsFalse(userId, request.email.trim());
|
|
35
|
+
if (existingFriendByEmail) {
|
|
36
|
+
throw new Error(`Friend with email ${request.email} already exists`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (request.phoneNumber) {
|
|
40
|
+
const existingFriendByPhone = await this.modelStore.findByUserIdAndFriendPhoneNumberAndDeletedIsFalse(userId, request.phoneNumber.trim());
|
|
41
|
+
if (existingFriendByPhone) {
|
|
42
|
+
throw new Error(`Friend with phone number ${request.phoneNumber} already exists`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
33
45
|
const streamId = (0, uuid_1.v4)();
|
|
34
46
|
const createdAt = new Date();
|
|
35
47
|
const event = new FriendEvents_1.FriendCreated({
|
|
@@ -53,11 +65,30 @@ class FriendController {
|
|
|
53
65
|
let friendModel = await this.modelStore.findByUserIdAndFriendIdAndDeletedIsFalse(userId, friendId);
|
|
54
66
|
if (!friendModel) {
|
|
55
67
|
//fallback to find by streamId
|
|
56
|
-
friendModel =
|
|
68
|
+
friendModel =
|
|
69
|
+
await this.modelStore.findByUserIdAndStreamIdAndDeletedIsFalse(userId, friendId);
|
|
57
70
|
}
|
|
58
71
|
if (!friendModel) {
|
|
59
72
|
throw new Error(`Friend not found: ${friendId}`);
|
|
60
73
|
}
|
|
74
|
+
if (request.email !== undefined &&
|
|
75
|
+
request.email.trim() !== "" &&
|
|
76
|
+
request.email !== friendModel.friendEmail) {
|
|
77
|
+
const existingFriendByEmail = await this.modelStore.findByUserIdAndFriendEmailAndDeletedIsFalse(userId, request.email.trim());
|
|
78
|
+
if (existingFriendByEmail &&
|
|
79
|
+
existingFriendByEmail.streamId !== friendModel.streamId) {
|
|
80
|
+
throw new Error(`Another friend with email ${request.email} already exists`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (request.phoneNumber !== undefined &&
|
|
84
|
+
request.phoneNumber.trim() !== "" &&
|
|
85
|
+
request.phoneNumber !== friendModel.friendPhoneNumber) {
|
|
86
|
+
const existingFriendByPhone = await this.modelStore.findByUserIdAndFriendPhoneNumberAndDeletedIsFalse(userId, request.phoneNumber.trim());
|
|
87
|
+
if (existingFriendByPhone &&
|
|
88
|
+
existingFriendByPhone.streamId !== friendModel.streamId) {
|
|
89
|
+
throw new Error(`Another friend with phone number ${request.phoneNumber} already exists`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
61
92
|
const hasChanges = (request.email !== undefined &&
|
|
62
93
|
request.email.trim() !== "" &&
|
|
63
94
|
request.email !== friendModel.friendEmail) ||
|
|
@@ -91,7 +122,8 @@ class FriendController {
|
|
|
91
122
|
let friendModel = await this.modelStore.findByUserIdAndFriendIdAndDeletedIsFalse(userId, friendId);
|
|
92
123
|
if (!friendModel) {
|
|
93
124
|
//fallback to find by streamId
|
|
94
|
-
friendModel =
|
|
125
|
+
friendModel =
|
|
126
|
+
await this.modelStore.findByUserIdAndStreamIdAndDeletedIsFalse(userId, friendId);
|
|
95
127
|
}
|
|
96
128
|
if (!friendModel) {
|
|
97
129
|
throw new Error(`Friend not found: ${friendId}`);
|
|
@@ -112,7 +144,8 @@ class FriendController {
|
|
|
112
144
|
let friendModel = await this.modelStore.findByUserIdAndFriendIdAndDeletedIsFalse(userId, friendId);
|
|
113
145
|
if (!friendModel) {
|
|
114
146
|
//fallback to find by streamId
|
|
115
|
-
friendModel =
|
|
147
|
+
friendModel =
|
|
148
|
+
await this.modelStore.findByUserIdAndStreamIdAndDeletedIsFalse(userId, friendId);
|
|
116
149
|
}
|
|
117
150
|
if (!friendModel) {
|
|
118
151
|
throw new Error(`Friend not found: ${friendId}`);
|
|
@@ -132,6 +165,7 @@ class FriendController {
|
|
|
132
165
|
async getAllFriends(userId) {
|
|
133
166
|
const friendModels = await this.modelStore.findAllByUserIdWhereDeletedIsFalse(userId);
|
|
134
167
|
const allTransactions = await this.transactionModelStore.findAllByUserIdWhereDeletedIsFalse(userId);
|
|
168
|
+
// todo: balance calculation should not use firestore it should always read from sqlite model store
|
|
135
169
|
const mainBalance = await this.balanceUtil.calculateBalance(allTransactions, userId);
|
|
136
170
|
const friendsWithBalance = await Promise.all(friendModels.map(async (friendModel) => {
|
|
137
171
|
const recipientUserId = friendModel.friendId ?? friendModel.streamId;
|
|
@@ -140,7 +174,8 @@ class FriendController {
|
|
|
140
174
|
return this.toFriendResponse(friendModel, friendBalance);
|
|
141
175
|
}));
|
|
142
176
|
return {
|
|
143
|
-
friends: friendsWithBalance,
|
|
177
|
+
friends: friendsWithBalance.sort((a, b) => new Date(b.createdAt).getTime() -
|
|
178
|
+
new Date(a.createdAt).getTime()),
|
|
144
179
|
balance: mainBalance,
|
|
145
180
|
};
|
|
146
181
|
}
|
|
@@ -157,6 +192,7 @@ class FriendController {
|
|
|
157
192
|
email: friendModel.friendEmail,
|
|
158
193
|
phone: friendModel.friendPhoneNumber,
|
|
159
194
|
balance: balance ?? emptyBalance,
|
|
195
|
+
createdAt: friendModel.createdAt,
|
|
160
196
|
};
|
|
161
197
|
}
|
|
162
198
|
}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
import { TransactionCreateRequest,
|
|
1
|
+
import { TransactionCreateRequest, Transaction, TransactionUpdateRequest, TransactionsResponse } from "../../contracts/transactions";
|
|
2
2
|
export declare class TransactionController {
|
|
3
3
|
private get modelStore();
|
|
4
4
|
private get transactionEventHandler();
|
|
5
5
|
private get userModelStore();
|
|
6
6
|
private get currencyStore();
|
|
7
7
|
private get balanceUtil();
|
|
8
|
+
private get friendModelStore();
|
|
8
9
|
private calculateAmount;
|
|
10
|
+
private buildUserNameMap;
|
|
9
11
|
addTransaction(userId: string, request: TransactionCreateRequest): Promise<string>;
|
|
10
12
|
updateTransaction(userId: string, transactionId: string, request: TransactionUpdateRequest): Promise<void>;
|
|
11
13
|
deleteTransaction(userId: string, transactionId: string): Promise<void>;
|
|
12
|
-
getTransaction(userId: string, transactionId: string): Promise<
|
|
14
|
+
getTransaction(userId: string, transactionId: string): Promise<Transaction>;
|
|
13
15
|
getTransactionsByMonth(userId: string, friendId: string, timeZone: string): Promise<TransactionsResponse>;
|
|
14
16
|
private groupTransactionsByMonth;
|
|
15
17
|
private startOfMonth;
|
|
16
18
|
private toTransactionResponse;
|
|
19
|
+
private getUserName;
|
|
20
|
+
private mapHistoryToResponse;
|
|
21
|
+
private mapChangeTypeToTransactionChangeType;
|
|
17
22
|
}
|
|
18
23
|
//# sourceMappingURL=TransactionController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/TransactionController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TransactionController.d.ts","sourceRoot":"","sources":["../../../src/client/controllers/TransactionController.ts"],"names":[],"mappings":"AAaA,OAAO,EACH,wBAAwB,EACxB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EAMvB,MAAM,8BAA8B,CAAC;AAKtC,qBAAa,qBAAqB;IAC9B,OAAO,KAAK,UAAU,GAGrB;IAED,OAAO,KAAK,uBAAuB,GAElC;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,gBAAgB,GAG3B;IAED,OAAO,CAAC,eAAe;YAYT,gBAAgB;IAgBxB,cAAc,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,wBAAwB,GAClC,OAAO,CAAC,MAAM,CAAC;IAgCZ,iBAAiB,CACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,wBAAwB,GAClC,OAAO,CAAC,IAAI,CAAC;IAuHV,iBAAiB,CACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC;IA6BV,cAAc,CAChB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,WAAW,CAAC;IAgCjB,sBAAsB,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC;IAiDhC,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,qBAAqB;IA8D7B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,oCAAoC;CAkB/C"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TransactionController = void 0;
|
|
4
4
|
const TransactionEvents_1 = require("../../TransactionEvents");
|
|
5
|
+
const transactions_1 = require("../../contracts/transactions");
|
|
5
6
|
const EventProcessorSDK_1 = require("../../EventProcessorSDK");
|
|
6
7
|
const uuid_1 = require("uuid");
|
|
7
8
|
const BalanceUtil_1 = require("../../utils/BalanceUtil");
|
|
@@ -22,15 +23,32 @@ class TransactionController {
|
|
|
22
23
|
get balanceUtil() {
|
|
23
24
|
return new BalanceUtil_1.BalanceUtil(this.userModelStore, this.currencyStore);
|
|
24
25
|
}
|
|
26
|
+
get friendModelStore() {
|
|
27
|
+
return EventProcessorSDK_1.EventProcessorSDK.getInstance().getStoreConfig()
|
|
28
|
+
.friendModelStore;
|
|
29
|
+
}
|
|
25
30
|
calculateAmount(splitType, totalAmount) {
|
|
26
|
-
if (splitType === TransactionEvents_1.
|
|
27
|
-
splitType === TransactionEvents_1.
|
|
28
|
-
splitType === TransactionEvents_1.
|
|
29
|
-
splitType === TransactionEvents_1.
|
|
31
|
+
if (splitType === TransactionEvents_1.SplitTypeEnum.TheyOweYouAll ||
|
|
32
|
+
splitType === TransactionEvents_1.SplitTypeEnum.YouOweThemAll ||
|
|
33
|
+
splitType === TransactionEvents_1.SplitTypeEnum.YouPaidToSettle ||
|
|
34
|
+
splitType === TransactionEvents_1.SplitTypeEnum.TheyPaidToSettle) {
|
|
30
35
|
return totalAmount;
|
|
31
36
|
}
|
|
32
37
|
return totalAmount / 2;
|
|
33
38
|
}
|
|
39
|
+
async buildUserNameMap(userId) {
|
|
40
|
+
const friends = await this.friendModelStore.findAllByUserIdWhereDeletedIsFalse(userId);
|
|
41
|
+
const nameMap = new Map();
|
|
42
|
+
for (const friend of friends) {
|
|
43
|
+
// Map friendId (registered user) to display name
|
|
44
|
+
if (friend.friendId) {
|
|
45
|
+
nameMap.set(friend.friendId, friend.friendDisplayName);
|
|
46
|
+
}
|
|
47
|
+
// Also map streamId (for placeholder friends) to display name
|
|
48
|
+
nameMap.set(friend.streamId, friend.friendDisplayName);
|
|
49
|
+
}
|
|
50
|
+
return nameMap;
|
|
51
|
+
}
|
|
34
52
|
async addTransaction(userId, request) {
|
|
35
53
|
const streamId = (0, uuid_1.v4)();
|
|
36
54
|
const createdAt = new Date();
|
|
@@ -181,7 +199,12 @@ class TransactionController {
|
|
|
181
199
|
if (transactionModel.userId !== userId) {
|
|
182
200
|
throw new Error(`Unauthorized to view transaction: ${transactionId}`);
|
|
183
201
|
}
|
|
184
|
-
|
|
202
|
+
// Fetch user, currency rates, and friend names once
|
|
203
|
+
const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
|
|
204
|
+
const toCurrency = user?.currency ?? "USD";
|
|
205
|
+
const currencyRates = (await this.currencyStore.getCurrencyRates())?.rates ?? {};
|
|
206
|
+
const userNameMap = await this.buildUserNameMap(userId);
|
|
207
|
+
return this.toTransactionResponse(transactionModel, userId, toCurrency, currencyRates, userNameMap);
|
|
185
208
|
}
|
|
186
209
|
async getTransactionsByMonth(userId, friendId, timeZone) {
|
|
187
210
|
if (!timeZone || timeZone.trim() === "") {
|
|
@@ -195,10 +218,15 @@ class TransactionController {
|
|
|
195
218
|
}
|
|
196
219
|
const transactions = await this.modelStore.findByUserIdAndRecipientUserIdWhereDeletedIsFalse(userId, friendId);
|
|
197
220
|
const balance = await this.balanceUtil.calculateBalance(transactions, userId);
|
|
221
|
+
// Fetch user, currency rates, and friend names once for all conversions
|
|
222
|
+
const user = await this.userModelStore.getByStreamIdWhereDeletedIsFalse(userId);
|
|
223
|
+
const toCurrency = user?.currency ?? "USD";
|
|
224
|
+
const currencyRates = (await this.currencyStore.getCurrencyRates())?.rates ?? {};
|
|
225
|
+
const userNameMap = await this.buildUserNameMap(userId);
|
|
198
226
|
const sortedTransactions = transactions
|
|
199
227
|
.sort((a, b) => new Date(b.transactionDate).getTime() -
|
|
200
228
|
new Date(a.transactionDate).getTime())
|
|
201
|
-
.map((t) => this.toTransactionResponse(t));
|
|
229
|
+
.map((t) => this.toTransactionResponse(t, userId, toCurrency, currencyRates, userNameMap));
|
|
202
230
|
const groupedByMonth = this.groupTransactionsByMonth(sortedTransactions, timeZone);
|
|
203
231
|
return {
|
|
204
232
|
balance,
|
|
@@ -234,7 +262,9 @@ class TransactionController {
|
|
|
234
262
|
});
|
|
235
263
|
return new Date(`${year}-${month}-01T00:00:00.000Z`).toISOString();
|
|
236
264
|
}
|
|
237
|
-
toTransactionResponse(transactionModel) {
|
|
265
|
+
toTransactionResponse(transactionModel, currentUserId, toCurrency, rates, userNameMap) {
|
|
266
|
+
const convertedAmount = this.balanceUtil.convertAmount(transactionModel.amount, transactionModel.currency, toCurrency, rates);
|
|
267
|
+
const history = this.mapHistoryToResponse(transactionModel.history, currentUserId, userNameMap);
|
|
238
268
|
return {
|
|
239
269
|
date: transactionModel.transactionDate.toISOString(),
|
|
240
270
|
description: transactionModel.description,
|
|
@@ -249,27 +279,70 @@ class TransactionController {
|
|
|
249
279
|
currency: transactionModel.currency,
|
|
250
280
|
isOwed: transactionModel.isOwed,
|
|
251
281
|
},
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
photoUrl: undefined,
|
|
257
|
-
name: undefined,
|
|
282
|
+
defaultCurrencyAmount: {
|
|
283
|
+
amount: convertedAmount.amount,
|
|
284
|
+
currency: convertedAmount.currency,
|
|
285
|
+
isOwed: transactionModel.isOwed,
|
|
258
286
|
},
|
|
259
|
-
|
|
260
|
-
history: [],
|
|
287
|
+
history,
|
|
261
288
|
createdAt: transactionModel.createdAt.toISOString(),
|
|
262
289
|
updatedAt: transactionModel.updatedAt.toISOString(),
|
|
263
290
|
createdBy: {
|
|
264
291
|
id: transactionModel.createdBy,
|
|
265
|
-
name:
|
|
292
|
+
name: this.getUserName(transactionModel.createdBy, currentUserId, userNameMap),
|
|
266
293
|
},
|
|
267
294
|
updatedBy: {
|
|
268
295
|
id: transactionModel.updatedBy,
|
|
269
|
-
name:
|
|
296
|
+
name: this.getUserName(transactionModel.updatedBy, currentUserId, userNameMap),
|
|
270
297
|
},
|
|
271
298
|
deleted: transactionModel.deleted,
|
|
272
299
|
};
|
|
273
300
|
}
|
|
301
|
+
getUserName(userId, currentUserId, userNameMap) {
|
|
302
|
+
if (userId === currentUserId) {
|
|
303
|
+
return "You";
|
|
304
|
+
}
|
|
305
|
+
return userNameMap.get(userId) ?? "User";
|
|
306
|
+
}
|
|
307
|
+
mapHistoryToResponse(history, currentUserId, userNameMap) {
|
|
308
|
+
const grouped = new Map();
|
|
309
|
+
for (const change of history.changes) {
|
|
310
|
+
const changedByName = this.getUserName(change.changedBy, currentUserId, userNameMap);
|
|
311
|
+
const dto = {
|
|
312
|
+
date: change.changedAt.toISOString(),
|
|
313
|
+
changedBy: change.changedBy,
|
|
314
|
+
changedByName,
|
|
315
|
+
oldValue: String(change.oldValue),
|
|
316
|
+
newValue: String(change.newValue),
|
|
317
|
+
type: this.mapChangeTypeToTransactionChangeType(change.type),
|
|
318
|
+
};
|
|
319
|
+
const key = `${change.changedBy}_${change.changedAt.toISOString()}`;
|
|
320
|
+
if (!grouped.has(key)) {
|
|
321
|
+
grouped.set(key, []);
|
|
322
|
+
}
|
|
323
|
+
grouped.get(key).push(dto);
|
|
324
|
+
}
|
|
325
|
+
return Array.from(grouped.entries()).map(([key, changes]) => ({
|
|
326
|
+
changedBy: changes[0].changedBy,
|
|
327
|
+
changedByName: changes[0].changedByName,
|
|
328
|
+
changes,
|
|
329
|
+
}));
|
|
330
|
+
}
|
|
331
|
+
mapChangeTypeToTransactionChangeType(type) {
|
|
332
|
+
switch (type) {
|
|
333
|
+
case "DESCRIPTION_UPDATED":
|
|
334
|
+
return transactions_1.TransactionChangeTypeEnum.DESCRIPTION;
|
|
335
|
+
case "AMOUNT_UPDATED":
|
|
336
|
+
return transactions_1.TransactionChangeTypeEnum.AMOUNT;
|
|
337
|
+
case "CURRENCY_UPDATED":
|
|
338
|
+
return transactions_1.TransactionChangeTypeEnum.CURRENCY;
|
|
339
|
+
case "SPLIT_TYPE_UPDATED":
|
|
340
|
+
return transactions_1.TransactionChangeTypeEnum.SPLIT_TYPE;
|
|
341
|
+
case "TRANSACTION_DATE_UPDATED":
|
|
342
|
+
return transactions_1.TransactionChangeTypeEnum.TRANSACTION_DATE;
|
|
343
|
+
default:
|
|
344
|
+
return transactions_1.TransactionChangeTypeEnum.DESCRIPTION;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
274
347
|
}
|
|
275
348
|
exports.TransactionController = TransactionController;
|
|
@@ -2,5 +2,8 @@ import { Event } from "../../index";
|
|
|
2
2
|
export declare class UIEventHandler {
|
|
3
3
|
constructor();
|
|
4
4
|
handleFirestoreEvent(event: Event): Promise<void>;
|
|
5
|
+
handleFirestoreEvents(events: Event[]): Promise<void>;
|
|
6
|
+
handleSystemSettingUpdate(settingType: string, payload: unknown): Promise<void>;
|
|
7
|
+
private groupEventsByType;
|
|
5
8
|
}
|
|
6
9
|
//# sourceMappingURL=UIEventHandler.d.ts.map
|