cmp-aws-database 2.1.2-dev.20 → 2.1.2-dev.21

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.
@@ -1,6 +1,6 @@
1
1
  import { GenericDynamooseDAO } from "../../base-dynamoose-dao";
2
2
  import { AuthContext } from "../../base-dynamoose-model";
3
- import { BrowseHistory, CreateBrowseHistoryInput } from "./brows-history-model";
3
+ import { BrowseHistory, CreateBrowseHistoryInput } from "./browse-history-model";
4
4
  type ListResult = {
5
5
  items: BrowseHistory[];
6
6
  nextToken?: string;
@@ -0,0 +1,173 @@
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.browsHistoryDao = void 0;
7
+ const dynamoose_1 = __importDefault(require("dynamoose"));
8
+ const base_dynamoose_dao_1 = require("../../base-dynamoose-dao");
9
+ const browse_history_model_1 = require("./browse-history-model");
10
+ /**
11
+ * DAO for user platter browse history.
12
+ *
13
+ * Table keys: `browsHistoryId` (PK).
14
+ * User lookup: query GSI `userIdIndex` by `userId`.
15
+ */
16
+ class BrowsHistoryDao extends base_dynamoose_dao_1.GenericDynamooseDAO {
17
+ constructor() {
18
+ super(browse_history_model_1.BrowseHistoryModel, "browseHistoryId");
19
+ /**
20
+ * Creates one browse-history record.
21
+ *
22
+ * Use when: user views a platter and you want to persist that browse event.
23
+ * - `browsHistoryId` auto-generates if omitted.
24
+ * - `userId` is required for later `getByUserId` / `listByUserId` lookups.
25
+ * - Stamps `created_time` / `created_user` automatically.
26
+ *
27
+ * @example
28
+ * await browsHistoryDao.save({
29
+ * userId: "user-123",
30
+ * platterId: "platter-abc",
31
+ * platterName: "Birthday Feast",
32
+ * platterType: "CATERING",
33
+ * platterPrice: 4999,
34
+ * totalItems: 12,
35
+ * menuType: "VEG",
36
+ * mealTime: "Dinner",
37
+ * platterImage: "https://...",
38
+ * replaceItemIds: [{ originalItemId: "item-1", replaceItemId: "item-2" }],
39
+ * addonIds: [],
40
+ * cutleryIds: [],
41
+ * liveCounterIds: [],
42
+ * skewerAddonIds: []
43
+ * }, { userSub: "user-123" });
44
+ */
45
+ this.save = async (item, authContext) => {
46
+ return super.save(item, authContext);
47
+ };
48
+ /**
49
+ * Updates one browse-history record by `browsHistoryId`.
50
+ *
51
+ * Use when: user re-visits same platter and you need to update selections or metadata.
52
+ * - Fails if the record does not exist.
53
+ * - Stamps `updated_time` / `updated_user` automatically.
54
+ *
55
+ * @example
56
+ * await browsHistoryDao.update(
57
+ * "brows-history-uuid",
58
+ * { addonIds: ["addon-1", "addon-2"], platterPrice: 5499 },
59
+ * { userSub: "user-123" }
60
+ * );
61
+ */
62
+ this.update = async (browseHistoryId, updates, authContext) => {
63
+ const updated = await browse_history_model_1.BrowseHistoryModel.update({ browseHistoryId }, {
64
+ ...updates,
65
+ updated_time: new Date(),
66
+ updated_user: authContext?.userSub
67
+ }, {
68
+ condition: new dynamoose_1.default.Condition().attribute("browsHistoryId").exists()
69
+ });
70
+ return updated;
71
+ };
72
+ /**
73
+ * Fetches one browse-history record by primary key.
74
+ *
75
+ * Use when: detail screen already has `browsHistoryId` from a previous list response.
76
+ * Returns `null` when record is not found.
77
+ *
78
+ * @example
79
+ * const item = await browsHistoryDao.getById("brows-history-uuid");
80
+ */
81
+ this.getById = async (browseHistoryId) => this.get(browseHistoryId);
82
+ /**
83
+ * Returns browse-history for a user with optional sort and limit.
84
+ *
85
+ * Use when: showing "Recently Viewed" or full browse history on home/profile screen.
86
+ * - Queries all pages from GSI `userIdIndex`, then sorts in memory.
87
+ * - Pass `sortBy` as `"created_time"` or `"updated_time"` to order results.
88
+ * - Default `sortOrder` is `"desc"` (newest first).
89
+ * - `limit` is applied after sorting so latest N items are returned correctly.
90
+ *
91
+ * @example
92
+ * // Latest 10 browsed platters (most recently updated first)
93
+ * const recent = await browsHistoryDao.getByUserId("user-123", 10, "updated_time");
94
+ *
95
+ * @example
96
+ * // Oldest viewed first
97
+ * const oldestFirst = await browsHistoryDao.getByUserId("user-123", undefined, "created_time", "asc");
98
+ *
99
+ * @example
100
+ * // All history without sorting (raw DynamoDB order)
101
+ * const all = await browsHistoryDao.getByUserId("user-123");
102
+ */
103
+ this.getByUserId = async (userId, limit, sortBy, sortOrder = "desc") => {
104
+ const items = [];
105
+ let token;
106
+ do {
107
+ const result = await this.listByUserId(userId, undefined, token);
108
+ items.push(...result.items);
109
+ token = result.nextToken;
110
+ } while (token);
111
+ const sortedItems = this.sortBrowsHistoryItems(items, sortBy, sortOrder);
112
+ return typeof limit === "number" ? sortedItems.slice(0, limit) : sortedItems;
113
+ };
114
+ /**
115
+ * Reads timestamp from audit field used for in-memory sorting.
116
+ */
117
+ this.getBrowsHistorySortTime = (item, field) => {
118
+ const value = item[field];
119
+ if (!value) {
120
+ return 0;
121
+ }
122
+ return value instanceof Date ? value.getTime() : new Date(value).getTime();
123
+ };
124
+ /**
125
+ * Sorts browse-history items by `created_time` or `updated_time`.
126
+ */
127
+ this.sortBrowsHistoryItems = (items, sortBy, sortOrder = "desc") => {
128
+ if (!sortBy) {
129
+ return items;
130
+ }
131
+ const direction = sortOrder === "asc" ? 1 : -1;
132
+ return [...items].sort((a, b) => (this.getBrowsHistorySortTime(a, sortBy) - this.getBrowsHistorySortTime(b, sortBy)) * direction);
133
+ };
134
+ /**
135
+ * Paginated query on GSI `userIdIndex`.
136
+ *
137
+ * Use when: infinite scroll / load-more UI where you pass `nextToken` from previous response.
138
+ * For sorted "recent N" views prefer `getByUserId` instead.
139
+ *
140
+ * @example
141
+ * const page1 = await browsHistoryDao.listByUserId("user-123", 20);
142
+ * const page2 = await browsHistoryDao.listByUserId("user-123", 20, page1.nextToken);
143
+ */
144
+ this.listByUserId = async (userId, limit, token) => {
145
+ const decodedToken = this.decode(token);
146
+ let queryBuilder = browse_history_model_1.BrowseHistoryModel.query("userId").eq(userId).using("userIdIndex");
147
+ if (decodedToken) {
148
+ queryBuilder = queryBuilder.startAt(decodedToken);
149
+ }
150
+ if (typeof limit === "number") {
151
+ queryBuilder = queryBuilder.limit(limit);
152
+ }
153
+ const queryResult = await queryBuilder.exec();
154
+ return {
155
+ items: queryResult,
156
+ nextToken: await this.encode(queryResult.lastKey)
157
+ };
158
+ };
159
+ /**
160
+ * Deletes one browse-history record by primary key.
161
+ *
162
+ * Use when: user clears a single item from browse history.
163
+ *
164
+ * @example
165
+ * await browsHistoryDao.deleteById("brows-history-uuid");
166
+ */
167
+ this.deleteById = async (browsHistoryId) => {
168
+ await this.delete(browsHistoryId);
169
+ };
170
+ }
171
+ }
172
+ exports.browsHistoryDao = new BrowsHistoryDao();
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlLWhpc3RvcnktZGFvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1c3RvbWVyLXVzZXIvYnJvd3NlLWhpc3RvcnkvYnJvd3NlLWhpc3RvcnktZGFvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUFrQztBQUNsQyxpRUFBMEU7QUFFMUUsaUVBSWdDO0FBVWhDOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFnQixTQUFRLHdDQUFrQztJQUM1RDtRQUNJLEtBQUssQ0FBQyx5Q0FBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBR2pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBeUJHO1FBQ0gsU0FBSSxHQUFHLEtBQUssRUFBRSxJQUE4QixFQUFFLFdBQXlCLEVBQTBCLEVBQUU7WUFDL0YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7Ozs7Ozs7V0FhRztRQUNILFdBQU0sR0FBRyxLQUFLLEVBQ1YsZUFBdUIsRUFDdkIsT0FBK0IsRUFDL0IsV0FBeUIsRUFDSCxFQUFFO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0seUNBQWtCLENBQUMsTUFBTSxDQUMzQyxFQUFFLGVBQWUsRUFBRSxFQUNuQjtnQkFDSSxHQUFHLE9BQU87Z0JBQ1YsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUN4QixZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU87YUFDckMsRUFDRDtnQkFDSSxTQUFTLEVBQUUsSUFBSSxtQkFBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUM1RSxDQUNKLENBQUM7WUFDRixPQUFPLE9BQW1DLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7O1dBUUc7UUFDSCxZQUFPLEdBQUcsS0FBSyxFQUFFLGVBQXVCLEVBQWlDLEVB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QUM7WUFDN0MsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLFdBQXlDO2dCQUNoRCxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFnQyxDQUFDO2FBQzdFLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRjs7Ozs7OztXQU9HO1FBQ0gsZUFBVSxHQUFHLEtBQUssRUFBRSxjQUFzQixFQUFpQixFQUFFO1lBQ3pELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUM7SUFyTEYsQ0FBQztDQXNMSjtBQUVZLFFBQUEsZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZHluYW1vb3NlIGZyb20gXCJkeW5hbW9vc2VcIjtcbmltcG9ydCB7IER5bmFtb0tleSwgR2VuZXJpY0R5bmFtb29zZURBTyB9IGZyb20gXCIuLi8uLi9iYXNlLWR5bmFtb29zZS1kYW9cIjtcbmltcG9ydCB7IEF1dGhDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2Jhc2UtZHluYW1vb3NlLW1vZGVsXCI7XG5pbXBvcnQge1xuICAgIEJyb3dzZUhpc3RvcnksXG4gICAgQnJvd3NlSGlzdG9yeU1vZGVsLFxuICAgIENyZWF0ZUJyb3dzZUhpc3RvcnlJbnB1dFxufSBmcm9tIFwiLi9icm93c2UtaGlzdG9yeS1tb2RlbFwiO1xuXG50eXBlIExpc3RSZXN1bHQgPSB7XG4gICAgaXRlbXM6IEJyb3dzZUhpc3RvcnlbXTtcbiAgICBuZXh0VG9rZW4/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCcm93c2VIaXN0b3J5U29ydEZpZWxkID0gXCJjcmVhdGVkX3RpbWVcIiB8IFwidXBkYXRlZF90aW1lXCI7XG5leHBvcnQgdHlwZSBCcm93c2VIaXN0b3J5U29ydE9yZGVyID0gXCJhc2NcIiB8IFwiZGVzY1wiO1xuXG4vKipcbiAqIERBTyBmb3IgdXNlciBwbGF0dGVyIGJyb3dzZSBoaXN0b3J5LlxuICpcbiAqIFRhYmxlIGtleXM6IGBicm93c0hpc3RvcnlJZGAgKFBLKS5cbiAqIFVzZXIgbG9va3VwOiBxdWVyeSBHU0kgYHVzZXJJZEluZGV4YCBieSBgdXNlcklkYC5cbiAqL1xuY2xhc3MgQnJvd3NIaXN0b3J5RGFvIGV4dGVuZHMgR2VuZXJpY0R5bmFtb29zZURBTzxCcm93c2VIaXN0b3J5PiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKEJyb3dzZUhpc3RvcnlNb2RlbCwgXCJicm93c2VIaXN0b3J5SWRcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBvbmUgYnJvd3NlLWhpc3RvcnkgcmVjb3JkLlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IHVzZXIgdmlld3MgYSBwbGF0dGVyIGFuZCB5b3Ugd2FudCB0byBwZXJzaXN0IHRoYXQgYnJvd3NlIGV2ZW50LlxuICAgICAqIC0gYGJyb3dzSGlzdG9yeUlkYCBhdXRvLWdlbmVyYXRlcyBpZiBvbWl0dGVkLlxuICAgICAqIC0gYHVzZXJJZGAgaXMgcmVxdWlyZWQgZm9yIGxhdGVyIGBnZXRCeVVzZXJJZGAgLyBgbGlzdEJ5VXNlcklkYCBsb29rdXBzLlxuICAgICAqIC0gU3RhbXBzIGBjcmVhdGVkX3RpbWVgIC8gYGNyZWF0ZWRfdXNlcmAgYXV0b21hdGljYWxseS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYXdhaXQgYnJvd3NIaXN0b3J5RGFvLnNhdmUoe1xuICAgICAqICAgICB1c2VySWQ6IFwidXNlci0xMjNcIixcbiAgICAgKiAgICAgcGxhdHRlcklkOiBcInBsYXR0ZXItYWJjXCIsXG4gICAgICogICAgIHBsYXR0ZXJOYW1lOiBcIkJpcnRoZGF5IEZlYXN0XCIsXG4gICAgICogICAgIHBsYXR0ZXJUeXBlOiBcIkNBVEVSSU5HXCIsXG4gICAgICogICAgIHBsYXR0ZXJQcmljZTogNDk5OSxcbiAgICAgKiAgICAgdG90YWxJdGVtczogMTIsXG4gICAgICogICAgIG1lbnVUeXBlOiBcIlZFR1wiLFxuICAgICAqICAgICBtZWFsVGltZTogXCJEaW5uZXJcIixcbiAgICAgKiAgICAgcGxhdHRlckltYWdlOiBcImh0dHBzOi8vLi4uXCIsXG4gICAgICogICAgIHJlcGxhY2VJdGVtSWRzOiBbeyBvcmlnaW5hbEl0ZW1JZDogXCJpdGVtLTFcIiwgcmVwbGFjZUl0ZW1JZDogXCJpdGVtLTJcIiB9XSxcbiAgICAgKiAgICAgYWRkb25JZHM6IFtdLFxuICAgICAqICAgICBjdXRsZXJ5SWRzOiBbXSxcbiAgICAgKiAgICAgbGl2ZUNvdW50ZXJJZHM6IFtdLFxuICAgICAqICAgICBza2V3ZXJBZGRvbklkczogW11cbiAgICAgKiB9LCB7IHVzZXJTdWI6IFwidXNlci0xMjNcIiB9KTtcbiAgICAgKi9cbiAgICBzYXZlID0gYXN5bmMgKGl0ZW06IENyZWF0ZUJyb3dzZUhpc3RvcnlJbnB1dCwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8QnJvd3NlSGlzdG9yeT4gPT4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuc2F2ZShpdGVtIGFzIEJyb3dzZUhpc3RvcnksIGF1dGhDb250ZXh0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBvbmUgYnJvd3NlLWhpc3RvcnkgcmVjb3JkIGJ5IGBicm93c0hpc3RvcnlJZGAuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogdXNlciByZS12aXNpdHMgc2FtZSBwbGF0dGVyIGFuZCB5b3UgbmVlZCB0byB1cGRhdGUgc2VsZWN0aW9ucyBvciBtZXRhZGF0YS5cbiAgICAgKiAtIEZhaWxzIGlmIHRoZSByZWNvcmQgZG9lcyBub3QgZXhpc3QuXG4gICAgICogLSBTdGFtcHMgYHVwZGF0ZWRfdGltZWAgLyBgdXBkYXRlZF91c2VyYCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhd2FpdCBicm93c0hpc3RvcnlEYW8udXBkYXRlKFxuICAgICAqICAgICBcImJyb3dzLWhpc3RvcnktdXVpZFwiLFxuICAgICAqICAgICB7IGFkZG9uSWRzOiBbXCJhZGRvbi0xXCIsIFwiYWRkb24tMlwiXSwgcGxhdHRlclByaWNlOiA1NDk5IH0sXG4gICAgICogICAgIHsgdXNlclN1YjogXCJ1c2VyLTEyM1wiIH1cbiAgICAgKiApO1xuICAgICAqL1xuICAgIHVwZGF0ZSA9IGFzeW5jIChcbiAgICAgICAgYnJvd3NlSGlzdG9yeUlkOiBzdHJpbmcsXG4gICAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8QnJvd3NlSGlzdG9yeT4sXG4gICAgICAgIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHRcbiAgICApOiBQcm9taXNlPEJyb3dzZUhpc3Rvcnk+ID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IEJyb3dzZUhpc3RvcnlNb2RlbC51cGRhdGUoXG4gICAgICAgICAgICB7IGJyb3dzZUhpc3RvcnlJZCB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgICAgICAgICAgdXBkYXRlZF90aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRfdXNlcjogYXV0aENvbnRleHQ/LnVzZXJTdWJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiBuZXcgZHluYW1vb3NlLkNvbmRpdGlvbigpLmF0dHJpYnV0ZShcImJyb3dzSGlzdG9yeUlkXCIpLmV4aXN0cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1cGRhdGVkIGFzIHVua25vd24gYXMgQnJvd3NlSGlzdG9yeTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyBvbmUgYnJvd3NlLWhpc3RvcnkgcmVjb3JkIGJ5IHByaW1hcnkga2V5LlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IGRldGFpbCBzY3JlZW4gYWxyZWFkeSBoYXMgYGJyb3dzSGlzdG9yeUlkYCBmcm9tIGEgcHJldmlvdXMgbGlzdCByZXNwb25zZS5cbiAgICAgKiBSZXR1cm5zIGBudWxsYCB3aGVuIHJlY29yZCBpcyBub3QgZm91bmQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGl0ZW0gPSBhd2FpdCBicm93c0hpc3RvcnlEYW8uZ2V0QnlJZChcImJyb3dzLWhpc3RvcnktdXVpZFwiKTtcbiAgICAgKi9cbiAgICBnZXRCeUlkID0gYXN5bmMgKGJyb3dzZUhpc3RvcnlJZDogc3RyaW5nKTogUHJvbWlzZTxCcm93c2VIaXN0b3J5IHwgbnVsbD4gPT4gdGhpcy5nZXQoYnJvd3NlSGlzdG9yeUlkKTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYnJvd3NlLWhpc3RvcnkgZm9yIGEgdXNlciB3aXRoIG9wdGlvbmFsIHNvcnQgYW5kIGxpbWl0LlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IHNob3dpbmcgXCJSZWNlbnRseSBWaWV3ZWRcIiBvciBmdWxsIGJyb3dzZSBoaXN0b3J5IG9uIGhvbWUvcHJvZmlsZSBzY3JlZW4uXG4gICAgICogLSBRdWVyaWVzIGFsbCBwYWdlcyBmcm9tIEdTSSBgdXNlcklkSW5kZXhgLCB0aGVuIHNvcnRzIGluIG1lbW9yeS5cbiAgICAgKiAtIFBhc3MgYHNvcnRCeWAgYXMgYFwiY3JlYXRlZF90aW1lXCJgIG9yIGBcInVwZGF0ZWRfdGltZVwiYCB0byBvcmRlciByZXN1bHRzLlxuICAgICAqIC0gRGVmYXVsdCBgc29ydE9yZGVyYCBpcyBgXCJkZXNjXCJgIChuZXdlc3QgZmlyc3QpLlxuICAgICAqIC0gYGxpbWl0YCBpcyBhcHBsaWVkIGFmdGVyIHNvcnRpbmcgc28gbGF0ZXN0IE4gaXRlbXMgYXJlIHJldHVybmVkIGNvcnJlY3RseS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gTGF0ZXN0IDEwIGJyb3dzZWQgcGxhdHRlcnMgKG1vc3QgcmVjZW50bHkgdXBkYXRlZCBmaXJzdClcbiAgICAgKiBjb25zdCByZWNlbnQgPSBhd2FpdCBicm93c0hpc3RvcnlEYW8uZ2V0QnlVc2VySWQoXCJ1c2VyLTEyM1wiLCAxMCwgXCJ1cGRhdGVkX3RpbWVcIik7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIE9sZGVzdCB2aWV3ZWQgZmlyc3RcbiAgICAgKiBjb25zdCBvbGRlc3RGaXJzdCA9IGF3YWl0IGJyb3dzSGlzdG9yeURhby5nZXRCeVVzZXJJZChcInVzZXItMTIzXCIsIHVuZGVmaW5lZCwgXCJjcmVhdGVkX3RpbWVcIiwgXCJhc2NcIik7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEFsbCBoaXN0b3J5IHdpdGhvdXQgc29ydGluZyAocmF3IER5bmFtb0RCIG9yZGVyKVxuICAgICAqIGNvbnN0IGFsbCA9IGF3YWl0IGJyb3dzSGlzdG9yeURhby5nZXRCeVVzZXJJZChcInVzZXItMTIzXCIpO1xuICAgICAqL1xuICAgIGdldEJ5VXNlcklkID0gYXN5bmMgKFxuICAgICAgICB1c2VySWQ6IHN0cmluZyxcbiAgICAgICAgbGltaXQ/OiBudW1iZXIsXG4gICAgICAgIHNvcnRCeT86IEJyb3dzZUhpc3RvcnlTb3J0RmllbGQsXG4gICAgICAgIHNvcnRPcmRlcjogQnJvd3NlSGlzdG9yeVNvcnRPcmRlciA9IFwiZGVzY1wiXG4gICAgKTogUHJvbWlzZTxCcm93c2VIaXN0b3J5W10+ID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEJyb3dzZUhpc3RvcnlbXSA9IFtdO1xuICAgICAgICBsZXQgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxpc3RCeVVzZXJJZCh1c2VySWQsIHVuZGVmaW5lZCwgdG9rZW4pO1xuICAgICAgICAgICAgaXRlbXMucHVzaCguLi5yZXN1bHQuaXRlbXMpO1xuICAgICAgICAgICAgdG9rZW4gPSByZXN1bHQubmV4dFRva2VuO1xuICAgICAgICB9IHdoaWxlICh0b2tlbik7XG5cbiAgICAgICAgY29uc3Qgc29ydGVkSXRlbXMgPSB0aGlzLnNvcnRCcm93c0hpc3RvcnlJdGVtcyhpdGVtcywgc29ydEJ5LCBzb3J0T3JkZXIpO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGxpbWl0ID09PSBcIm51bWJlclwiID8gc29ydGVkSXRlbXMuc2xpY2UoMCwgbGltaXQpIDogc29ydGVkSXRlbXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlYWRzIHRpbWVzdGFtcCBmcm9tIGF1ZGl0IGZpZWxkIHVzZWQgZm9yIGluLW1lbW9yeSBzb3J0aW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QnJvd3NIaXN0b3J5U29ydFRpbWUgPSAoaXRlbTogQnJvd3NlSGlzdG9yeSwgZmllbGQ6IEJyb3dzZUhpc3RvcnlTb3J0RmllbGQpOiBudW1iZXIgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bZmllbGRdO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUuZ2V0VGltZSgpIDogbmV3IERhdGUodmFsdWUpLmdldFRpbWUoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU29ydHMgYnJvd3NlLWhpc3RvcnkgaXRlbXMgYnkgYGNyZWF0ZWRfdGltZWAgb3IgYHVwZGF0ZWRfdGltZWAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzb3J0QnJvd3NIaXN0b3J5SXRlbXMgPSAoXG4gICAgICAgIGl0ZW1zOiBCcm93c2VIaXN0b3J5W10sXG4gICAgICAgIHNvcnRCeT86IEJyb3dzZUhpc3RvcnlTb3J0RmllbGQsXG4gICAgICAgIHNvcnRPcmRlcjogQnJvd3NlSGlzdG9yeVNvcnRPcmRlciA9IFwiZGVzY1wiXG4gICAgKTogQnJvd3NlSGlzdG9yeVtdID0+IHtcbiAgICAgICAgaWYgKCFzb3J0QnkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNvcnRPcmRlciA9PT0gXCJhc2NcIiA/IDEgOiAtMTtcbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtc10uc29ydChcbiAgICAgICAgICAgIChhLCBiKSA9PiAodGhpcy5nZXRCcm93c0hpc3RvcnlTb3J0VGltZShhLCBzb3J0QnkpIC0gdGhpcy5nZXRCcm93c0hpc3RvcnlTb3J0VGltZShiLCBzb3J0QnkpKSAqIGRpcmVjdGlvblxuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBQYWdpbmF0ZWQgcXVlcnkgb24gR1NJIGB1c2VySWRJbmRleGAuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogaW5maW5pdGUgc2Nyb2xsIC8gbG9hZC1tb3JlIFVJIHdoZXJlIHlvdSBwYXNzIGBuZXh0VG9rZW5gIGZyb20gcHJldmlvdXMgcmVzcG9uc2UuXG4gICAgICogRm9yIHNvcnRlZCBcInJlY2VudCBOXCIgdmlld3MgcHJlZmVyIGBnZXRCeVVzZXJJZGAgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgcGFnZTEgPSBhd2FpdCBicm93c0hpc3RvcnlEYW8ubGlzdEJ5VXNlcklkKFwidXNlci0xMjNcIiwgMjApO1xuICAgICAqIGNvbnN0IHBhZ2UyID0gYXdhaXQgYnJvd3NIaXN0b3J5RGFvLmxpc3RCeVVzZXJJZChcInVzZXItMTIzXCIsIDIwLCBwYWdlMS5uZXh0VG9rZW4pO1xuICAgICAqL1xuICAgIGxpc3RCeVVzZXJJZCA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgbGltaXQ/OiBudW1iZXIsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxMaXN0UmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZGVjb2RlKHRva2VuKTtcbiAgICAgICAgbGV0IHF1ZXJ5QnVpbGRlciA9IEJyb3dzZUhpc3RvcnlNb2RlbC5xdWVyeShcInVzZXJJZFwiKS5lcSh1c2VySWQpLnVzaW5nKFwidXNlcklkSW5kZXhcIik7XG4gICAgICAgIGlmIChkZWNvZGVkVG9rZW4pIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5zdGFydEF0KGRlY29kZWRUb2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcXVlcnlCdWlsZGVyID0gcXVlcnlCdWlsZGVyLmxpbWl0KGxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHF1ZXJ5QnVpbGRlci5leGVjKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogcXVlcnlSZXN1bHQgYXMgdW5rbm93biBhcyBCcm93c2VIaXN0b3J5W10sXG4gICAgICAgICAgICBuZXh0VG9rZW46IGF3YWl0IHRoaXMuZW5jb2RlKHF1ZXJ5UmVzdWx0Lmxhc3RLZXkgYXMgRHluYW1vS2V5IHwgdW5kZWZpbmVkKVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIG9uZSBicm93c2UtaGlzdG9yeSByZWNvcmQgYnkgcHJpbWFyeSBrZXkuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogdXNlciBjbGVhcnMgYSBzaW5nbGUgaXRlbSBmcm9tIGJyb3dzZSBoaXN0b3J5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhd2FpdCBicm93c0hpc3RvcnlEYW8uZGVsZXRlQnlJZChcImJyb3dzLWhpc3RvcnktdXVpZFwiKTtcbiAgICAgKi9cbiAgICBkZWxldGVCeUlkID0gYXN5bmMgKGJyb3dzSGlzdG9yeUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGUoYnJvd3NIaXN0b3J5SWQpO1xuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBicm93c0hpc3RvcnlEYW8gPSBuZXcgQnJvd3NIaXN0b3J5RGFvKCk7XG4iXX0=
@@ -0,0 +1,110 @@
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.convertToBrowseHistoryModel = exports.BrowseHistoryModel = 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
+ const browseHistorySchema = new dynamoose_1.default.Schema({
12
+ browseHistoryId: {
13
+ type: String,
14
+ hashKey: true,
15
+ required: true,
16
+ default: () => (0, crypto_1.randomUUID)()
17
+ },
18
+ userId: {
19
+ type: String,
20
+ required: true,
21
+ index: {
22
+ name: "userIdIndex",
23
+ type: "global"
24
+ }
25
+ },
26
+ resumeJourneyId: {
27
+ type: String,
28
+ required: true
29
+ },
30
+ platterId: {
31
+ type: String,
32
+ required: true
33
+ },
34
+ platterName: {
35
+ type: String,
36
+ required: true
37
+ },
38
+ platterType: {
39
+ type: String,
40
+ required: true
41
+ },
42
+ platterSubType: String,
43
+ platterPrice: {
44
+ type: Number,
45
+ required: true
46
+ },
47
+ totalItems: {
48
+ type: Number,
49
+ required: true
50
+ },
51
+ menuType: {
52
+ type: String,
53
+ required: true
54
+ },
55
+ mealTime: {
56
+ type: String,
57
+ required: true
58
+ },
59
+ platterImage: {
60
+ type: String,
61
+ required: true
62
+ },
63
+ replaceItemIds: {
64
+ type: Array,
65
+ schema: [{
66
+ type: Object,
67
+ schema: {
68
+ originalItemId: {
69
+ type: String,
70
+ required: true
71
+ },
72
+ replaceItemId: {
73
+ type: String,
74
+ required: true
75
+ }
76
+ }
77
+ }],
78
+ default: []
79
+ },
80
+ addonIds: {
81
+ type: Array,
82
+ schema: [String],
83
+ default: []
84
+ },
85
+ cutleryIds: {
86
+ type: Array,
87
+ schema: [String],
88
+ default: []
89
+ },
90
+ liveCounterIds: {
91
+ type: Array,
92
+ schema: [String],
93
+ default: []
94
+ },
95
+ skewerAddonIds: {
96
+ type: Array,
97
+ schema: [String],
98
+ default: []
99
+ },
100
+ ...base_dynamoose_model_1.BASE_DYNAMOOSE_AUDIT_SCHEMA
101
+ }, {
102
+ saveUnknown: false,
103
+ timestamps: true
104
+ });
105
+ exports.BrowseHistoryModel = dynamoose_1.default.model(table_names_1.TABLE_NAMES.BROWSE_HISTORY, browseHistorySchema, { create: false, waitForActive: false });
106
+ const convertToBrowseHistoryModel = (input) => {
107
+ return new exports.BrowseHistoryModel(input);
108
+ };
109
+ exports.convertToBrowseHistoryModel = convertToBrowseHistoryModel;
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlLWhpc3RvcnktbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VzdG9tZXItdXNlci9icm93c2UtaGlzdG9yeS9icm93c2UtaGlzdG9yeS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFDbEMsbUNBQW9DO0FBQ3BDLHFFQUE2RjtBQUM3RiwwREFBdUQ7QUErQnZELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBUyxDQUFDLE1BQU0sQ0FDNUM7SUFDSSxlQUFlLEVBQUU7UUFDYixJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBQSxtQkFBVSxHQUFFO0tBQzlCO0lBQ0QsTUFBTSxFQUFFO1FBQ0osSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRTtZQUNILElBQUksRUFBRSxhQUFhO1lBQ25CLElBQUksRUFBRSxRQUFRO1NBQ2pCO0tBQ0o7SUFDRCxlQUFlLEVBQUU7UUFDYixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsU0FBUyxFQUFFO1FBQ1AsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxXQUFXLEVBQUU7UUFDVCxJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsY0FBYyxFQUFFLE1BQU07SUFDdEIsWUFBWSxFQUFFO1FBQ1YsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFVBQVUsRUFBRTtRQUNSLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxRQUFRLEVBQUU7UUFDTixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsUUFBUSxFQUFFO1FBQ04sSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFlBQVksRUFBRTtRQUNWLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxjQUFjLEVBQUU7UUFDWixJQUFJLEVBQUUsS0FBSztRQUNYLE1BQU0sRUFBRSxDQUFDO2dCQUNMLElBQUksRUFBRSxNQUFNO2dCQUNaLE1BQU0sRUFBRTtvQkFDSixjQUFjLEVBQUU7d0JBQ1osSUFBSSxFQUFFLE1BQU07d0JBQ1osUUFBUSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELGFBQWEsRUFBRTt3QkFDWCxJQUFJLEVBQUUsTUFBTTt3QkFDWixRQUFRLEVBQUUsSUFBSTtxQkFDakI7aUJBQ0o7YUFDSixDQUFDO1FBQ0YsT0FBTyxFQUFFLEVBQUU7S0FDZDtJQUNELFFBQVEsRUFBRTtRQUNOLElBQUksRUFBRSxLQUFLO1FBQ1gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxFQUFFO0tBQ2Q7SUFDRCxVQUFVLEVBQUU7UUFDUixJQUFJLEVBQUUsS0FBSztRQUNYLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoQixPQUFPLEVBQUUsRUFBRTtLQUNkO0lBQ0QsY0FBYyxFQUFFO1FBQ1osSUFBSSxFQUFFLEtBQUs7UUFDWCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDaEIsT0FBTyxFQUFFLEVBQUU7S0FDZDtJQUNELGNBQWMsRUFBRTtRQUNaLElBQUksRUFBRSxLQUFLO1FBQ1gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxFQUFFO0tBQ2Q7SUFDRCxHQUFHLGtEQUEyQjtDQUNqQyxFQUNEO0lBQ0ksV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDbkIsQ0FDSixDQUFDO0FBRVcsUUFBQSxrQkFBa0IsR0FBRyxtQkFBUyxDQUFDLEtBQUssQ0FDN0MseUJBQVcsQ0FBQyxjQUFjLEVBQzFCLG1CQUFtQixFQUNuQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUMxQyxDQUFDO0FBRUssTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQStDLEVBQUUsRUFBRTtJQUMzRixPQUFPLElBQUksMEJBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRlcsUUFBQSwyQkFBMkIsK0JBRXRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGR5bmFtb29zZSBmcm9tIFwiZHluYW1vb3NlXCI7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgQkFTRV9EWU5BTU9PU0VfQVVESVRfU0NIRU1BLCBCYXNlRHluYW1vb3NlTW9kZWwgfSBmcm9tIFwiLi4vLi4vYmFzZS1keW5hbW9vc2UtbW9kZWxcIjtcbmltcG9ydCB7IFRBQkxFX05BTUVTIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy90YWJsZS1uYW1lc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzSGlzdG9yeVJlcGxhY2VJdGVtIHtcbiAgICBvcmlnaW5hbEl0ZW1JZDogc3RyaW5nO1xuICAgIHJlcGxhY2VJdGVtSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm93c2VIaXN0b3J5IGV4dGVuZHMgQmFzZUR5bmFtb29zZU1vZGVsIHtcbiAgICBicm93c2VIaXN0b3J5SWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByZXN1bWVKb3VybmV5SWQ6IHN0cmluZztcbiAgICBwbGF0dGVySWQ6IHN0cmluZztcbiAgICBwbGF0dGVyTmFtZTogc3RyaW5nO1xuICAgIHBsYXR0ZXJUeXBlOiBzdHJpbmc7XG4gICAgcGxhdHRlclN1YlR5cGU/OiBzdHJpbmc7XG4gICAgcGxhdHRlclByaWNlOiBudW1iZXI7XG4gICAgdG90YWxJdGVtczogbnVtYmVyO1xuICAgIG1lbnVUeXBlOiBzdHJpbmc7XG4gICAgbWVhbFRpbWU6IHN0cmluZztcbiAgICBwbGF0dGVySW1hZ2U6IHN0cmluZztcbiAgICByZXBsYWNlSXRlbUlkczogQnJvd3NIaXN0b3J5UmVwbGFjZUl0ZW1bXTtcbiAgICBhZGRvbklkczogc3RyaW5nW107XG4gICAgY3V0bGVyeUlkczogc3RyaW5nW107XG4gICAgbGl2ZUNvdW50ZXJJZHM6IHN0cmluZ1tdO1xuICAgIHNrZXdlckFkZG9uSWRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlQnJvd3NlSGlzdG9yeUlucHV0ID0gT21pdDxCcm93c2VIaXN0b3J5LCBcImJyb3dzZUhpc3RvcnlJZFwiPiAmIHtcbiAgICBicm93c2VIaXN0b3J5SWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBicm93c2VIaXN0b3J5U2NoZW1hID0gbmV3IGR5bmFtb29zZS5TY2hlbWEoXG4gICAge1xuICAgICAgICBicm93c2VIaXN0b3J5SWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGhhc2hLZXk6IHRydWUsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IHJhbmRvbVVVSUQoKVxuICAgICAgICB9LFxuICAgICAgICB1c2VySWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInVzZXJJZEluZGV4XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZXN1bWVKb3VybmV5SWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXR0ZXJJZDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdHRlck5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXR0ZXJUeXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBwbGF0dGVyU3ViVHlwZTogU3RyaW5nLFxuICAgICAgICBwbGF0dGVyUHJpY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRvdGFsSXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1lbnVUeXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtZWFsVGltZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdHRlckltYWdlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICByZXBsYWNlSXRlbUlkczoge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBzY2hlbWE6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEl0ZW1JZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUl0ZW1JZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgZGVmYXVsdDogW11cbiAgICAgICAgfSxcbiAgICAgICAgYWRkb25JZHM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgc2NoZW1hOiBbU3RyaW5nXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGN1dGxlcnlJZHM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgc2NoZW1hOiBbU3RyaW5nXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGxpdmVDb3VudGVySWRzOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIHNjaGVtYTogW1N0cmluZ10sXG4gICAgICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgICB9LFxuICAgICAgICBza2V3ZXJBZGRvbklkczoge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBzY2hlbWE6IFtTdHJpbmddLFxuICAgICAgICAgICAgZGVmYXVsdDogW11cbiAgICAgICAgfSxcbiAgICAgICAgLi4uQkFTRV9EWU5BTU9PU0VfQVVESVRfU0NIRU1BXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNhdmVVbmtub3duOiBmYWxzZSxcbiAgICAgICAgdGltZXN0YW1wczogdHJ1ZVxuICAgIH1cbik7XG5cbmV4cG9ydCBjb25zdCBCcm93c2VIaXN0b3J5TW9kZWwgPSBkeW5hbW9vc2UubW9kZWw8QnJvd3NlSGlzdG9yeT4oXG4gICAgVEFCTEVfTkFNRVMuQlJPV1NFX0hJU1RPUlksXG4gICAgYnJvd3NlSGlzdG9yeVNjaGVtYSxcbiAgICB7IGNyZWF0ZTogZmFsc2UsIHdhaXRGb3JBY3RpdmU6IGZhbHNlIH1cbik7XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9Ccm93c2VIaXN0b3J5TW9kZWwgPSAoaW5wdXQ6IENyZWF0ZUJyb3dzZUhpc3RvcnlJbnB1dCB8IEJyb3dzZUhpc3RvcnkpID0+IHtcbiAgICByZXR1cm4gbmV3IEJyb3dzZUhpc3RvcnlNb2RlbChpbnB1dCk7XG59O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cmp-aws-database",
3
- "version": "2.1.2-dev.20",
3
+ "version": "2.1.2-dev.21",
4
4
  "bin": {
5
5
  "craft-my-plate-database": "bin/craft-my-plate-database.js"
6
6
  },
@@ -1,173 +0,0 @@
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.browsHistoryDao = void 0;
7
- const dynamoose_1 = __importDefault(require("dynamoose"));
8
- const base_dynamoose_dao_1 = require("../../base-dynamoose-dao");
9
- const brows_history_model_1 = require("./brows-history-model");
10
- /**
11
- * DAO for user platter browse history.
12
- *
13
- * Table keys: `browsHistoryId` (PK).
14
- * User lookup: query GSI `userIdIndex` by `userId`.
15
- */
16
- class BrowsHistoryDao extends base_dynamoose_dao_1.GenericDynamooseDAO {
17
- constructor() {
18
- super(brows_history_model_1.BrowseHistoryModel, "browseHistoryId");
19
- /**
20
- * Creates one browse-history record.
21
- *
22
- * Use when: user views a platter and you want to persist that browse event.
23
- * - `browsHistoryId` auto-generates if omitted.
24
- * - `userId` is required for later `getByUserId` / `listByUserId` lookups.
25
- * - Stamps `created_time` / `created_user` automatically.
26
- *
27
- * @example
28
- * await browsHistoryDao.save({
29
- * userId: "user-123",
30
- * platterId: "platter-abc",
31
- * platterName: "Birthday Feast",
32
- * platterType: "CATERING",
33
- * platterPrice: 4999,
34
- * totalItems: 12,
35
- * menuType: "VEG",
36
- * mealTime: "Dinner",
37
- * platterImage: "https://...",
38
- * replaceItemIds: [{ originalItemId: "item-1", replaceItemId: "item-2" }],
39
- * addonIds: [],
40
- * cutleryIds: [],
41
- * liveCounterIds: [],
42
- * skewerAddonIds: []
43
- * }, { userSub: "user-123" });
44
- */
45
- this.save = async (item, authContext) => {
46
- return super.save(item, authContext);
47
- };
48
- /**
49
- * Updates one browse-history record by `browsHistoryId`.
50
- *
51
- * Use when: user re-visits same platter and you need to update selections or metadata.
52
- * - Fails if the record does not exist.
53
- * - Stamps `updated_time` / `updated_user` automatically.
54
- *
55
- * @example
56
- * await browsHistoryDao.update(
57
- * "brows-history-uuid",
58
- * { addonIds: ["addon-1", "addon-2"], platterPrice: 5499 },
59
- * { userSub: "user-123" }
60
- * );
61
- */
62
- this.update = async (browseHistoryId, updates, authContext) => {
63
- const updated = await brows_history_model_1.BrowseHistoryModel.update({ browseHistoryId }, {
64
- ...updates,
65
- updated_time: new Date(),
66
- updated_user: authContext?.userSub
67
- }, {
68
- condition: new dynamoose_1.default.Condition().attribute("browsHistoryId").exists()
69
- });
70
- return updated;
71
- };
72
- /**
73
- * Fetches one browse-history record by primary key.
74
- *
75
- * Use when: detail screen already has `browsHistoryId` from a previous list response.
76
- * Returns `null` when record is not found.
77
- *
78
- * @example
79
- * const item = await browsHistoryDao.getById("brows-history-uuid");
80
- */
81
- this.getById = async (browseHistoryId) => this.get(browseHistoryId);
82
- /**
83
- * Returns browse-history for a user with optional sort and limit.
84
- *
85
- * Use when: showing "Recently Viewed" or full browse history on home/profile screen.
86
- * - Queries all pages from GSI `userIdIndex`, then sorts in memory.
87
- * - Pass `sortBy` as `"created_time"` or `"updated_time"` to order results.
88
- * - Default `sortOrder` is `"desc"` (newest first).
89
- * - `limit` is applied after sorting so latest N items are returned correctly.
90
- *
91
- * @example
92
- * // Latest 10 browsed platters (most recently updated first)
93
- * const recent = await browsHistoryDao.getByUserId("user-123", 10, "updated_time");
94
- *
95
- * @example
96
- * // Oldest viewed first
97
- * const oldestFirst = await browsHistoryDao.getByUserId("user-123", undefined, "created_time", "asc");
98
- *
99
- * @example
100
- * // All history without sorting (raw DynamoDB order)
101
- * const all = await browsHistoryDao.getByUserId("user-123");
102
- */
103
- this.getByUserId = async (userId, limit, sortBy, sortOrder = "desc") => {
104
- const items = [];
105
- let token;
106
- do {
107
- const result = await this.listByUserId(userId, undefined, token);
108
- items.push(...result.items);
109
- token = result.nextToken;
110
- } while (token);
111
- const sortedItems = this.sortBrowsHistoryItems(items, sortBy, sortOrder);
112
- return typeof limit === "number" ? sortedItems.slice(0, limit) : sortedItems;
113
- };
114
- /**
115
- * Reads timestamp from audit field used for in-memory sorting.
116
- */
117
- this.getBrowsHistorySortTime = (item, field) => {
118
- const value = item[field];
119
- if (!value) {
120
- return 0;
121
- }
122
- return value instanceof Date ? value.getTime() : new Date(value).getTime();
123
- };
124
- /**
125
- * Sorts browse-history items by `created_time` or `updated_time`.
126
- */
127
- this.sortBrowsHistoryItems = (items, sortBy, sortOrder = "desc") => {
128
- if (!sortBy) {
129
- return items;
130
- }
131
- const direction = sortOrder === "asc" ? 1 : -1;
132
- return [...items].sort((a, b) => (this.getBrowsHistorySortTime(a, sortBy) - this.getBrowsHistorySortTime(b, sortBy)) * direction);
133
- };
134
- /**
135
- * Paginated query on GSI `userIdIndex`.
136
- *
137
- * Use when: infinite scroll / load-more UI where you pass `nextToken` from previous response.
138
- * For sorted "recent N" views prefer `getByUserId` instead.
139
- *
140
- * @example
141
- * const page1 = await browsHistoryDao.listByUserId("user-123", 20);
142
- * const page2 = await browsHistoryDao.listByUserId("user-123", 20, page1.nextToken);
143
- */
144
- this.listByUserId = async (userId, limit, token) => {
145
- const decodedToken = this.decode(token);
146
- let queryBuilder = brows_history_model_1.BrowseHistoryModel.query("userId").eq(userId).using("userIdIndex");
147
- if (decodedToken) {
148
- queryBuilder = queryBuilder.startAt(decodedToken);
149
- }
150
- if (typeof limit === "number") {
151
- queryBuilder = queryBuilder.limit(limit);
152
- }
153
- const queryResult = await queryBuilder.exec();
154
- return {
155
- items: queryResult,
156
- nextToken: await this.encode(queryResult.lastKey)
157
- };
158
- };
159
- /**
160
- * Deletes one browse-history record by primary key.
161
- *
162
- * Use when: user clears a single item from browse history.
163
- *
164
- * @example
165
- * await browsHistoryDao.deleteById("brows-history-uuid");
166
- */
167
- this.deleteById = async (browsHistoryId) => {
168
- await this.delete(browsHistoryId);
169
- };
170
- }
171
- }
172
- exports.browsHistoryDao = new BrowsHistoryDao();
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3MtaGlzdG9yeS1kYW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3VzdG9tZXItdXNlci9icm93cy1oaXN0b3J5L2Jyb3dzLWhpc3RvcnktZGFvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUFrQztBQUNsQyxpRUFBMEU7QUFFMUUsK0RBSStCO0FBVS9COzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFnQixTQUFRLHdDQUFrQztJQUM1RDtRQUNJLEtBQUssQ0FBQyx3Q0FBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBR2pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBeUJHO1FBQ0gsU0FBSSxHQUFHLEtBQUssRUFBRSxJQUE4QixFQUFFLFdBQXlCLEVBQTBCLEVBQUU7WUFDL0YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7Ozs7Ozs7V0FhRztRQUNILFdBQU0sR0FBRyxLQUFLLEVBQ1YsZUFBdUIsRUFDdkIsT0FBK0IsRUFDL0IsV0FBeUIsRUFDSCxFQUFFO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sd0NBQWtCLENBQUMsTUFBTSxDQUMzQyxFQUFFLGVBQWUsRUFBRSxFQUNuQjtnQkFDSSxHQUFHLE9BQU87Z0JBQ1YsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUN4QixZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU87YUFDckMsRUFDRDtnQkFDSSxTQUFTLEVBQUUsSUFBSSxtQkFBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sRUFBRTthQUM1RSxDQUNKLENBQUM7WUFDRixPQUFPLE9BQW1DLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7O1dBUUc7UUFDSCxZQUFPLEdBQUcsS0FBSyxFQUFFLGVBQXVCLEVBQWlDLEVBQUUs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WUFDN0MsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLFdBQXlDO2dCQUNoRCxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFnQyxDQUFDO2FBQzdFLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRjs7Ozs7OztXQU9HO1FBQ0gsZUFBVSxHQUFHLEtBQUssRUFBRSxjQUFzQixFQUFpQixFQUFFO1lBQ3pELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUM7SUFyTEYsQ0FBQztDQXNMSjtBQUVZLFFBQUEsZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZHluYW1vb3NlIGZyb20gXCJkeW5hbW9vc2VcIjtcbmltcG9ydCB7IER5bmFtb0tleSwgR2VuZXJpY0R5bmFtb29zZURBTyB9IGZyb20gXCIuLi8uLi9iYXNlLWR5bmFtb29zZS1kYW9cIjtcbmltcG9ydCB7IEF1dGhDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2Jhc2UtZHluYW1vb3NlLW1vZGVsXCI7XG5pbXBvcnQge1xuICAgIEJyb3dzZUhpc3RvcnksXG4gICAgQnJvd3NlSGlzdG9yeU1vZGVsLFxuICAgIENyZWF0ZUJyb3dzZUhpc3RvcnlJbnB1dFxufSBmcm9tIFwiLi9icm93cy1oaXN0b3J5LW1vZGVsXCI7XG5cbnR5cGUgTGlzdFJlc3VsdCA9IHtcbiAgICBpdGVtczogQnJvd3NlSGlzdG9yeVtdO1xuICAgIG5leHRUb2tlbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEJyb3dzZUhpc3RvcnlTb3J0RmllbGQgPSBcImNyZWF0ZWRfdGltZVwiIHwgXCJ1cGRhdGVkX3RpbWVcIjtcbmV4cG9ydCB0eXBlIEJyb3dzZUhpc3RvcnlTb3J0T3JkZXIgPSBcImFzY1wiIHwgXCJkZXNjXCI7XG5cbi8qKlxuICogREFPIGZvciB1c2VyIHBsYXR0ZXIgYnJvd3NlIGhpc3RvcnkuXG4gKlxuICogVGFibGUga2V5czogYGJyb3dzSGlzdG9yeUlkYCAoUEspLlxuICogVXNlciBsb29rdXA6IHF1ZXJ5IEdTSSBgdXNlcklkSW5kZXhgIGJ5IGB1c2VySWRgLlxuICovXG5jbGFzcyBCcm93c0hpc3RvcnlEYW8gZXh0ZW5kcyBHZW5lcmljRHluYW1vb3NlREFPPEJyb3dzZUhpc3Rvcnk+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoQnJvd3NlSGlzdG9yeU1vZGVsLCBcImJyb3dzZUhpc3RvcnlJZFwiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG9uZSBicm93c2UtaGlzdG9yeSByZWNvcmQuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogdXNlciB2aWV3cyBhIHBsYXR0ZXIgYW5kIHlvdSB3YW50IHRvIHBlcnNpc3QgdGhhdCBicm93c2UgZXZlbnQuXG4gICAgICogLSBgYnJvd3NIaXN0b3J5SWRgIGF1dG8tZ2VuZXJhdGVzIGlmIG9taXR0ZWQuXG4gICAgICogLSBgdXNlcklkYCBpcyByZXF1aXJlZCBmb3IgbGF0ZXIgYGdldEJ5VXNlcklkYCAvIGBsaXN0QnlVc2VySWRgIGxvb2t1cHMuXG4gICAgICogLSBTdGFtcHMgYGNyZWF0ZWRfdGltZWAgLyBgY3JlYXRlZF91c2VyYCBhdXRvbWF0aWNhbGx5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhd2FpdCBicm93c0hpc3RvcnlEYW8uc2F2ZSh7XG4gICAgICogICAgIHVzZXJJZDogXCJ1c2VyLTEyM1wiLFxuICAgICAqICAgICBwbGF0dGVySWQ6IFwicGxhdHRlci1hYmNcIixcbiAgICAgKiAgICAgcGxhdHRlck5hbWU6IFwiQmlydGhkYXkgRmVhc3RcIixcbiAgICAgKiAgICAgcGxhdHRlclR5cGU6IFwiQ0FURVJJTkdcIixcbiAgICAgKiAgICAgcGxhdHRlclByaWNlOiA0OTk5LFxuICAgICAqICAgICB0b3RhbEl0ZW1zOiAxMixcbiAgICAgKiAgICAgbWVudVR5cGU6IFwiVkVHXCIsXG4gICAgICogICAgIG1lYWxUaW1lOiBcIkRpbm5lclwiLFxuICAgICAqICAgICBwbGF0dGVySW1hZ2U6IFwiaHR0cHM6Ly8uLi5cIixcbiAgICAgKiAgICAgcmVwbGFjZUl0ZW1JZHM6IFt7IG9yaWdpbmFsSXRlbUlkOiBcIml0ZW0tMVwiLCByZXBsYWNlSXRlbUlkOiBcIml0ZW0tMlwiIH1dLFxuICAgICAqICAgICBhZGRvbklkczogW10sXG4gICAgICogICAgIGN1dGxlcnlJZHM6IFtdLFxuICAgICAqICAgICBsaXZlQ291bnRlcklkczogW10sXG4gICAgICogICAgIHNrZXdlckFkZG9uSWRzOiBbXVxuICAgICAqIH0sIHsgdXNlclN1YjogXCJ1c2VyLTEyM1wiIH0pO1xuICAgICAqL1xuICAgIHNhdmUgPSBhc3luYyAoaXRlbTogQ3JlYXRlQnJvd3NlSGlzdG9yeUlucHV0LCBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0KTogUHJvbWlzZTxCcm93c2VIaXN0b3J5PiA9PiB7XG4gICAgICAgIHJldHVybiBzdXBlci5zYXZlKGl0ZW0gYXMgQnJvd3NlSGlzdG9yeSwgYXV0aENvbnRleHQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIG9uZSBicm93c2UtaGlzdG9yeSByZWNvcmQgYnkgYGJyb3dzSGlzdG9yeUlkYC5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiB1c2VyIHJlLXZpc2l0cyBzYW1lIHBsYXR0ZXIgYW5kIHlvdSBuZWVkIHRvIHVwZGF0ZSBzZWxlY3Rpb25zIG9yIG1ldGFkYXRhLlxuICAgICAqIC0gRmFpbHMgaWYgdGhlIHJlY29yZCBkb2VzIG5vdCBleGlzdC5cbiAgICAgKiAtIFN0YW1wcyBgdXBkYXRlZF90aW1lYCAvIGB1cGRhdGVkX3VzZXJgIGF1dG9tYXRpY2FsbHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGF3YWl0IGJyb3dzSGlzdG9yeURhby51cGRhdGUoXG4gICAgICogICAgIFwiYnJvd3MtaGlzdG9yeS11dWlkXCIsXG4gICAgICogICAgIHsgYWRkb25JZHM6IFtcImFkZG9uLTFcIiwgXCJhZGRvbi0yXCJdLCBwbGF0dGVyUHJpY2U6IDU0OTkgfSxcbiAgICAgKiAgICAgeyB1c2VyU3ViOiBcInVzZXItMTIzXCIgfVxuICAgICAqICk7XG4gICAgICovXG4gICAgdXBkYXRlID0gYXN5bmMgKFxuICAgICAgICBicm93c2VIaXN0b3J5SWQ6IHN0cmluZyxcbiAgICAgICAgdXBkYXRlczogUGFydGlhbDxCcm93c2VIaXN0b3J5PixcbiAgICAgICAgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dFxuICAgICk6IFByb21pc2U8QnJvd3NlSGlzdG9yeT4gPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgQnJvd3NlSGlzdG9yeU1vZGVsLnVwZGF0ZShcbiAgICAgICAgICAgIHsgYnJvd3NlSGlzdG9yeUlkIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX3RpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgdXBkYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IG5ldyBkeW5hbW9vc2UuQ29uZGl0aW9uKCkuYXR0cmlidXRlKFwiYnJvd3NIaXN0b3J5SWRcIikuZXhpc3RzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQgYXMgdW5rbm93biBhcyBCcm93c2VIaXN0b3J5O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIG9uZSBicm93c2UtaGlzdG9yeSByZWNvcmQgYnkgcHJpbWFyeSBrZXkuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogZGV0YWlsIHNjcmVlbiBhbHJlYWR5IGhhcyBgYnJvd3NIaXN0b3J5SWRgIGZyb20gYSBwcmV2aW91cyBsaXN0IHJlc3BvbnNlLlxuICAgICAqIFJldHVybnMgYG51bGxgIHdoZW4gcmVjb3JkIGlzIG5vdCBmb3VuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgaXRlbSA9IGF3YWl0IGJyb3dzSGlzdG9yeURhby5nZXRCeUlkKFwiYnJvd3MtaGlzdG9yeS11dWlkXCIpO1xuICAgICAqL1xuICAgIGdldEJ5SWQgPSBhc3luYyAoYnJvd3NlSGlzdG9yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEJyb3dzZUhpc3RvcnkgfCBudWxsPiA9PiB0aGlzLmdldChicm93c2VIaXN0b3J5SWQpO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBicm93c2UtaGlzdG9yeSBmb3IgYSB1c2VyIHdpdGggb3B0aW9uYWwgc29ydCBhbmQgbGltaXQuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogc2hvd2luZyBcIlJlY2VudGx5IFZpZXdlZFwiIG9yIGZ1bGwgYnJvd3NlIGhpc3Rvcnkgb24gaG9tZS9wcm9maWxlIHNjcmVlbi5cbiAgICAgKiAtIFF1ZXJpZXMgYWxsIHBhZ2VzIGZyb20gR1NJIGB1c2VySWRJbmRleGAsIHRoZW4gc29ydHMgaW4gbWVtb3J5LlxuICAgICAqIC0gUGFzcyBgc29ydEJ5YCBhcyBgXCJjcmVhdGVkX3RpbWVcImAgb3IgYFwidXBkYXRlZF90aW1lXCJgIHRvIG9yZGVyIHJlc3VsdHMuXG4gICAgICogLSBEZWZhdWx0IGBzb3J0T3JkZXJgIGlzIGBcImRlc2NcImAgKG5ld2VzdCBmaXJzdCkuXG4gICAgICogLSBgbGltaXRgIGlzIGFwcGxpZWQgYWZ0ZXIgc29ydGluZyBzbyBsYXRlc3QgTiBpdGVtcyBhcmUgcmV0dXJuZWQgY29ycmVjdGx5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBMYXRlc3QgMTAgYnJvd3NlZCBwbGF0dGVycyAobW9zdCByZWNlbnRseSB1cGRhdGVkIGZpcnN0KVxuICAgICAqIGNvbnN0IHJlY2VudCA9IGF3YWl0IGJyb3dzSGlzdG9yeURhby5nZXRCeVVzZXJJZChcInVzZXItMTIzXCIsIDEwLCBcInVwZGF0ZWRfdGltZVwiKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gT2xkZXN0IHZpZXdlZCBmaXJzdFxuICAgICAqIGNvbnN0IG9sZGVzdEZpcnN0ID0gYXdhaXQgYnJvd3NIaXN0b3J5RGFvLmdldEJ5VXNlcklkKFwidXNlci0xMjNcIiwgdW5kZWZpbmVkLCBcImNyZWF0ZWRfdGltZVwiLCBcImFzY1wiKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQWxsIGhpc3Rvcnkgd2l0aG91dCBzb3J0aW5nIChyYXcgRHluYW1vREIgb3JkZXIpXG4gICAgICogY29uc3QgYWxsID0gYXdhaXQgYnJvd3NIaXN0b3J5RGFvLmdldEJ5VXNlcklkKFwidXNlci0xMjNcIik7XG4gICAgICovXG4gICAgZ2V0QnlVc2VySWQgPSBhc3luYyAoXG4gICAgICAgIHVzZXJJZDogc3RyaW5nLFxuICAgICAgICBsaW1pdD86IG51bWJlcixcbiAgICAgICAgc29ydEJ5PzogQnJvd3NlSGlzdG9yeVNvcnRGaWVsZCxcbiAgICAgICAgc29ydE9yZGVyOiBCcm93c2VIaXN0b3J5U29ydE9yZGVyID0gXCJkZXNjXCJcbiAgICApOiBQcm9taXNlPEJyb3dzZUhpc3RvcnlbXT4gPT4ge1xuICAgICAgICBjb25zdCBpdGVtczogQnJvd3NlSGlzdG9yeVtdID0gW107XG4gICAgICAgIGxldCB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubGlzdEJ5VXNlcklkKHVzZXJJZCwgdW5kZWZpbmVkLCB0b2tlbik7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKC4uLnJlc3VsdC5pdGVtcyk7XG4gICAgICAgICAgICB0b2tlbiA9IHJlc3VsdC5uZXh0VG9rZW47XG4gICAgICAgIH0gd2hpbGUgKHRva2VuKTtcblxuICAgICAgICBjb25zdCBzb3J0ZWRJdGVtcyA9IHRoaXMuc29ydEJyb3dzSGlzdG9yeUl0ZW1zKGl0ZW1zLCBzb3J0QnksIHNvcnRPcmRlcik7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIgPyBzb3J0ZWRJdGVtcy5zbGljZSgwLCBsaW1pdCkgOiBzb3J0ZWRJdGVtcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVhZHMgdGltZXN0YW1wIGZyb20gYXVkaXQgZmllbGQgdXNlZCBmb3IgaW4tbWVtb3J5IHNvcnRpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRCcm93c0hpc3RvcnlTb3J0VGltZSA9IChpdGVtOiBCcm93c2VIaXN0b3J5LCBmaWVsZDogQnJvd3NlSGlzdG9yeVNvcnRGaWVsZCk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtmaWVsZF07XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS5nZXRUaW1lKCkgOiBuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTb3J0cyBicm93c2UtaGlzdG9yeSBpdGVtcyBieSBgY3JlYXRlZF90aW1lYCBvciBgdXBkYXRlZF90aW1lYC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNvcnRCcm93c0hpc3RvcnlJdGVtcyA9IChcbiAgICAgICAgaXRlbXM6IEJyb3dzZUhpc3RvcnlbXSxcbiAgICAgICAgc29ydEJ5PzogQnJvd3NlSGlzdG9yeVNvcnRGaWVsZCxcbiAgICAgICAgc29ydE9yZGVyOiBCcm93c2VIaXN0b3J5U29ydE9yZGVyID0gXCJkZXNjXCJcbiAgICApOiBCcm93c2VIaXN0b3J5W10gPT4ge1xuICAgICAgICBpZiAoIXNvcnRCeSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc29ydE9yZGVyID09PSBcImFzY1wiID8gMSA6IC0xO1xuICAgICAgICByZXR1cm4gWy4uLml0ZW1zXS5zb3J0KFxuICAgICAgICAgICAgKGEsIGIpID0+ICh0aGlzLmdldEJyb3dzSGlzdG9yeVNvcnRUaW1lKGEsIHNvcnRCeSkgLSB0aGlzLmdldEJyb3dzSGlzdG9yeVNvcnRUaW1lKGIsIHNvcnRCeSkpICogZGlyZWN0aW9uXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFBhZ2luYXRlZCBxdWVyeSBvbiBHU0kgYHVzZXJJZEluZGV4YC5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiBpbmZpbml0ZSBzY3JvbGwgLyBsb2FkLW1vcmUgVUkgd2hlcmUgeW91IHBhc3MgYG5leHRUb2tlbmAgZnJvbSBwcmV2aW91cyByZXNwb25zZS5cbiAgICAgKiBGb3Igc29ydGVkIFwicmVjZW50IE5cIiB2aWV3cyBwcmVmZXIgYGdldEJ5VXNlcklkYCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBwYWdlMSA9IGF3YWl0IGJyb3dzSGlzdG9yeURhby5saXN0QnlVc2VySWQoXCJ1c2VyLTEyM1wiLCAyMCk7XG4gICAgICogY29uc3QgcGFnZTIgPSBhd2FpdCBicm93c0hpc3RvcnlEYW8ubGlzdEJ5VXNlcklkKFwidXNlci0xMjNcIiwgMjAsIHBhZ2UxLm5leHRUb2tlbik7XG4gICAgICovXG4gICAgbGlzdEJ5VXNlcklkID0gYXN5bmMgKHVzZXJJZDogc3RyaW5nLCBsaW1pdD86IG51bWJlciwgdG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPExpc3RSZXN1bHQ+ID0+IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gdGhpcy5kZWNvZGUodG9rZW4pO1xuICAgICAgICBsZXQgcXVlcnlCdWlsZGVyID0gQnJvd3NlSGlzdG9yeU1vZGVsLnF1ZXJ5KFwidXNlcklkXCIpLmVxKHVzZXJJZCkudXNpbmcoXCJ1c2VySWRJbmRleFwiKTtcbiAgICAgICAgaWYgKGRlY29kZWRUb2tlbikge1xuICAgICAgICAgICAgcXVlcnlCdWlsZGVyID0gcXVlcnlCdWlsZGVyLnN0YXJ0QXQoZGVjb2RlZFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxpbWl0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIubGltaXQobGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gYXdhaXQgcXVlcnlCdWlsZGVyLmV4ZWMoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1zOiBxdWVyeVJlc3VsdCBhcyB1bmtub3duIGFzIEJyb3dzZUhpc3RvcnlbXSxcbiAgICAgICAgICAgIG5leHRUb2tlbjogYXdhaXQgdGhpcy5lbmNvZGUocXVlcnlSZXN1bHQubGFzdEtleSBhcyBEeW5hbW9LZXkgfCB1bmRlZmluZWQpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgb25lIGJyb3dzZS1oaXN0b3J5IHJlY29yZCBieSBwcmltYXJ5IGtleS5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiB1c2VyIGNsZWFycyBhIHNpbmdsZSBpdGVtIGZyb20gYnJvd3NlIGhpc3RvcnkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGF3YWl0IGJyb3dzSGlzdG9yeURhby5kZWxldGVCeUlkKFwiYnJvd3MtaGlzdG9yeS11dWlkXCIpO1xuICAgICAqL1xuICAgIGRlbGV0ZUJ5SWQgPSBhc3luYyAoYnJvd3NIaXN0b3J5SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZShicm93c0hpc3RvcnlJZCk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGJyb3dzSGlzdG9yeURhbyA9IG5ldyBCcm93c0hpc3RvcnlEYW8oKTtcbiJdfQ==
@@ -1,110 +0,0 @@
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.convertToBrowseHistoryModel = exports.BrowseHistoryModel = 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
- const browseHistorySchema = new dynamoose_1.default.Schema({
12
- browseHistoryId: {
13
- type: String,
14
- hashKey: true,
15
- required: true,
16
- default: () => (0, crypto_1.randomUUID)()
17
- },
18
- userId: {
19
- type: String,
20
- required: true,
21
- index: {
22
- name: "userIdIndex",
23
- type: "global"
24
- }
25
- },
26
- resumeJourneyId: {
27
- type: String,
28
- required: true
29
- },
30
- platterId: {
31
- type: String,
32
- required: true
33
- },
34
- platterName: {
35
- type: String,
36
- required: true
37
- },
38
- platterType: {
39
- type: String,
40
- required: true
41
- },
42
- platterSubType: String,
43
- platterPrice: {
44
- type: Number,
45
- required: true
46
- },
47
- totalItems: {
48
- type: Number,
49
- required: true
50
- },
51
- menuType: {
52
- type: String,
53
- required: true
54
- },
55
- mealTime: {
56
- type: String,
57
- required: true
58
- },
59
- platterImage: {
60
- type: String,
61
- required: true
62
- },
63
- replaceItemIds: {
64
- type: Array,
65
- schema: [{
66
- type: Object,
67
- schema: {
68
- originalItemId: {
69
- type: String,
70
- required: true
71
- },
72
- replaceItemId: {
73
- type: String,
74
- required: true
75
- }
76
- }
77
- }],
78
- default: []
79
- },
80
- addonIds: {
81
- type: Array,
82
- schema: [String],
83
- default: []
84
- },
85
- cutleryIds: {
86
- type: Array,
87
- schema: [String],
88
- default: []
89
- },
90
- liveCounterIds: {
91
- type: Array,
92
- schema: [String],
93
- default: []
94
- },
95
- skewerAddonIds: {
96
- type: Array,
97
- schema: [String],
98
- default: []
99
- },
100
- ...base_dynamoose_model_1.BASE_DYNAMOOSE_AUDIT_SCHEMA
101
- }, {
102
- saveUnknown: false,
103
- timestamps: true
104
- });
105
- exports.BrowseHistoryModel = dynamoose_1.default.model(table_names_1.TABLE_NAMES.BROWSE_HISTORY, browseHistorySchema, { create: false, waitForActive: false });
106
- const convertToBrowseHistoryModel = (input) => {
107
- return new exports.BrowseHistoryModel(input);
108
- };
109
- exports.convertToBrowseHistoryModel = convertToBrowseHistoryModel;
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3MtaGlzdG9yeS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXN0b21lci11c2VyL2Jyb3dzLWhpc3RvcnkvYnJvd3MtaGlzdG9yeS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFDbEMsbUNBQW9DO0FBQ3BDLHFFQUE2RjtBQUM3RiwwREFBdUQ7QUErQnZELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBUyxDQUFDLE1BQU0sQ0FDNUM7SUFDSSxlQUFlLEVBQUU7UUFDYixJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBQSxtQkFBVSxHQUFFO0tBQzlCO0lBQ0QsTUFBTSxFQUFFO1FBQ0osSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRTtZQUNILElBQUksRUFBRSxhQUFhO1lBQ25CLElBQUksRUFBRSxRQUFRO1NBQ2pCO0tBQ0o7SUFDRCxlQUFlLEVBQUU7UUFDYixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsU0FBUyxFQUFFO1FBQ1AsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxXQUFXLEVBQUU7UUFDVCxJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsY0FBYyxFQUFFLE1BQU07SUFDdEIsWUFBWSxFQUFFO1FBQ1YsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFVBQVUsRUFBRTtRQUNSLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxRQUFRLEVBQUU7UUFDTixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsUUFBUSxFQUFFO1FBQ04sSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFlBQVksRUFBRTtRQUNWLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxjQUFjLEVBQUU7UUFDWixJQUFJLEVBQUUsS0FBSztRQUNYLE1BQU0sRUFBRSxDQUFDO2dCQUNMLElBQUksRUFBRSxNQUFNO2dCQUNaLE1BQU0sRUFBRTtvQkFDSixjQUFjLEVBQUU7d0JBQ1osSUFBSSxFQUFFLE1BQU07d0JBQ1osUUFBUSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELGFBQWEsRUFBRTt3QkFDWCxJQUFJLEVBQUUsTUFBTTt3QkFDWixRQUFRLEVBQUUsSUFBSTtxQkFDakI7aUJBQ0o7YUFDSixDQUFDO1FBQ0YsT0FBTyxFQUFFLEVBQUU7S0FDZDtJQUNELFFBQVEsRUFBRTtRQUNOLElBQUksRUFBRSxLQUFLO1FBQ1gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxFQUFFO0tBQ2Q7SUFDRCxVQUFVLEVBQUU7UUFDUixJQUFJLEVBQUUsS0FBSztRQUNYLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoQixPQUFPLEVBQUUsRUFBRTtLQUNkO0lBQ0QsY0FBYyxFQUFFO1FBQ1osSUFBSSxFQUFFLEtBQUs7UUFDWCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDaEIsT0FBTyxFQUFFLEVBQUU7S0FDZDtJQUNELGNBQWMsRUFBRTtRQUNaLElBQUksRUFBRSxLQUFLO1FBQ1gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxFQUFFO0tBQ2Q7SUFDRCxHQUFHLGtEQUEyQjtDQUNqQyxFQUNEO0lBQ0ksV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDbkIsQ0FDSixDQUFDO0FBRVcsUUFBQSxrQkFBa0IsR0FBRyxtQkFBUyxDQUFDLEtBQUssQ0FDN0MseUJBQVcsQ0FBQyxjQUFjLEVBQzFCLG1CQUFtQixFQUNuQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUMxQyxDQUFDO0FBRUssTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEtBQStDLEVBQUUsRUFBRTtJQUMzRixPQUFPLElBQUksMEJBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRlcsUUFBQSwyQkFBMkIsK0JBRXRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGR5bmFtb29zZSBmcm9tIFwiZHluYW1vb3NlXCI7XG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHsgQkFTRV9EWU5BTU9PU0VfQVVESVRfU0NIRU1BLCBCYXNlRHluYW1vb3NlTW9kZWwgfSBmcm9tIFwiLi4vLi4vYmFzZS1keW5hbW9vc2UtbW9kZWxcIjtcbmltcG9ydCB7IFRBQkxFX05BTUVTIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy90YWJsZS1uYW1lc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzSGlzdG9yeVJlcGxhY2VJdGVtIHtcbiAgICBvcmlnaW5hbEl0ZW1JZDogc3RyaW5nO1xuICAgIHJlcGxhY2VJdGVtSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm93c2VIaXN0b3J5IGV4dGVuZHMgQmFzZUR5bmFtb29zZU1vZGVsIHtcbiAgICBicm93c2VIaXN0b3J5SWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICByZXN1bWVKb3VybmV5SWQ6IHN0cmluZztcbiAgICBwbGF0dGVySWQ6IHN0cmluZztcbiAgICBwbGF0dGVyTmFtZTogc3RyaW5nO1xuICAgIHBsYXR0ZXJUeXBlOiBzdHJpbmc7XG4gICAgcGxhdHRlclN1YlR5cGU/OiBzdHJpbmc7XG4gICAgcGxhdHRlclByaWNlOiBudW1iZXI7XG4gICAgdG90YWxJdGVtczogbnVtYmVyO1xuICAgIG1lbnVUeXBlOiBzdHJpbmc7XG4gICAgbWVhbFRpbWU6IHN0cmluZztcbiAgICBwbGF0dGVySW1hZ2U6IHN0cmluZztcbiAgICByZXBsYWNlSXRlbUlkczogQnJvd3NIaXN0b3J5UmVwbGFjZUl0ZW1bXTtcbiAgICBhZGRvbklkczogc3RyaW5nW107XG4gICAgY3V0bGVyeUlkczogc3RyaW5nW107XG4gICAgbGl2ZUNvdW50ZXJJZHM6IHN0cmluZ1tdO1xuICAgIHNrZXdlckFkZG9uSWRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlQnJvd3NlSGlzdG9yeUlucHV0ID0gT21pdDxCcm93c2VIaXN0b3J5LCBcImJyb3dzZUhpc3RvcnlJZFwiPiAmIHtcbiAgICBicm93c2VIaXN0b3J5SWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBicm93c2VIaXN0b3J5U2NoZW1hID0gbmV3IGR5bmFtb29zZS5TY2hlbWEoXG4gICAge1xuICAgICAgICBicm93c2VIaXN0b3J5SWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGhhc2hLZXk6IHRydWUsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IHJhbmRvbVVVSUQoKVxuICAgICAgICB9LFxuICAgICAgICB1c2VySWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInVzZXJJZEluZGV4XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZXN1bWVKb3VybmV5SWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXR0ZXJJZDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdHRlck5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHBsYXR0ZXJUeXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBwbGF0dGVyU3ViVHlwZTogU3RyaW5nLFxuICAgICAgICBwbGF0dGVyUHJpY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHRvdGFsSXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1lbnVUeXBlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtZWFsVGltZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcGxhdHRlckltYWdlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICByZXBsYWNlSXRlbUlkczoge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBzY2hlbWE6IFt7XG4gICAgICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEl0ZW1JZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUl0ZW1JZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgZGVmYXVsdDogW11cbiAgICAgICAgfSxcbiAgICAgICAgYWRkb25JZHM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgc2NoZW1hOiBbU3RyaW5nXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGN1dGxlcnlJZHM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgc2NoZW1hOiBbU3RyaW5nXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGxpdmVDb3VudGVySWRzOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIHNjaGVtYTogW1N0cmluZ10sXG4gICAgICAgICAgICBkZWZhdWx0OiBbXVxuICAgICAgICB9LFxuICAgICAgICBza2V3ZXJBZGRvbklkczoge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBzY2hlbWE6IFtTdHJpbmddLFxuICAgICAgICAgICAgZGVmYXVsdDogW11cbiAgICAgICAgfSxcbiAgICAgICAgLi4uQkFTRV9EWU5BTU9PU0VfQVVESVRfU0NIRU1BXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNhdmVVbmtub3duOiBmYWxzZSxcbiAgICAgICAgdGltZXN0YW1wczogdHJ1ZVxuICAgIH1cbik7XG5cbmV4cG9ydCBjb25zdCBCcm93c2VIaXN0b3J5TW9kZWwgPSBkeW5hbW9vc2UubW9kZWw8QnJvd3NlSGlzdG9yeT4oXG4gICAgVEFCTEVfTkFNRVMuQlJPV1NFX0hJU1RPUlksXG4gICAgYnJvd3NlSGlzdG9yeVNjaGVtYSxcbiAgICB7IGNyZWF0ZTogZmFsc2UsIHdhaXRGb3JBY3RpdmU6IGZhbHNlIH1cbik7XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9Ccm93c2VIaXN0b3J5TW9kZWwgPSAoaW5wdXQ6IENyZWF0ZUJyb3dzZUhpc3RvcnlJbnB1dCB8IEJyb3dzZUhpc3RvcnkpID0+IHtcbiAgICByZXR1cm4gbmV3IEJyb3dzZUhpc3RvcnlNb2RlbChpbnB1dCk7XG59O1xuIl19