cmp-aws-database 2.1.2-dev.4 → 2.1.2-dev.40

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 (41) hide show
  1. package/dist/config/table-names.d.ts +6 -0
  2. package/dist/config/table-names.js +7 -1
  3. package/dist/customer-user/accompaniments/accompaniments-model.d.ts +1 -0
  4. package/dist/customer-user/accompaniments/accompaniments-model.js +5 -1
  5. package/dist/customer-user/add-ons/add-ons-model.d.ts +2 -0
  6. package/dist/customer-user/add-ons/add-ons-model.js +9 -1
  7. package/dist/customer-user/browse-history/browse-history-dao.d.ts +122 -0
  8. package/dist/customer-user/browse-history/browse-history-dao.js +173 -0
  9. package/dist/customer-user/browse-history/browse-history-model.d.ts +30 -0
  10. package/dist/customer-user/browse-history/browse-history-model.js +114 -0
  11. package/dist/customer-user/cart/cart-model.d.ts +6 -0
  12. package/dist/customer-user/cart/cart-model.js +21 -2
  13. package/dist/customer-user/catalogue/catalogue-items-dao.d.ts +14 -11
  14. package/dist/customer-user/catalogue/catalogue-items-dao.js +69 -46
  15. package/dist/customer-user/catalogue/catalogue-items-model.js +7 -2
  16. package/dist/customer-user/category/category-dao.d.ts +29 -0
  17. package/dist/customer-user/category/category-dao.js +52 -1
  18. package/dist/customer-user/category/category-model.d.ts +1 -0
  19. package/dist/customer-user/category/category-model.js +5 -1
  20. package/dist/customer-user/cutlery/cutlery-model.d.ts +2 -0
  21. package/dist/customer-user/cutlery/cutlery-model.js +9 -1
  22. package/dist/customer-user/default-platter/default-platters-model.d.ts +2 -0
  23. package/dist/customer-user/default-platter/default-platters-model.js +9 -1
  24. package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.d.ts +1 -0
  25. package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.js +5 -1
  26. package/dist/customer-user/order-module/order/order-model.d.ts +9 -0
  27. package/dist/customer-user/order-module/order/order-model.js +33 -2
  28. package/dist/customer-user/order-module/plate-order/plate-order-model.d.ts +6 -0
  29. package/dist/customer-user/order-module/plate-order/plate-order-model.js +22 -2
  30. package/dist/customer-user/resume-journey/resume-journey-model.d.ts +4 -0
  31. package/dist/customer-user/resume-journey/resume-journey-model.js +17 -1
  32. package/dist/customer-user/testing-session/testing-session-dao.d.ts +86 -0
  33. package/dist/customer-user/testing-session/testing-session-dao.js +149 -0
  34. package/dist/customer-user/testing-session/testing-session-model.d.ts +30 -0
  35. package/dist/customer-user/testing-session/testing-session-model.js +104 -0
  36. package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.d.ts +114 -0
  37. package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.js +225 -0
  38. package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.d.ts +21 -0
  39. package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.js +70 -0
  40. package/index.js +3 -1
  41. package/package.json +1 -1
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.testingSessionDao = void 0;
7
+ const dynamoose_1 = __importDefault(require("dynamoose"));
8
+ const base_dynamoose_dao_1 = require("../../base-dynamoose-dao");
9
+ const testing_session_model_1 = require("./testing-session-model");
10
+ /**
11
+ * DAO for tasting / testing session bookings.
12
+ *
13
+ * Table keys: `testingSessionId` (PK).
14
+ * Lookups:
15
+ * - `stageIndex` → all sessions by `stage`
16
+ * - `userIdIndex` → all sessions for a `userId`
17
+ * - `userIdStageIndex` → sessions for `userId` + `stage`
18
+ */
19
+ class TestingSessionDao extends base_dynamoose_dao_1.GenericDynamooseDAO {
20
+ constructor() {
21
+ super(testing_session_model_1.TestingSessionModel, "testingSessionId");
22
+ /**
23
+ * Creates one testing session record.
24
+ *
25
+ * Use when: booking a new tasting/testing session.
26
+ * - `testingSessionId` auto-generates if omitted.
27
+ *
28
+ * @example
29
+ * await testingSessionDao.save({
30
+ * userId: "user-123",
31
+ * testingDate: "2026-06-20",
32
+ * testingTime: "18:30",
33
+ * visitDurationMinutes: 120,
34
+ * venueAddress: "Hyderabad, Telangana",
35
+ * locationUrl: "https://maps.google.com/...",
36
+ * stage: "CONFIRMED",
37
+ * preference: "VEG",
38
+ * noOfGuestVisit: 4
39
+ * });
40
+ */
41
+ this.save = async (item, authContext) => {
42
+ return super.save(item, authContext);
43
+ };
44
+ /**
45
+ * Updates one testing session by `testingSessionId`.
46
+ *
47
+ * Use when: rescheduling, cancelling, or marking session as completed.
48
+ *
49
+ * @example
50
+ * await testingSessionDao.update("session-uuid", { stage: "COMPLETED" });
51
+ */
52
+ this.update = async (testingSessionId, updates, authContext) => {
53
+ const updated = await testing_session_model_1.TestingSessionModel.update({ testingSessionId }, {
54
+ ...updates,
55
+ updated_time: new Date(),
56
+ updated_user: authContext?.userSub
57
+ }, {
58
+ condition: new dynamoose_1.default.Condition().attribute("testingSessionId").exists()
59
+ });
60
+ return updated;
61
+ };
62
+ /**
63
+ * Fetches one testing session by primary key.
64
+ *
65
+ * @example
66
+ * const session = await testingSessionDao.getById("session-uuid");
67
+ */
68
+ this.getById = async (testingSessionId) => this.get(testingSessionId);
69
+ /**
70
+ * Lists testing sessions by `stage` (GSI `stageIndex`).
71
+ *
72
+ * @example
73
+ * const confirmed = await testingSessionDao.listByStage("CONFIRMED", 20);
74
+ */
75
+ this.listByStage = async (stage, limit, token) => {
76
+ const decodedToken = this.decode(token);
77
+ let queryBuilder = testing_session_model_1.TestingSessionModel.query("stage").eq(stage).using("stageIndex");
78
+ if (decodedToken) {
79
+ queryBuilder = queryBuilder.startAt(decodedToken);
80
+ }
81
+ if (typeof limit === "number") {
82
+ queryBuilder = queryBuilder.limit(limit);
83
+ }
84
+ const queryResult = await queryBuilder.exec();
85
+ return {
86
+ items: queryResult,
87
+ nextToken: await this.encode(queryResult.lastKey)
88
+ };
89
+ };
90
+ /**
91
+ * Lists all testing sessions for a user (GSI `userIdIndex`).
92
+ *
93
+ * Use when: user profile / my-sessions screen without stage filter.
94
+ *
95
+ * @example
96
+ * const sessions = await testingSessionDao.listByUserId("user-123", 20);
97
+ */
98
+ this.listByUserId = async (userId, limit, token) => {
99
+ const decodedToken = this.decode(token);
100
+ let queryBuilder = testing_session_model_1.TestingSessionModel.query("userId").eq(userId).using("userIdIndex");
101
+ if (decodedToken) {
102
+ queryBuilder = queryBuilder.startAt(decodedToken);
103
+ }
104
+ if (typeof limit === "number") {
105
+ queryBuilder = queryBuilder.limit(limit);
106
+ }
107
+ const queryResult = await queryBuilder.exec();
108
+ return {
109
+ items: queryResult,
110
+ nextToken: await this.encode(queryResult.lastKey)
111
+ };
112
+ };
113
+ /**
114
+ * Lists testing sessions for a user filtered by `stage` (GSI `userIdStageIndex`).
115
+ *
116
+ * Use when: showing only confirmed/cancelled/completed sessions for one user.
117
+ *
118
+ * @example
119
+ * const confirmed = await testingSessionDao.listByUserIdAndStage("user-123", "CONFIRMED", 20);
120
+ */
121
+ this.listByUserIdAndStage = async (userId, stage, limit, token) => {
122
+ const decodedToken = this.decode(token);
123
+ let queryBuilder = testing_session_model_1.TestingSessionModel.query("userId")
124
+ .eq(userId)
125
+ .where("stage")
126
+ .eq(stage)
127
+ .using("userIdStageIndex");
128
+ if (decodedToken) {
129
+ queryBuilder = queryBuilder.startAt(decodedToken);
130
+ }
131
+ if (typeof limit === "number") {
132
+ queryBuilder = queryBuilder.limit(limit);
133
+ }
134
+ const queryResult = await queryBuilder.exec();
135
+ return {
136
+ items: queryResult,
137
+ nextToken: await this.encode(queryResult.lastKey)
138
+ };
139
+ };
140
+ /**
141
+ * Deletes one testing session by primary key.
142
+ */
143
+ this.deleteById = async (testingSessionId) => {
144
+ await this.delete(testingSessionId);
145
+ };
146
+ }
147
+ }
148
+ exports.testingSessionDao = new TestingSessionDao();
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy1zZXNzaW9uLWRhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXN0b21lci11c2VyL3Rlc3Rpbmctc2Vzc2lvbi90ZXN0aW5nLXNlc3Npb24tZGFvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUFrQztBQUNsQyxpRUFBMEU7QUFFMUUsbUVBS2lDO0FBT2pDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxpQkFBa0IsU0FBUSx3Q0FBbUM7SUFDL0Q7UUFDSSxLQUFLLENBQUMsMkNBQW1CLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUduRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBa0JHO1FBQ0gsU0FBSSxHQUFHLEtBQUssRUFBRSxJQUErQixFQUFFLFdBQXlCLEVBQTJCLEVBQUU7WUFDakcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7V0FPRztRQUNILFdBQU0sR0FBRyxLQUFLLEVBQ1YsZ0JBQXdCLEVBQ3hCLE9BQWdDLEVBQ2hDLFdBQXlCLEVBQ0YsRUFBRTtZQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLDJDQUFtQixDQUFDLE1BQU0sQ0FDNUMsRUFBRSxnQkFBZ0IsRUFBRSxFQUNwQjtnQkFDSSxHQUFHLE9BQU87Z0JBQ1YsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUN4QixZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU87YUFDckMsRUFDRDtnQkFDSSxTQUFTLEVBQUUsSUFBSSxtQkFBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUM5RSxDQUNKLENBQUM7WUFDRixPQUFPLE9BQW9DLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUY7Ozs7O1dBS0c7UUFDSCxZQUFPLEdBQUcsS0FBSyxFQUFFLGdCQUF3QixFQUFrQyxFQUFFLENB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QUFDO1lBQzlDLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLFdBQTBDO2dCQUNqRCxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFnQyxDQUFDO2FBQzdFLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRjs7V0FFRztRQUNILGVBQVUsR0FBRyxLQUFLLEVBQUUsZ0JBQXdCLEVBQWlCLEVBQUU7WUFDM0QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDO0lBckpGLENBQUM7Q0FzSko7QUFFWSxRQUFBLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkeW5hbW9vc2UgZnJvbSBcImR5bmFtb29zZVwiO1xuaW1wb3J0IHsgRHluYW1vS2V5LCBHZW5lcmljRHluYW1vb3NlREFPIH0gZnJvbSBcIi4uLy4uL2Jhc2UtZHluYW1vb3NlLWRhb1wiO1xuaW1wb3J0IHsgQXV0aENvbnRleHQgfSBmcm9tIFwiLi4vLi4vYmFzZS1keW5hbW9vc2UtbW9kZWxcIjtcbmltcG9ydCB7XG4gICAgQ3JlYXRlVGVzdGluZ1Nlc3Npb25JbnB1dCxcbiAgICBUZXN0aW5nU2Vzc2lvbixcbiAgICBUZXN0aW5nU2Vzc2lvbk1vZGVsLFxuICAgIFRlc3RpbmdTZXNzaW9uU3RhZ2Vcbn0gZnJvbSBcIi4vdGVzdGluZy1zZXNzaW9uLW1vZGVsXCI7XG5cbnR5cGUgTGlzdFJlc3VsdCA9IHtcbiAgICBpdGVtczogVGVzdGluZ1Nlc3Npb25bXTtcbiAgICBuZXh0VG9rZW4/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERBTyBmb3IgdGFzdGluZyAvIHRlc3Rpbmcgc2Vzc2lvbiBib29raW5ncy5cbiAqXG4gKiBUYWJsZSBrZXlzOiBgdGVzdGluZ1Nlc3Npb25JZGAgKFBLKS5cbiAqIExvb2t1cHM6XG4gKiAtIGBzdGFnZUluZGV4YCDihpIgYWxsIHNlc3Npb25zIGJ5IGBzdGFnZWBcbiAqIC0gYHVzZXJJZEluZGV4YCDihpIgYWxsIHNlc3Npb25zIGZvciBhIGB1c2VySWRgXG4gKiAtIGB1c2VySWRTdGFnZUluZGV4YCDihpIgc2Vzc2lvbnMgZm9yIGB1c2VySWRgICsgYHN0YWdlYFxuICovXG5jbGFzcyBUZXN0aW5nU2Vzc2lvbkRhbyBleHRlbmRzIEdlbmVyaWNEeW5hbW9vc2VEQU88VGVzdGluZ1Nlc3Npb24+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoVGVzdGluZ1Nlc3Npb25Nb2RlbCwgXCJ0ZXN0aW5nU2Vzc2lvbklkXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgb25lIHRlc3Rpbmcgc2Vzc2lvbiByZWNvcmQuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogYm9va2luZyBhIG5ldyB0YXN0aW5nL3Rlc3Rpbmcgc2Vzc2lvbi5cbiAgICAgKiAtIGB0ZXN0aW5nU2Vzc2lvbklkYCBhdXRvLWdlbmVyYXRlcyBpZiBvbWl0dGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhd2FpdCB0ZXN0aW5nU2Vzc2lvbkRhby5zYXZlKHtcbiAgICAgKiAgICAgdXNlcklkOiBcInVzZXItMTIzXCIsXG4gICAgICogICAgIHRlc3RpbmdEYXRlOiBcIjIwMjYtMDYtMjBcIixcbiAgICAgKiAgICAgdGVzdGluZ1RpbWU6IFwiMTg6MzBcIixcbiAgICAgKiAgICAgdmlzaXREdXJhdGlvbk1pbnV0ZXM6IDEyMCxcbiAgICAgKiAgICAgdmVudWVBZGRyZXNzOiBcIkh5ZGVyYWJhZCwgVGVsYW5nYW5hXCIsXG4gICAgICogICAgIGxvY2F0aW9uVXJsOiBcImh0dHBzOi8vbWFwcy5nb29nbGUuY29tLy4uLlwiLFxuICAgICAqICAgICBzdGFnZTogXCJDT05GSVJNRURcIixcbiAgICAgKiAgICAgcHJlZmVyZW5jZTogXCJWRUdcIixcbiAgICAgKiAgICAgbm9PZkd1ZXN0VmlzaXQ6IDRcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBzYXZlID0gYXN5bmMgKGl0ZW06IENyZWF0ZVRlc3RpbmdTZXNzaW9uSW5wdXQsIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHQpOiBQcm9taXNlPFRlc3RpbmdTZXNzaW9uPiA9PiB7XG4gICAgICAgIHJldHVybiBzdXBlci5zYXZlKGl0ZW0gYXMgVGVzdGluZ1Nlc3Npb24sIGF1dGhDb250ZXh0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBvbmUgdGVzdGluZyBzZXNzaW9uIGJ5IGB0ZXN0aW5nU2Vzc2lvbklkYC5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiByZXNjaGVkdWxpbmcsIGNhbmNlbGxpbmcsIG9yIG1hcmtpbmcgc2Vzc2lvbiBhcyBjb21wbGV0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGF3YWl0IHRlc3RpbmdTZXNzaW9uRGFvLnVwZGF0ZShcInNlc3Npb24tdXVpZFwiLCB7IHN0YWdlOiBcIkNPTVBMRVRFRFwiIH0pO1xuICAgICAqL1xuICAgIHVwZGF0ZSA9IGFzeW5jIChcbiAgICAgICAgdGVzdGluZ1Nlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICB1cGRhdGVzOiBQYXJ0aWFsPFRlc3RpbmdTZXNzaW9uPixcbiAgICAgICAgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dFxuICAgICk6IFByb21pc2U8VGVzdGluZ1Nlc3Npb24+ID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IFRlc3RpbmdTZXNzaW9uTW9kZWwudXBkYXRlKFxuICAgICAgICAgICAgeyB0ZXN0aW5nU2Vzc2lvbklkIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX3RpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgdXBkYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IG5ldyBkeW5hbW9vc2UuQ29uZGl0aW9uKCkuYXR0cmlidXRlKFwidGVzdGluZ1Nlc3Npb25JZFwiKS5leGlzdHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdXBkYXRlZCBhcyB1bmtub3duIGFzIFRlc3RpbmdTZXNzaW9uO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIG9uZSB0ZXN0aW5nIHNlc3Npb24gYnkgcHJpbWFyeSBrZXkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHNlc3Npb24gPSBhd2FpdCB0ZXN0aW5nU2Vzc2lvbkRhby5nZXRCeUlkKFwic2Vzc2lvbi11dWlkXCIpO1xuICAgICAqL1xuICAgIGdldEJ5SWQgPSBhc3luYyAodGVzdGluZ1Nlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxUZXN0aW5nU2Vzc2lvbiB8IG51bGw+ID0+XG4gICAgICAgIHRoaXMuZ2V0KHRlc3RpbmdTZXNzaW9uSWQpO1xuXG4gICAgLyoqXG4gICAgICogTGlzdHMgdGVzdGluZyBzZXNzaW9ucyBieSBgc3RhZ2VgIChHU0kgYHN0YWdlSW5kZXhgKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGVzdGluZ1Nlc3Npb25EYW8ubGlzdEJ5U3RhZ2UoXCJDT05GSVJNRURcIiwgMjApO1xuICAgICAqL1xuICAgIGxpc3RCeVN0YWdlID0gYXN5bmMgKFxuICAgICAgICBzdGFnZTogVGVzdGluZ1Nlc3Npb25TdGFnZSxcbiAgICAgICAgbGltaXQ/OiBudW1iZXIsXG4gICAgICAgIHRva2VuPzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZGVjb2RlKHRva2VuKTtcbiAgICAgICAgbGV0IHF1ZXJ5QnVpbGRlciA9IFRlc3RpbmdTZXNzaW9uTW9kZWwucXVlcnkoXCJzdGFnZVwiKS5lcShzdGFnZSkudXNpbmcoXCJzdGFnZUluZGV4XCIpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgVGVzdGluZ1Nlc3Npb25bXSxcbiAgICAgICAgICAgIG5leHRUb2tlbjogYXdhaXQgdGhpcy5lbmNvZGUocXVlcnlSZXN1bHQubGFzdEtleSBhcyBEeW5hbW9LZXkgfCB1bmRlZmluZWQpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExpc3RzIGFsbCB0ZXN0aW5nIHNlc3Npb25zIGZvciBhIHVzZXIgKEdTSSBgdXNlcklkSW5kZXhgKS5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiB1c2VyIHByb2ZpbGUgLyBteS1zZXNzaW9ucyBzY3JlZW4gd2l0aG91dCBzdGFnZSBmaWx0ZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHNlc3Npb25zID0gYXdhaXQgdGVzdGluZ1Nlc3Npb25EYW8ubGlzdEJ5VXNlcklkKFwidXNlci0xMjNcIiwgMjApO1xuICAgICAqL1xuICAgIGxpc3RCeVVzZXJJZCA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgbGltaXQ/OiBudW1iZXIsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxMaXN0UmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZGVjb2RlKHRva2VuKTtcbiAgICAgICAgbGV0IHF1ZXJ5QnVpbGRlciA9IFRlc3RpbmdTZXNzaW9uTW9kZWwucXVlcnkoXCJ1c2VySWRcIikuZXEodXNlcklkKS51c2luZyhcInVzZXJJZEluZGV4XCIpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgVGVzdGluZ1Nlc3Npb25bXSxcbiAgICAgICAgICAgIG5leHRUb2tlbjogYXdhaXQgdGhpcy5lbmNvZGUocXVlcnlSZXN1bHQubGFzdEtleSBhcyBEeW5hbW9LZXkgfCB1bmRlZmluZWQpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExpc3RzIHRlc3Rpbmcgc2Vzc2lvbnMgZm9yIGEgdXNlciBmaWx0ZXJlZCBieSBgc3RhZ2VgIChHU0kgYHVzZXJJZFN0YWdlSW5kZXhgKS5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiBzaG93aW5nIG9ubHkgY29uZmlybWVkL2NhbmNlbGxlZC9jb21wbGV0ZWQgc2Vzc2lvbnMgZm9yIG9uZSB1c2VyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0ZXN0aW5nU2Vzc2lvbkRhby5saXN0QnlVc2VySWRBbmRTdGFnZShcInVzZXItMTIzXCIsIFwiQ09ORklSTUVEXCIsIDIwKTtcbiAgICAgKi9cbiAgICBsaXN0QnlVc2VySWRBbmRTdGFnZSA9IGFzeW5jIChcbiAgICAgICAgdXNlcklkOiBzdHJpbmcsXG4gICAgICAgIHN0YWdlOiBUZXN0aW5nU2Vzc2lvblN0YWdlLFxuICAgICAgICBsaW1pdD86IG51bWJlcixcbiAgICAgICAgdG9rZW4/OiBzdHJpbmdcbiAgICApOiBQcm9taXNlPExpc3RSZXN1bHQ+ID0+IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gdGhpcy5kZWNvZGUodG9rZW4pO1xuICAgICAgICBsZXQgcXVlcnlCdWlsZGVyID0gVGVzdGluZ1Nlc3Npb25Nb2RlbC5xdWVyeShcInVzZXJJZFwiKVxuICAgICAgICAgICAgLmVxKHVzZXJJZClcbiAgICAgICAgICAgIC53aGVyZShcInN0YWdlXCIpXG4gICAgICAgICAgICAuZXEoc3RhZ2UpXG4gICAgICAgICAgICAudXNpbmcoXCJ1c2VySWRTdGFnZUluZGV4XCIpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgVGVzdGluZ1Nlc3Npb25bXSxcbiAgICAgICAgICAgIG5leHRUb2tlbjogYXdhaXQgdGhpcy5lbmNvZGUocXVlcnlSZXN1bHQubGFzdEtleSBhcyBEeW5hbW9LZXkgfCB1bmRlZmluZWQpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgb25lIHRlc3Rpbmcgc2Vzc2lvbiBieSBwcmltYXJ5IGtleS5cbiAgICAgKi9cbiAgICBkZWxldGVCeUlkID0gYXN5bmMgKHRlc3RpbmdTZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZSh0ZXN0aW5nU2Vzc2lvbklkKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgdGVzdGluZ1Nlc3Npb25EYW8gPSBuZXcgVGVzdGluZ1Nlc3Npb25EYW8oKTtcbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { BaseDynamooseModel } from "../../base-dynamoose-model";
2
+ export declare const TESTING_SESSION_STAGE: {
3
+ readonly CONFIRMED: "CONFIRMED";
4
+ readonly CANCELLED: "CANCELLED";
5
+ readonly RESCHEDULED: "RESCHEDULED";
6
+ readonly COMPLETED: "COMPLETED";
7
+ };
8
+ export type TestingSessionStage = (typeof TESTING_SESSION_STAGE)[keyof typeof TESTING_SESSION_STAGE];
9
+ export declare const TESTING_SESSION_PREFERENCE: {
10
+ readonly VEG: "VEG";
11
+ readonly NONVEG: "NONVEG";
12
+ };
13
+ export type TestingSessionPreference = (typeof TESTING_SESSION_PREFERENCE)[keyof typeof TESTING_SESSION_PREFERENCE];
14
+ export interface TestingSession extends BaseDynamooseModel {
15
+ testingSessionId: string;
16
+ testingDate: string;
17
+ testingTime: string;
18
+ visitDurationMinutes: number;
19
+ venueAddress: string;
20
+ locationUrl: string;
21
+ stage: TestingSessionStage;
22
+ preference: TestingSessionPreference;
23
+ noOfGuestVisit: number;
24
+ userId: string;
25
+ }
26
+ export type CreateTestingSessionInput = Omit<TestingSession, "testingSessionId"> & {
27
+ testingSessionId?: string;
28
+ };
29
+ export declare const TestingSessionModel: import("dynamoose/dist/General").ModelType<TestingSession>;
30
+ export declare const convertToTestingSessionModel: (input: CreateTestingSessionInput | TestingSession) => TestingSession;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.convertToTestingSessionModel = exports.TestingSessionModel = exports.TESTING_SESSION_PREFERENCE = exports.TESTING_SESSION_STAGE = void 0;
7
+ const dynamoose_1 = __importDefault(require("dynamoose"));
8
+ const crypto_1 = require("crypto");
9
+ const base_dynamoose_model_1 = require("../../base-dynamoose-model");
10
+ const table_names_1 = require("../../config/table-names");
11
+ exports.TESTING_SESSION_STAGE = {
12
+ CONFIRMED: "CONFIRMED",
13
+ CANCELLED: "CANCELLED",
14
+ RESCHEDULED: "RESCHEDULED",
15
+ COMPLETED: "COMPLETED"
16
+ };
17
+ exports.TESTING_SESSION_PREFERENCE = {
18
+ VEG: "VEG",
19
+ NONVEG: "NONVEG"
20
+ };
21
+ const testingSessionSchema = new dynamoose_1.default.Schema({
22
+ testingSessionId: {
23
+ type: String,
24
+ hashKey: true,
25
+ required: true,
26
+ default: () => (0, crypto_1.randomUUID)()
27
+ },
28
+ testingDate: {
29
+ type: String,
30
+ required: true
31
+ },
32
+ testingTime: {
33
+ type: String,
34
+ required: true
35
+ },
36
+ visitDurationMinutes: {
37
+ type: Number,
38
+ required: true
39
+ },
40
+ venueAddress: {
41
+ type: String,
42
+ required: true
43
+ },
44
+ locationUrl: {
45
+ type: String,
46
+ required: true
47
+ },
48
+ stage: {
49
+ type: String,
50
+ required: true,
51
+ enum: [
52
+ exports.TESTING_SESSION_STAGE.CONFIRMED,
53
+ exports.TESTING_SESSION_STAGE.CANCELLED,
54
+ exports.TESTING_SESSION_STAGE.RESCHEDULED,
55
+ exports.TESTING_SESSION_STAGE.COMPLETED
56
+ ],
57
+ index: {
58
+ name: "stageIndex",
59
+ type: "global"
60
+ }
61
+ },
62
+ preference: {
63
+ type: String,
64
+ required: true,
65
+ enum: [exports.TESTING_SESSION_PREFERENCE.VEG, exports.TESTING_SESSION_PREFERENCE.NONVEG]
66
+ },
67
+ noOfGuestVisit: {
68
+ type: Number,
69
+ required: true
70
+ },
71
+ userId: {
72
+ type: String,
73
+ required: true,
74
+ index: [
75
+ {
76
+ name: "userIdIndex",
77
+ type: "global"
78
+ },
79
+ {
80
+ name: "userIdStageIndex",
81
+ type: "global",
82
+ rangeKey: "stage"
83
+ }
84
+ ]
85
+ },
86
+ eventGuestCount: {
87
+ type: Number,
88
+ required: false
89
+ },
90
+ occasion: {
91
+ type: String,
92
+ required: false
93
+ },
94
+ ...base_dynamoose_model_1.BASE_DYNAMOOSE_AUDIT_SCHEMA
95
+ }, {
96
+ saveUnknown: false,
97
+ timestamps: true
98
+ });
99
+ exports.TestingSessionModel = dynamoose_1.default.model(table_names_1.TABLE_NAMES.TESTING_SESSION, testingSessionSchema, { create: false, waitForActive: false });
100
+ const convertToTestingSessionModel = (input) => {
101
+ return new exports.TestingSessionModel(input);
102
+ };
103
+ exports.convertToTestingSessionModel = convertToTestingSessionModel;
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy1zZXNzaW9uLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1c3RvbWVyLXVzZXIvdGVzdGluZy1zZXNzaW9uL3Rlc3Rpbmctc2Vzc2lvbi1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFDbEMsbUNBQW9DO0FBQ3BDLHFFQUE2RjtBQUM3RiwwREFBdUQ7QUFFMUMsUUFBQSxxQkFBcUIsR0FBRztJQUNqQyxTQUFTLEVBQUUsV0FBVztJQUN0QixTQUFTLEVBQUUsV0FBVztJQUN0QixXQUFXLEVBQUUsYUFBYTtJQUMxQixTQUFTLEVBQUUsV0FBVztDQUNoQixDQUFDO0FBS0UsUUFBQSwwQkFBMEIsR0FBRztJQUN0QyxHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0NBQ1YsQ0FBQztBQXNCWCxNQUFNLG9CQUFvQixHQUFHLElBQUksbUJBQVMsQ0FBQyxNQUFNLENBQzdDO0lBQ0ksZ0JBQWdCLEVBQUU7UUFDZCxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBQSxtQkFBVSxHQUFFO0tBQzlCO0lBQ0QsV0FBVyxFQUFFO1FBQ1QsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxvQkFBb0IsRUFBRTtRQUNsQixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsWUFBWSxFQUFFO1FBQ1YsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxLQUFLLEVBQUU7UUFDSCxJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFO1lBQ0YsNkJBQXFCLENBQUMsU0FBUztZQUMvQiw2QkFBcUIsQ0FBQyxTQUFTO1lBQy9CLDZCQUFxQixDQUFDLFdBQVc7WUFDakMsNkJBQXFCLENBQUMsU0FBUztTQUNsQztRQUNELEtBQUssRUFBRTtZQUNILElBQUksRUFBRSxZQUFZO1lBQ2xCLElBQUksRUFBRSxRQUFRO1NBQ2pCO0tBQ0o7SUFDRCxVQUFVLEVBQUU7UUFDUixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLENBQUMsa0NBQTBCLENBQUMsR0FBRyxFQUFFLGtDQUEwQixDQUFDLE1BQU0sQ0FBQztLQUM1RTtJQUNELGNBQWMsRUFBRTtRQUNaLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxNQUFNLEVBQUU7UUFDSixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsS0FBSyxFQUFFO1lBQ0g7Z0JBQ0ksSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLElBQUksRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLE9BQU87YUFDcEI7U0FDSjtLQUNKO0lBQ0QsZUFBZSxFQUFFO1FBQ2IsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsS0FBSztLQUNsQjtJQUNELFFBQVEsRUFBRTtRQUNOLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLEtBQUs7S0FDbEI7SUFDRCxHQUFHLGtEQUEyQjtDQUNqQyxFQUNEO0lBQ0ksV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDbkIsQ0FDSixDQUFDO0FBRVcsUUFBQSxtQkFBbUIsR0FBRyxtQkFBUyxDQUFDLEtBQUssQ0FDOUMseUJBQVcsQ0FBQyxlQUFlLEVBQzNCLG9CQUFvQixFQUNwQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUMxQyxDQUFDO0FBRUssTUFBTSw0QkFBNEIsR0FBRyxDQUFDLEtBQWlELEVBQUUsRUFBRTtJQUM5RixPQUFPLElBQUksMkJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRlcsUUFBQSw0QkFBNEIsZ0NBRXZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGR5bmFtb29zZSBmcm9tIFwiZHluYW1vb3NlXCI7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgQkFTRV9EWU5BTU9PU0VfQVVESVRfU0NIRU1BLCBCYXNlRHluYW1vb3NlTW9kZWwgfSBmcm9tIFwiLi4vLi4vYmFzZS1keW5hbW9vc2UtbW9kZWxcIjtcbmltcG9ydCB7IFRBQkxFX05BTUVTIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy90YWJsZS1uYW1lc1wiO1xuXG5leHBvcnQgY29uc3QgVEVTVElOR19TRVNTSU9OX1NUQUdFID0ge1xuICAgIENPTkZJUk1FRDogXCJDT05GSVJNRURcIixcbiAgICBDQU5DRUxMRUQ6IFwiQ0FOQ0VMTEVEXCIsXG4gICAgUkVTQ0hFRFVMRUQ6IFwiUkVTQ0hFRFVMRURcIixcbiAgICBDT01QTEVURUQ6IFwiQ09NUExFVEVEXCJcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRlc3RpbmdTZXNzaW9uU3RhZ2UgPVxuICAgICh0eXBlb2YgVEVTVElOR19TRVNTSU9OX1NUQUdFKVtrZXlvZiB0eXBlb2YgVEVTVElOR19TRVNTSU9OX1NUQUdFXTtcblxuZXhwb3J0IGNvbnN0IFRFU1RJTkdfU0VTU0lPTl9QUkVGRVJFTkNFID0ge1xuICAgIFZFRzogXCJWRUdcIixcbiAgICBOT05WRUc6IFwiTk9OVkVHXCJcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFRlc3RpbmdTZXNzaW9uUHJlZmVyZW5jZSA9XG4gICAgKHR5cGVvZiBURVNUSU5HX1NFU1NJT05fUFJFRkVSRU5DRSlba2V5b2YgdHlwZW9mIFRFU1RJTkdfU0VTU0lPTl9QUkVGRVJFTkNFXTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0aW5nU2Vzc2lvbiBleHRlbmRzIEJhc2VEeW5hbW9vc2VNb2RlbCB7XG4gICAgdGVzdGluZ1Nlc3Npb25JZDogc3RyaW5nO1xuICAgIHRlc3RpbmdEYXRlOiBzdHJpbmc7XG4gICAgdGVzdGluZ1RpbWU6IHN0cmluZztcbiAgICB2aXNpdER1cmF0aW9uTWludXRlczogbnVtYmVyO1xuICAgIHZlbnVlQWRkcmVzczogc3RyaW5nO1xuICAgIGxvY2F0aW9uVXJsOiBzdHJpbmc7XG4gICAgc3RhZ2U6IFRlc3RpbmdTZXNzaW9uU3RhZ2U7XG4gICAgcHJlZmVyZW5jZTogVGVzdGluZ1Nlc3Npb25QcmVmZXJlbmNlO1xuICAgIG5vT2ZHdWVzdFZpc2l0OiBudW1iZXI7XG4gICAgdXNlcklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVRlc3RpbmdTZXNzaW9uSW5wdXQgPSBPbWl0PFRlc3RpbmdTZXNzaW9uLCBcInRlc3RpbmdTZXNzaW9uSWRcIj4gJiB7XG4gICAgdGVzdGluZ1Nlc3Npb25JZD86IHN0cmluZztcbn07XG5cbmNvbnN0IHRlc3RpbmdTZXNzaW9uU2NoZW1hID0gbmV3IGR5bmFtb29zZS5TY2hlbWEoXG4gICAge1xuICAgICAgICB0ZXN0aW5nU2Vzc2lvbklkOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICBoYXNoS2V5OiB0cnVlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiByYW5kb21VVUlEKClcbiAgICAgICAgfSxcbiAgICAgICAgdGVzdGluZ0RhdGU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRlc3RpbmdUaW1lOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB2aXNpdER1cmF0aW9uTWludXRlczoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgdmVudWVBZGRyZXNzOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBsb2NhdGlvblVybDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgc3RhZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZW51bTogW1xuICAgICAgICAgICAgICAgIFRFU1RJTkdfU0VTU0lPTl9TVEFHRS5DT05GSVJNRUQsXG4gICAgICAgICAgICAgICAgVEVTVElOR19TRVNTSU9OX1NUQUdFLkNBTkNFTExFRCxcbiAgICAgICAgICAgICAgICBURVNUSU5HX1NFU1NJT05fU1RBR0UuUkVTQ0hFRFVMRUQsXG4gICAgICAgICAgICAgICAgVEVTVElOR19TRVNTSU9OX1NUQUdFLkNPTVBMRVRFRFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGluZGV4OiB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzdGFnZUluZGV4XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmVmZXJlbmNlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGVudW06IFtURVNUSU5HX1NFU1NJT05fUFJFRkVSRU5DRS5WRUcsIFRFU1RJTkdfU0VTU0lPTl9QUkVGRVJFTkNFLk5PTlZFR11cbiAgICAgICAgfSxcbiAgICAgICAgbm9PZkd1ZXN0VmlzaXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJJZDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBpbmRleDogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ1c2VySWRJbmRleFwiLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdsb2JhbFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidXNlcklkU3RhZ2VJbmRleFwiLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdsb2JhbFwiLFxuICAgICAgICAgICAgICAgICAgICByYW5nZUtleTogXCJzdGFnZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBldmVudEd1ZXN0Q291bnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBvY2Nhc2lvbjoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIC4uLkJBU0VfRFlOQU1PT1NFX0FVRElUX1NDSEVNQVxuICAgIH0sXG4gICAge1xuICAgICAgICBzYXZlVW5rbm93bjogZmFsc2UsXG4gICAgICAgIHRpbWVzdGFtcHM6IHRydWVcbiAgICB9XG4pO1xuXG5leHBvcnQgY29uc3QgVGVzdGluZ1Nlc3Npb25Nb2RlbCA9IGR5bmFtb29zZS5tb2RlbDxUZXN0aW5nU2Vzc2lvbj4oXG4gICAgVEFCTEVfTkFNRVMuVEVTVElOR19TRVNTSU9OLFxuICAgIHRlc3RpbmdTZXNzaW9uU2NoZW1hLFxuICAgIHsgY3JlYXRlOiBmYWxzZSwgd2FpdEZvckFjdGl2ZTogZmFsc2UgfVxuKTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRUb1Rlc3RpbmdTZXNzaW9uTW9kZWwgPSAoaW5wdXQ6IENyZWF0ZVRlc3RpbmdTZXNzaW9uSW5wdXQgfCBUZXN0aW5nU2Vzc2lvbikgPT4ge1xuICAgIHJldHVybiBuZXcgVGVzdGluZ1Nlc3Npb25Nb2RlbChpbnB1dCk7XG59O1xuIl19
@@ -0,0 +1,114 @@
1
+ import { GenericDynamooseDAO } from "../../base-dynamoose-dao";
2
+ import { AuthContext } from "../../base-dynamoose-model";
3
+ import { CreateThirdPartyApiKeyInput, ThirdPartyApiKey, ThirdPartyApiKeyStatus } from "./third-party-api-key-model";
4
+ type ListResult = {
5
+ items: ThirdPartyApiKey[];
6
+ nextToken?: string;
7
+ };
8
+ /**
9
+ * Thrown when the same `apiKeyHash` already exists in the table.
10
+ * Use this to return a clean duplicate-key error from admin/create-key APIs.
11
+ */
12
+ export declare class DuplicateApiKeyHashError extends Error {
13
+ constructor(apiKeyHash: string);
14
+ }
15
+ /**
16
+ * DAO for permanent third-party API keys (Method 2).
17
+ *
18
+ * Table keys: `partnerId` (PK) + `apiKeyId` (SK).
19
+ * Auth lookup: hash incoming key, then use `getActiveByApiKeyHash`.
20
+ */
21
+ declare class ThirdPartyApiKeyDao extends GenericDynamooseDAO<ThirdPartyApiKey> {
22
+ constructor();
23
+ /**
24
+ * Creates a new permanent API key record for a partner.
25
+ *
26
+ * Use when: admin/onboarding flow issues a new API key to a third-party partner.
27
+ * - `apiKeyId` auto-generates if omitted.
28
+ * - Pass only `apiKeyHash` (SHA-256 etc.), never the raw key.
29
+ * - Default status is `ACTIVE`.
30
+ * - Throws `DuplicateApiKeyHashError` if hash already exists.
31
+ */
32
+ save: (item: CreateThirdPartyApiKeyInput, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
33
+ /**
34
+ * Updates an existing API key by `partnerId` + `apiKeyId`.
35
+ *
36
+ * Use when: changing key metadata or rotating hash/status from admin tools.
37
+ * - Fails if the record does not exist.
38
+ * - Rejects duplicate `apiKeyHash` belonging to another key.
39
+ * - Stamps `updated_time` / `updated_user` automatically.
40
+ */
41
+ updateApiKey: (partnerId: string, apiKeyId: string, updates: Partial<ThirdPartyApiKey>, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
42
+ /**
43
+ * Fetches one API key by table primary key (`partnerId` + `apiKeyId`).
44
+ *
45
+ * Use when: admin detail page, key management screen, or internal ops lookup
46
+ * when both partner id and key id are already known.
47
+ */
48
+ getByPartnerAndApiKeyId: (partnerId: string, apiKeyId: string) => Promise<ThirdPartyApiKey | null>;
49
+ /**
50
+ * Lists all API keys for a partner (query on PK `partnerId`).
51
+ *
52
+ * Use when: partner dashboard showing every issued key (active + inactive).
53
+ * Supports pagination via `limit` and `token`.
54
+ */
55
+ listByPartnerId: (partnerId: string, limit?: number, token?: string) => Promise<ListResult>;
56
+ /**
57
+ * Lists partner keys filtered by `status` (`ACTIVE` or `INACTIVE`).
58
+ *
59
+ * Use when: showing only active keys in UI, or auditing disabled/revoked keys
60
+ * for one partner without scanning the whole table.
61
+ */
62
+ listByPartnerIdAndStatus: (partnerId: string, status: ThirdPartyApiKeyStatus, limit?: number, token?: string) => Promise<ListResult>;
63
+ /**
64
+ * Finds a key by `apiKeyHash` using GSI `apiKeyHashIndex`.
65
+ *
66
+ * Use when: you need the record regardless of status (admin/debug),
67
+ * or before deciding whether to allow auth.
68
+ * Returns `null` if no key matches the hash.
69
+ */
70
+ getByApiKeyHash: (apiKeyHash: string) => Promise<ThirdPartyApiKey | null>;
71
+ /**
72
+ * Validates an incoming API request key (auth middleware use-case).
73
+ *
74
+ * Use when: request header/bearer token is hashed and you must allow access
75
+ * only if the key exists AND `status === ACTIVE` AND not past `expiresAt`.
76
+ * Returns `null` for missing, inactive, revoked, or expired keys.
77
+ */
78
+ getActiveByApiKeyHash: (apiKeyHash: string) => Promise<ThirdPartyApiKey | null>;
79
+ /**
80
+ * Records when an API key was last used (audit / monitoring).
81
+ *
82
+ * Use when: auth middleware successfully validates a key and you want usage telemetry.
83
+ */
84
+ touchLastUsedAt: (partnerId: string, apiKeyId: string) => Promise<void>;
85
+ /**
86
+ * Paginated query on GSI `apiKeyHashIndex`.
87
+ *
88
+ * Use when: low-level lookup by hash with pagination.
89
+ * Normally prefer `getByApiKeyHash` for single-record auth/admin flows.
90
+ */
91
+ listByApiKeyHash: (apiKeyHash: string, limit?: number, token?: string) => Promise<ListResult>;
92
+ /**
93
+ * Lists keys across all partners by `status` (GSI `statusIndex`).
94
+ *
95
+ * Use when: global admin reports — e.g. all active keys, or cleanup job
96
+ * for all inactive/revoked keys.
97
+ */
98
+ listByStatus: (status: ThirdPartyApiKeyStatus, limit?: number, token?: string) => Promise<ListResult>;
99
+ /**
100
+ * Disables an API key without deleting it (`status` → `INACTIVE`).
101
+ *
102
+ * Use when: partner offboarding, key compromise, or temporary suspension.
103
+ * Disabled keys fail `getActiveByApiKeyHash` immediately.
104
+ */
105
+ deactivate: (partnerId: string, apiKeyId: string, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
106
+ /**
107
+ * Re-enables a previously disabled key (`status` → `ACTIVE`).
108
+ *
109
+ * Use when: restoring partner access after suspension without issuing a new key.
110
+ */
111
+ activate: (partnerId: string, apiKeyId: string, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
112
+ }
113
+ export declare const thirdPartyApiKeyDao: ThirdPartyApiKeyDao;
114
+ export {};