whitelabel-db 1.1.97 → 1.1.99

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.
@@ -36,6 +36,7 @@ const Creator_1 = require("../models/Creator");
36
36
  const Collection_1 = require("../models/Collection");
37
37
  const CollectionItem_1 = require("../models/CollectionItem");
38
38
  const CollectionItemCustomField_1 = require("../models/CollectionItemCustomField");
39
+ const migration_1 = require("./migration");
39
40
  const connect = (connectionDetails) => __awaiter(void 0, void 0, void 0, function* () {
40
41
  const connection = new sequelize_typescript_1.Sequelize({
41
42
  dialect: 'postgres',
@@ -75,6 +76,13 @@ const connect = (connectionDetails) => __awaiter(void 0, void 0, void 0, functio
75
76
  try {
76
77
  yield connection.authenticate();
77
78
  console.log('Database connection has been established successfully.');
79
+ try {
80
+ console.log('Running migrations');
81
+ yield (0, migration_1.runMigrations)(connection);
82
+ }
83
+ catch (migrationError) {
84
+ console.error('Error running migrations:', migrationError);
85
+ }
78
86
  // Only create tables that don't exist, don't alter existing schema
79
87
  // This prevents conflicts with migrations
80
88
  yield connection.sync({ force: false, alter: false });
@@ -0,0 +1,3 @@
1
+ import { QueryInterface } from 'sequelize';
2
+ export declare const up: (queryInterface: QueryInterface) => Promise<void>;
3
+ export declare const down: (queryInterface: QueryInterface) => Promise<void>;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.down = exports.up = void 0;
13
+ // Purpose: Add unique index on (slug, projectId) for collections table
14
+ const sequelize_1 = require("sequelize");
15
+ const up = (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
16
+ try {
17
+ console.log('Adding slug column to collections table');
18
+ // Step 1: Add slug column with a default value
19
+ yield queryInterface.addColumn('collections', 'slug', {
20
+ type: sequelize_1.DataTypes.TEXT,
21
+ allowNull: false,
22
+ defaultValue: 'default-slug', // Temporary default to avoid null constraint
23
+ });
24
+ console.log('Slug column added to collections table');
25
+ // Step 2: Update existing records with generated slugs based on their titles
26
+ console.log('Updating existing collections with generated slugs...');
27
+ // Get all existing collections
28
+ const collections = (yield queryInterface.sequelize.query('SELECT id, title, "projectId" FROM collections WHERE slug = :defaultSlug', {
29
+ replacements: { defaultSlug: 'default-slug' },
30
+ type: sequelize_1.QueryTypes.SELECT,
31
+ }));
32
+ // Update each collection with a proper slug
33
+ for (const collection of collections) {
34
+ const slug = generateSlugFromTitle(collection.title);
35
+ let uniqueSlug = slug;
36
+ let counter = 1;
37
+ // Check if slug already exists in the same project
38
+ while (true) {
39
+ const existing = (yield queryInterface.sequelize.query('SELECT id FROM collections WHERE slug = :slug AND "projectId" = :projectId AND id != :currentId', {
40
+ replacements: {
41
+ slug: uniqueSlug,
42
+ projectId: collection.projectId,
43
+ currentId: collection.id,
44
+ },
45
+ type: sequelize_1.QueryTypes.SELECT,
46
+ }));
47
+ if (existing.length === 0) {
48
+ break; // Slug is unique
49
+ }
50
+ // Try with counter suffix
51
+ uniqueSlug = `${slug}-${counter}`;
52
+ counter++;
53
+ }
54
+ // Update the collection with the unique slug
55
+ yield queryInterface.sequelize.query('UPDATE collections SET slug = :slug WHERE id = :id', {
56
+ replacements: { slug: uniqueSlug, id: collection.id },
57
+ type: sequelize_1.QueryTypes.UPDATE,
58
+ });
59
+ }
60
+ console.log('Existing collections updated with generated slugs');
61
+ // Step 3: Remove the default value constraint
62
+ console.log('Removing default value constraint from slug column');
63
+ yield queryInterface.changeColumn('collections', 'slug', {
64
+ type: sequelize_1.DataTypes.TEXT,
65
+ allowNull: false,
66
+ // Remove defaultValue
67
+ });
68
+ console.log('Default value constraint removed');
69
+ // Step 4: Add unique index on (slug, projectId)
70
+ console.log('Adding unique index on (slug, projectId)');
71
+ yield queryInterface.addIndex('collections', ['slug', 'projectId'], {
72
+ unique: true,
73
+ name: 'collections_slug_projectId_unique',
74
+ });
75
+ console.log('Unique index on (slug, projectId) added to collections table successfully.');
76
+ }
77
+ catch (error) {
78
+ console.error('Error while adding unique index:', error.message);
79
+ throw error;
80
+ }
81
+ });
82
+ exports.up = up;
83
+ const down = (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
84
+ try {
85
+ // Remove the unique index
86
+ yield queryInterface.removeIndex('collections', 'collections_slug_projectId_unique');
87
+ console.log('Unique index on (slug, projectId) removed from collections table successfully.');
88
+ // Remove the slug column
89
+ yield queryInterface.removeColumn('collections', 'slug');
90
+ console.log('Slug column removed from collections table successfully.');
91
+ }
92
+ catch (error) {
93
+ console.error('Error while removing unique index:', error.message);
94
+ throw error;
95
+ }
96
+ });
97
+ exports.down = down;
98
+ // Helper function to generate slug from title (same logic as in the model)
99
+ function generateSlugFromTitle(title) {
100
+ return title
101
+ .toLowerCase()
102
+ .trim()
103
+ .replace(/[^\w\s-]/g, '') // Remove special characters except hyphens
104
+ .replace(/\s+/g, '-') // Replace spaces with hyphens
105
+ .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen
106
+ .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens
107
+ }
@@ -0,0 +1,3 @@
1
+ import { QueryInterface } from 'sequelize';
2
+ export declare const up: (queryInterface: QueryInterface) => Promise<void>;
3
+ export declare const down: (queryInterface: QueryInterface) => Promise<void>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.down = exports.up = void 0;
13
+ // Purpose: Add bio and social media columns to creators table
14
+ const sequelize_1 = require("sequelize");
15
+ const up = (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
16
+ try {
17
+ console.log('Adding bio and socialMediaLinks columns to creators table');
18
+ // Add bio column
19
+ yield queryInterface.addColumn('creators', 'bio', {
20
+ type: sequelize_1.DataTypes.TEXT,
21
+ allowNull: true,
22
+ });
23
+ console.log('bio column added successfully');
24
+ // Add socialMediaLinks column as JSONB
25
+ yield queryInterface.addColumn('creators', 'socialMediaLinks', {
26
+ type: sequelize_1.DataTypes.JSONB,
27
+ allowNull: true,
28
+ });
29
+ console.log('socialMediaLinks column added successfully');
30
+ console.log('Bio and social media columns added to creators table successfully');
31
+ }
32
+ catch (error) {
33
+ console.error('Error while adding bio and social media columns:', error.message);
34
+ throw error;
35
+ }
36
+ });
37
+ exports.up = up;
38
+ const down = (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
39
+ try {
40
+ console.log('Removing bio and socialMediaLinks columns from creators table');
41
+ // Remove socialMediaLinks column
42
+ yield queryInterface.removeColumn('creators', 'socialMediaLinks');
43
+ console.log('socialMediaLinks column removed successfully');
44
+ // Remove bio column
45
+ yield queryInterface.removeColumn('creators', 'bio');
46
+ console.log('bio column removed successfully');
47
+ console.log('Bio and social media columns removed from creators table successfully');
48
+ }
49
+ catch (error) {
50
+ console.error('Error while removing bio and social media columns:', error.message);
51
+ throw error;
52
+ }
53
+ });
54
+ exports.down = down;
@@ -16,4 +16,14 @@ export declare class Collection extends Model<Partial<Collection>> {
16
16
  items?: CollectionItem[];
17
17
  createdAt: Date;
18
18
  updatedAt: Date;
19
+ slug: string;
20
+ static ensureSlug(instance: Collection): Promise<void>;
21
+ static ensureSlugOnCreate(instance: Collection): Promise<void>;
22
+ static generateUniqueSlug(title: string, projectId: string, excludeId?: string): Promise<string>;
23
+ private static createSlugFromTitle;
24
+ ensureSlug(): Promise<void>;
25
+ regenerateSlug(): Promise<void>;
26
+ static createWithSlug(data: Partial<Collection>): Promise<Collection>;
27
+ static updateWithSlug(instance: Collection, data: Partial<Collection>): Promise<Collection>;
28
+ static updateAndRegenerateSlug(instance: Collection, data: Partial<Collection>): Promise<Collection>;
19
29
  }
@@ -8,8 +8,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ var Collection_1;
11
21
  Object.defineProperty(exports, "__esModule", { value: true });
12
22
  exports.Collection = exports.CollectionStatus = void 0;
23
+ const sequelize_1 = require("sequelize");
13
24
  const sequelize_typescript_1 = require("sequelize-typescript");
14
25
  const Project_1 = require("./Project");
15
26
  const CollectionItem_1 = require("./CollectionItem");
@@ -20,7 +31,112 @@ var CollectionStatus;
20
31
  CollectionStatus["ARCHIVED"] = "archived";
21
32
  CollectionStatus["DELETED"] = "deleted";
22
33
  })(CollectionStatus || (exports.CollectionStatus = CollectionStatus = {}));
23
- let Collection = class Collection extends sequelize_typescript_1.Model {
34
+ let Collection = Collection_1 = class Collection extends sequelize_typescript_1.Model {
35
+ // More reliable approach: generate slug before validation (only for create)
36
+ static ensureSlug(instance) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ if (instance.title && !instance.slug) {
39
+ // Only generate slug if it doesn't exist (create case)
40
+ instance.slug = yield Collection_1.generateUniqueSlug(instance.title, instance.projectId);
41
+ }
42
+ });
43
+ }
44
+ // Fallback hook for create operations only
45
+ static ensureSlugOnCreate(instance) {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ if (instance.title && !instance.slug) {
48
+ instance.slug = yield Collection_1.generateUniqueSlug(instance.title, instance.projectId);
49
+ }
50
+ });
51
+ }
52
+ // Remove update hooks - no automatic slug regeneration on update
53
+ // Static method to generate unique slug
54
+ static generateUniqueSlug(title, projectId, excludeId) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const baseSlug = Collection_1.createSlugFromTitle(title);
57
+ let slug = baseSlug;
58
+ let counter = 1;
59
+ // Keep trying until we find a unique slug
60
+ while (true) {
61
+ const whereClause = {
62
+ slug,
63
+ projectId,
64
+ };
65
+ // Exclude current record when updating
66
+ if (excludeId) {
67
+ whereClause.id = { [sequelize_1.Op.ne]: excludeId };
68
+ }
69
+ const existing = yield Collection_1.findOne({ where: whereClause });
70
+ if (!existing) {
71
+ break; // Slug is unique
72
+ }
73
+ // Try with counter suffix
74
+ slug = `${baseSlug}-${counter}`;
75
+ counter++;
76
+ }
77
+ return slug;
78
+ });
79
+ }
80
+ // Helper method to create slug from title
81
+ static createSlugFromTitle(title) {
82
+ return title
83
+ .toLowerCase()
84
+ .trim()
85
+ .replace(/[^\w\s-]/g, '') // Remove special characters except hyphens
86
+ .replace(/\s+/g, '-') // Replace spaces with hyphens
87
+ .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen
88
+ .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens
89
+ }
90
+ // Instance method to ensure slug is set (call this explicitly if needed)
91
+ ensureSlug() {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ if (this.title && !this.slug) {
94
+ this.slug = yield Collection_1.generateUniqueSlug(this.title, this.projectId, this.id);
95
+ }
96
+ });
97
+ }
98
+ // Method to manually regenerate slug
99
+ regenerateSlug() {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ if (this.title) {
102
+ this.slug = yield Collection_1.generateUniqueSlug(this.title, this.projectId, this.id);
103
+ yield this.save();
104
+ }
105
+ });
106
+ }
107
+ // Static create method that ensures slug generation
108
+ static createWithSlug(data) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ if (!data.title) {
111
+ throw new Error('Title is required to create a collection');
112
+ }
113
+ if (!data.projectId) {
114
+ throw new Error('ProjectId is required to create a collection');
115
+ }
116
+ // Generate slug before creation
117
+ data.slug = yield Collection_1.generateUniqueSlug(data.title, data.projectId);
118
+ return yield Collection_1.create(data);
119
+ });
120
+ }
121
+ // Static update method (no automatic slug regeneration)
122
+ static updateWithSlug(instance, data) {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ // No automatic slug regeneration - slugs remain unchanged
125
+ return yield instance.update(data);
126
+ });
127
+ }
128
+ // Method to manually regenerate slug if needed
129
+ static updateAndRegenerateSlug(instance, data) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ // Only regenerate slug if explicitly requested
132
+ if (data.title && data.regenerateSlug) {
133
+ data.slug = yield Collection_1.generateUniqueSlug(data.title, instance.projectId, instance.id);
134
+ // Remove the flag from data before update
135
+ delete data.regenerateSlug;
136
+ }
137
+ return yield instance.update(data);
138
+ });
139
+ }
24
140
  };
25
141
  exports.Collection = Collection;
26
142
  __decorate([
@@ -83,8 +199,35 @@ __decorate([
83
199
  }),
84
200
  __metadata("design:type", Date)
85
201
  ], Collection.prototype, "updatedAt", void 0);
86
- exports.Collection = Collection = __decorate([
202
+ __decorate([
203
+ sequelize_typescript_1.Index,
204
+ (0, sequelize_typescript_1.Column)({
205
+ type: sequelize_typescript_1.DataType.TEXT,
206
+ allowNull: false,
207
+ }),
208
+ __metadata("design:type", String)
209
+ ], Collection.prototype, "slug", void 0);
210
+ __decorate([
211
+ sequelize_typescript_1.BeforeValidate,
212
+ __metadata("design:type", Function),
213
+ __metadata("design:paramtypes", [Collection]),
214
+ __metadata("design:returntype", Promise)
215
+ ], Collection, "ensureSlug", null);
216
+ __decorate([
217
+ sequelize_typescript_1.BeforeCreate,
218
+ __metadata("design:type", Function),
219
+ __metadata("design:paramtypes", [Collection]),
220
+ __metadata("design:returntype", Promise)
221
+ ], Collection, "ensureSlugOnCreate", null);
222
+ exports.Collection = Collection = Collection_1 = __decorate([
87
223
  (0, sequelize_typescript_1.Table)({
88
224
  tableName: 'collections',
225
+ indexes: [
226
+ {
227
+ unique: true,
228
+ fields: ['slug', 'projectId'],
229
+ name: 'collections_slug_projectId_unique',
230
+ },
231
+ ],
89
232
  })
90
233
  ], Collection);
@@ -7,6 +7,8 @@ export declare class Creator extends Model<Partial<Creator>> {
7
7
  name: string;
8
8
  profileImage?: string;
9
9
  coverImage?: string;
10
+ bio?: string;
11
+ socialMediaLinks?: Record<string, string>;
10
12
  createdAt: Date;
11
13
  updatedAt: Date;
12
14
  }
@@ -59,6 +59,20 @@ __decorate([
59
59
  }),
60
60
  __metadata("design:type", String)
61
61
  ], Creator.prototype, "coverImage", void 0);
62
+ __decorate([
63
+ (0, sequelize_typescript_1.Column)({
64
+ type: sequelize_typescript_1.DataType.TEXT,
65
+ allowNull: true,
66
+ }),
67
+ __metadata("design:type", String)
68
+ ], Creator.prototype, "bio", void 0);
69
+ __decorate([
70
+ (0, sequelize_typescript_1.Column)({
71
+ type: sequelize_typescript_1.DataType.JSONB,
72
+ allowNull: true,
73
+ }),
74
+ __metadata("design:type", Object)
75
+ ], Creator.prototype, "socialMediaLinks", void 0);
62
76
  __decorate([
63
77
  (0, sequelize_typescript_1.Column)({
64
78
  type: sequelize_typescript_1.DataType.DATE,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whitelabel-db",
3
- "version": "1.1.97",
3
+ "version": "1.1.99",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,6 +0,0 @@
1
- import { QueryInterface } from 'sequelize';
2
- declare const _default: {
3
- up: (queryInterface: QueryInterface) => Promise<void>;
4
- down: (queryInterface: QueryInterface) => Promise<void>;
5
- };
6
- export = _default;
@@ -1,188 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- const sequelize_1 = require("sequelize");
12
- module.exports = {
13
- up: (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
14
- // Create guest_profiles table
15
- yield queryInterface.createTable('guest_profiles', {
16
- guest_id: {
17
- type: sequelize_1.DataTypes.UUID,
18
- allowNull: false,
19
- primaryKey: true,
20
- defaultValue: sequelize_1.DataTypes.UUIDV4,
21
- },
22
- frequent_destinations: {
23
- type: sequelize_1.DataTypes.JSONB,
24
- allowNull: true,
25
- },
26
- avg_budget_range: {
27
- type: sequelize_1.DataTypes.JSONB,
28
- allowNull: true,
29
- },
30
- preferred_filters: {
31
- type: sequelize_1.DataTypes.JSONB,
32
- allowNull: true,
33
- },
34
- family_traveler: {
35
- type: sequelize_1.DataTypes.BOOLEAN,
36
- allowNull: true,
37
- },
38
- avg_stay_duration: {
39
- type: sequelize_1.DataTypes.INTEGER,
40
- allowNull: true,
41
- },
42
- created_at: {
43
- type: sequelize_1.DataTypes.DATE,
44
- allowNull: false,
45
- defaultValue: sequelize_1.DataTypes.NOW,
46
- },
47
- updated_at: {
48
- type: sequelize_1.DataTypes.DATE,
49
- allowNull: false,
50
- defaultValue: sequelize_1.DataTypes.NOW,
51
- },
52
- });
53
- // Create guest_search_history table
54
- yield queryInterface.createTable('guest_search_history', {
55
- search_id: {
56
- type: sequelize_1.DataTypes.UUID,
57
- allowNull: false,
58
- primaryKey: true,
59
- defaultValue: sequelize_1.DataTypes.UUIDV4,
60
- },
61
- guest_id: {
62
- type: sequelize_1.DataTypes.UUID,
63
- allowNull: true,
64
- references: {
65
- model: 'guests',
66
- key: 'id',
67
- },
68
- onUpdate: 'CASCADE',
69
- onDelete: 'SET NULL',
70
- },
71
- destination: {
72
- type: sequelize_1.DataTypes.STRING,
73
- allowNull: false,
74
- },
75
- checkin_date: {
76
- type: sequelize_1.DataTypes.DATEONLY,
77
- allowNull: false,
78
- },
79
- checkout_date: {
80
- type: sequelize_1.DataTypes.DATEONLY,
81
- allowNull: false,
82
- },
83
- guests: {
84
- type: sequelize_1.DataTypes.SMALLINT,
85
- allowNull: false,
86
- defaultValue: 1,
87
- },
88
- rooms: {
89
- type: sequelize_1.DataTypes.SMALLINT,
90
- allowNull: false,
91
- defaultValue: 1,
92
- },
93
- budget_range: {
94
- type: sequelize_1.DataTypes.JSONB,
95
- allowNull: true,
96
- },
97
- filters: {
98
- type: sequelize_1.DataTypes.JSONB,
99
- allowNull: true,
100
- },
101
- search_timestamp: {
102
- type: sequelize_1.DataTypes.DATE,
103
- allowNull: false,
104
- defaultValue: sequelize_1.DataTypes.NOW,
105
- },
106
- search_context: {
107
- type: sequelize_1.DataTypes.STRING,
108
- allowNull: false,
109
- defaultValue: 'exploration',
110
- },
111
- device_type: {
112
- type: sequelize_1.DataTypes.STRING,
113
- allowNull: false,
114
- defaultValue: 'unknown',
115
- },
116
- travel_purpose: {
117
- type: sequelize_1.DataTypes.STRING,
118
- allowNull: false,
119
- defaultValue: 'unspecified',
120
- },
121
- selected_hotel_ids: {
122
- type: sequelize_1.DataTypes.ARRAY(sequelize_1.DataTypes.STRING),
123
- allowNull: true,
124
- },
125
- place_id: {
126
- type: sequelize_1.DataTypes.STRING,
127
- allowNull: true,
128
- },
129
- });
130
- // Create recommendations_cache table
131
- yield queryInterface.createTable('recommendations_cache', {
132
- cache_id: {
133
- type: sequelize_1.DataTypes.UUID,
134
- allowNull: false,
135
- primaryKey: true,
136
- defaultValue: sequelize_1.DataTypes.UUIDV4,
137
- },
138
- guest_id: {
139
- type: sequelize_1.DataTypes.UUID,
140
- allowNull: true,
141
- references: {
142
- model: 'guests',
143
- key: 'id',
144
- },
145
- onUpdate: 'CASCADE',
146
- onDelete: 'SET NULL',
147
- },
148
- hotels: {
149
- type: sequelize_1.DataTypes.ARRAY(sequelize_1.DataTypes.STRING),
150
- allowNull: false,
151
- },
152
- check_in: {
153
- type: sequelize_1.DataTypes.DATEONLY,
154
- allowNull: false,
155
- },
156
- check_out: {
157
- type: sequelize_1.DataTypes.DATEONLY,
158
- allowNull: false,
159
- },
160
- cached_at: {
161
- type: sequelize_1.DataTypes.DATE,
162
- allowNull: false,
163
- defaultValue: sequelize_1.DataTypes.NOW,
164
- },
165
- expiry: {
166
- type: sequelize_1.DataTypes.DATE,
167
- allowNull: false,
168
- },
169
- search_params: {
170
- type: sequelize_1.DataTypes.JSONB,
171
- allowNull: true,
172
- },
173
- created_at: {
174
- type: sequelize_1.DataTypes.DATE,
175
- allowNull: false,
176
- defaultValue: sequelize_1.DataTypes.NOW,
177
- },
178
- });
179
- // We won't add separate indexes since the foreign keys and primary keys are already indexed
180
- // Also, Sequelize automatically creates indexes for foreign key references
181
- }),
182
- down: (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
183
- // Drop tables in reverse order to avoid foreign key constraints
184
- yield queryInterface.dropTable('recommendations_cache');
185
- yield queryInterface.dropTable('guest_search_history');
186
- yield queryInterface.dropTable('guest_profiles');
187
- }),
188
- };
@@ -1,6 +0,0 @@
1
- import { QueryInterface } from 'sequelize';
2
- declare const _default: {
3
- up: (queryInterface: QueryInterface) => Promise<void>;
4
- down: (queryInterface: QueryInterface) => Promise<void>;
5
- };
6
- export default _default;
@@ -1,50 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const sequelize_1 = require("sequelize");
13
- exports.default = {
14
- up: (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
15
- yield queryInterface.createTable('guest_favorite_hotels', {
16
- guest_id: {
17
- type: sequelize_1.DataTypes.UUID,
18
- allowNull: false,
19
- primaryKey: true,
20
- references: {
21
- model: 'guests',
22
- key: 'id',
23
- },
24
- onDelete: 'CASCADE',
25
- onUpdate: 'CASCADE',
26
- },
27
- hotel_id: {
28
- type: sequelize_1.DataTypes.STRING,
29
- allowNull: false,
30
- primaryKey: true,
31
- },
32
- created_at: {
33
- type: sequelize_1.DataTypes.DATE,
34
- allowNull: false,
35
- defaultValue: sequelize_1.DataTypes.NOW,
36
- },
37
- updated_at: {
38
- type: sequelize_1.DataTypes.DATE,
39
- allowNull: false,
40
- defaultValue: sequelize_1.DataTypes.NOW,
41
- },
42
- });
43
- // Add indexes
44
- yield queryInterface.addIndex('guest_favorite_hotels', ['guest_id']);
45
- yield queryInterface.addIndex('guest_favorite_hotels', ['hotel_id']);
46
- }),
47
- down: (queryInterface) => __awaiter(void 0, void 0, void 0, function* () {
48
- yield queryInterface.dropTable('guest_favorite_hotels');
49
- }),
50
- };
@@ -1,9 +0,0 @@
1
- import { Model } from 'sequelize-typescript';
2
- import { Guest } from './Guest';
3
- export declare class GuestFavoriteHotel extends Model<Partial<GuestFavoriteHotel>> {
4
- guest_id: string;
5
- hotel_id: string;
6
- created_at: Date;
7
- updated_at: Date;
8
- guest: Guest;
9
- }
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.GuestFavoriteHotel = void 0;
13
- const sequelize_typescript_1 = require("sequelize-typescript");
14
- const Guest_1 = require("./Guest");
15
- let GuestFavoriteHotel = class GuestFavoriteHotel extends sequelize_typescript_1.Model {
16
- };
17
- exports.GuestFavoriteHotel = GuestFavoriteHotel;
18
- __decorate([
19
- sequelize_typescript_1.PrimaryKey,
20
- sequelize_typescript_1.Index,
21
- (0, sequelize_typescript_1.ForeignKey)(() => Guest_1.Guest),
22
- (0, sequelize_typescript_1.Column)({
23
- type: sequelize_typescript_1.DataType.UUID,
24
- allowNull: false,
25
- }),
26
- __metadata("design:type", String)
27
- ], GuestFavoriteHotel.prototype, "guest_id", void 0);
28
- __decorate([
29
- sequelize_typescript_1.PrimaryKey,
30
- (0, sequelize_typescript_1.Column)({
31
- type: sequelize_typescript_1.DataType.STRING,
32
- allowNull: false,
33
- }),
34
- __metadata("design:type", String)
35
- ], GuestFavoriteHotel.prototype, "hotel_id", void 0);
36
- __decorate([
37
- (0, sequelize_typescript_1.Column)({
38
- type: sequelize_typescript_1.DataType.DATE,
39
- allowNull: false,
40
- defaultValue: sequelize_typescript_1.DataType.NOW
41
- }),
42
- __metadata("design:type", Date)
43
- ], GuestFavoriteHotel.prototype, "created_at", void 0);
44
- __decorate([
45
- (0, sequelize_typescript_1.Column)({
46
- type: sequelize_typescript_1.DataType.DATE,
47
- allowNull: false,
48
- defaultValue: sequelize_typescript_1.DataType.NOW
49
- }),
50
- __metadata("design:type", Date)
51
- ], GuestFavoriteHotel.prototype, "updated_at", void 0);
52
- __decorate([
53
- (0, sequelize_typescript_1.BelongsTo)(() => Guest_1.Guest, { foreignKey: 'guest_id' }),
54
- __metadata("design:type", Guest_1.Guest)
55
- ], GuestFavoriteHotel.prototype, "guest", void 0);
56
- exports.GuestFavoriteHotel = GuestFavoriteHotel = __decorate([
57
- (0, sequelize_typescript_1.Table)({
58
- tableName: 'guest_favorite_hotels',
59
- timestamps: true,
60
- createdAt: 'created_at',
61
- updatedAt: 'updated_at'
62
- })
63
- ], GuestFavoriteHotel);
@@ -1,13 +0,0 @@
1
- import { Model } from 'sequelize-typescript';
2
- import { Guest } from './Guest';
3
- export declare class GuestProfile extends Model<Partial<GuestProfile>> {
4
- guest_id: string;
5
- frequent_destinations: any;
6
- avg_budget_range: any;
7
- preferred_filters: any;
8
- family_traveler: boolean;
9
- avg_stay_duration: number;
10
- created_at: Date;
11
- updated_at: Date;
12
- guest: Guest;
13
- }
@@ -1,90 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.GuestProfile = void 0;
13
- const sequelize_typescript_1 = require("sequelize-typescript");
14
- const Guest_1 = require("./Guest");
15
- let GuestProfile = class GuestProfile extends sequelize_typescript_1.Model {
16
- };
17
- exports.GuestProfile = GuestProfile;
18
- __decorate([
19
- sequelize_typescript_1.Index,
20
- sequelize_typescript_1.PrimaryKey,
21
- (0, sequelize_typescript_1.Column)({
22
- type: sequelize_typescript_1.DataType.UUID,
23
- allowNull: false,
24
- defaultValue: sequelize_typescript_1.DataType.UUIDV4,
25
- }),
26
- __metadata("design:type", String)
27
- ], GuestProfile.prototype, "guest_id", void 0);
28
- __decorate([
29
- (0, sequelize_typescript_1.Column)({
30
- type: sequelize_typescript_1.DataType.JSONB,
31
- allowNull: true,
32
- }),
33
- __metadata("design:type", Object)
34
- ], GuestProfile.prototype, "frequent_destinations", void 0);
35
- __decorate([
36
- (0, sequelize_typescript_1.Column)({
37
- type: sequelize_typescript_1.DataType.JSONB,
38
- allowNull: true,
39
- }),
40
- __metadata("design:type", Object)
41
- ], GuestProfile.prototype, "avg_budget_range", void 0);
42
- __decorate([
43
- (0, sequelize_typescript_1.Column)({
44
- type: sequelize_typescript_1.DataType.JSONB,
45
- allowNull: true,
46
- }),
47
- __metadata("design:type", Object)
48
- ], GuestProfile.prototype, "preferred_filters", void 0);
49
- __decorate([
50
- (0, sequelize_typescript_1.Column)({
51
- type: sequelize_typescript_1.DataType.BOOLEAN,
52
- allowNull: true,
53
- }),
54
- __metadata("design:type", Boolean)
55
- ], GuestProfile.prototype, "family_traveler", void 0);
56
- __decorate([
57
- (0, sequelize_typescript_1.Column)({
58
- type: sequelize_typescript_1.DataType.INTEGER,
59
- allowNull: true,
60
- }),
61
- __metadata("design:type", Number)
62
- ], GuestProfile.prototype, "avg_stay_duration", void 0);
63
- __decorate([
64
- (0, sequelize_typescript_1.Column)({
65
- type: sequelize_typescript_1.DataType.DATE,
66
- allowNull: false,
67
- defaultValue: sequelize_typescript_1.DataType.NOW,
68
- }),
69
- __metadata("design:type", Date)
70
- ], GuestProfile.prototype, "created_at", void 0);
71
- __decorate([
72
- (0, sequelize_typescript_1.Column)({
73
- type: sequelize_typescript_1.DataType.DATE,
74
- allowNull: false,
75
- defaultValue: sequelize_typescript_1.DataType.NOW,
76
- }),
77
- __metadata("design:type", Date)
78
- ], GuestProfile.prototype, "updated_at", void 0);
79
- __decorate([
80
- (0, sequelize_typescript_1.BelongsTo)(() => Guest_1.Guest, { foreignKey: 'guest_id' }),
81
- __metadata("design:type", Guest_1.Guest)
82
- ], GuestProfile.prototype, "guest", void 0);
83
- exports.GuestProfile = GuestProfile = __decorate([
84
- (0, sequelize_typescript_1.Table)({
85
- tableName: 'guest_profiles',
86
- timestamps: true,
87
- createdAt: 'created_at',
88
- updatedAt: 'updated_at',
89
- })
90
- ], GuestProfile);
@@ -1,20 +0,0 @@
1
- import { Model } from 'sequelize-typescript';
2
- import { Guest } from './Guest';
3
- export declare class GuestSearchHistory extends Model<Partial<GuestSearchHistory>> {
4
- search_id: string;
5
- guest_id: string;
6
- destination: string;
7
- checkin_date: Date;
8
- checkout_date: Date;
9
- guests: number;
10
- rooms: number;
11
- budget_range: any;
12
- filters: any;
13
- search_timestamp: Date;
14
- search_context: string;
15
- device_type: string;
16
- travel_purpose: string;
17
- selected_hotel_ids: string[];
18
- place_id: string;
19
- guest: Guest;
20
- }
@@ -1,143 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.GuestSearchHistory = void 0;
13
- const sequelize_typescript_1 = require("sequelize-typescript");
14
- const Guest_1 = require("./Guest");
15
- let GuestSearchHistory = class GuestSearchHistory extends sequelize_typescript_1.Model {
16
- };
17
- exports.GuestSearchHistory = GuestSearchHistory;
18
- __decorate([
19
- sequelize_typescript_1.Index,
20
- sequelize_typescript_1.PrimaryKey,
21
- (0, sequelize_typescript_1.Column)({
22
- type: sequelize_typescript_1.DataType.UUID,
23
- allowNull: false,
24
- defaultValue: sequelize_typescript_1.DataType.UUIDV4,
25
- }),
26
- __metadata("design:type", String)
27
- ], GuestSearchHistory.prototype, "search_id", void 0);
28
- __decorate([
29
- sequelize_typescript_1.Index,
30
- (0, sequelize_typescript_1.ForeignKey)(() => Guest_1.Guest),
31
- (0, sequelize_typescript_1.Column)({
32
- type: sequelize_typescript_1.DataType.UUID,
33
- allowNull: true,
34
- }),
35
- __metadata("design:type", String)
36
- ], GuestSearchHistory.prototype, "guest_id", void 0);
37
- __decorate([
38
- (0, sequelize_typescript_1.Column)({
39
- type: sequelize_typescript_1.DataType.STRING,
40
- allowNull: false,
41
- }),
42
- __metadata("design:type", String)
43
- ], GuestSearchHistory.prototype, "destination", void 0);
44
- __decorate([
45
- (0, sequelize_typescript_1.Column)({
46
- type: sequelize_typescript_1.DataType.DATEONLY,
47
- allowNull: false,
48
- }),
49
- __metadata("design:type", Date)
50
- ], GuestSearchHistory.prototype, "checkin_date", void 0);
51
- __decorate([
52
- (0, sequelize_typescript_1.Column)({
53
- type: sequelize_typescript_1.DataType.DATEONLY,
54
- allowNull: false,
55
- }),
56
- __metadata("design:type", Date)
57
- ], GuestSearchHistory.prototype, "checkout_date", void 0);
58
- __decorate([
59
- (0, sequelize_typescript_1.Column)({
60
- type: sequelize_typescript_1.DataType.SMALLINT,
61
- allowNull: false,
62
- defaultValue: 1,
63
- }),
64
- __metadata("design:type", Number)
65
- ], GuestSearchHistory.prototype, "guests", void 0);
66
- __decorate([
67
- (0, sequelize_typescript_1.Column)({
68
- type: sequelize_typescript_1.DataType.SMALLINT,
69
- allowNull: false,
70
- defaultValue: 1,
71
- }),
72
- __metadata("design:type", Number)
73
- ], GuestSearchHistory.prototype, "rooms", void 0);
74
- __decorate([
75
- (0, sequelize_typescript_1.Column)({
76
- type: sequelize_typescript_1.DataType.JSONB,
77
- allowNull: true,
78
- }),
79
- __metadata("design:type", Object)
80
- ], GuestSearchHistory.prototype, "budget_range", void 0);
81
- __decorate([
82
- (0, sequelize_typescript_1.Column)({
83
- type: sequelize_typescript_1.DataType.JSONB,
84
- allowNull: true,
85
- }),
86
- __metadata("design:type", Object)
87
- ], GuestSearchHistory.prototype, "filters", void 0);
88
- __decorate([
89
- (0, sequelize_typescript_1.Column)({
90
- type: sequelize_typescript_1.DataType.DATE,
91
- allowNull: false,
92
- defaultValue: sequelize_typescript_1.DataType.NOW,
93
- }),
94
- __metadata("design:type", Date)
95
- ], GuestSearchHistory.prototype, "search_timestamp", void 0);
96
- __decorate([
97
- (0, sequelize_typescript_1.Column)({
98
- type: sequelize_typescript_1.DataType.STRING,
99
- allowNull: false,
100
- defaultValue: 'exploration',
101
- }),
102
- __metadata("design:type", String)
103
- ], GuestSearchHistory.prototype, "search_context", void 0);
104
- __decorate([
105
- (0, sequelize_typescript_1.Column)({
106
- type: sequelize_typescript_1.DataType.STRING,
107
- allowNull: false,
108
- defaultValue: 'unknown',
109
- }),
110
- __metadata("design:type", String)
111
- ], GuestSearchHistory.prototype, "device_type", void 0);
112
- __decorate([
113
- (0, sequelize_typescript_1.Column)({
114
- type: sequelize_typescript_1.DataType.STRING,
115
- allowNull: false,
116
- defaultValue: 'unspecified',
117
- }),
118
- __metadata("design:type", String)
119
- ], GuestSearchHistory.prototype, "travel_purpose", void 0);
120
- __decorate([
121
- (0, sequelize_typescript_1.Column)({
122
- type: sequelize_typescript_1.DataType.ARRAY(sequelize_typescript_1.DataType.STRING),
123
- allowNull: true,
124
- }),
125
- __metadata("design:type", Array)
126
- ], GuestSearchHistory.prototype, "selected_hotel_ids", void 0);
127
- __decorate([
128
- (0, sequelize_typescript_1.Column)({
129
- type: sequelize_typescript_1.DataType.STRING,
130
- allowNull: true,
131
- }),
132
- __metadata("design:type", String)
133
- ], GuestSearchHistory.prototype, "place_id", void 0);
134
- __decorate([
135
- (0, sequelize_typescript_1.BelongsTo)(() => Guest_1.Guest, { foreignKey: 'guest_id' }),
136
- __metadata("design:type", Guest_1.Guest)
137
- ], GuestSearchHistory.prototype, "guest", void 0);
138
- exports.GuestSearchHistory = GuestSearchHistory = __decorate([
139
- (0, sequelize_typescript_1.Table)({
140
- tableName: 'guest_search_history',
141
- timestamps: false
142
- })
143
- ], GuestSearchHistory);
@@ -1,14 +0,0 @@
1
- import { Model } from 'sequelize-typescript';
2
- import { Guest } from './Guest';
3
- export declare class RecommendationsCache extends Model<Partial<RecommendationsCache>> {
4
- cache_id: string;
5
- guest_id: string;
6
- hotels: string[];
7
- check_in: Date;
8
- check_out: Date;
9
- cached_at: Date;
10
- expiry: Date;
11
- search_params: any;
12
- created_at: Date;
13
- guest: Guest;
14
- }
@@ -1,99 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RecommendationsCache = void 0;
13
- const sequelize_typescript_1 = require("sequelize-typescript");
14
- const Guest_1 = require("./Guest");
15
- let RecommendationsCache = class RecommendationsCache extends sequelize_typescript_1.Model {
16
- };
17
- exports.RecommendationsCache = RecommendationsCache;
18
- __decorate([
19
- sequelize_typescript_1.Index,
20
- sequelize_typescript_1.PrimaryKey,
21
- (0, sequelize_typescript_1.Column)({
22
- type: sequelize_typescript_1.DataType.UUID,
23
- allowNull: false,
24
- defaultValue: sequelize_typescript_1.DataType.UUIDV4,
25
- }),
26
- __metadata("design:type", String)
27
- ], RecommendationsCache.prototype, "cache_id", void 0);
28
- __decorate([
29
- sequelize_typescript_1.Index,
30
- (0, sequelize_typescript_1.ForeignKey)(() => Guest_1.Guest),
31
- (0, sequelize_typescript_1.Column)({
32
- type: sequelize_typescript_1.DataType.UUID,
33
- allowNull: true,
34
- }),
35
- __metadata("design:type", String)
36
- ], RecommendationsCache.prototype, "guest_id", void 0);
37
- __decorate([
38
- (0, sequelize_typescript_1.Column)({
39
- type: sequelize_typescript_1.DataType.ARRAY(sequelize_typescript_1.DataType.STRING),
40
- allowNull: false,
41
- }),
42
- __metadata("design:type", Array)
43
- ], RecommendationsCache.prototype, "hotels", void 0);
44
- __decorate([
45
- (0, sequelize_typescript_1.Column)({
46
- type: sequelize_typescript_1.DataType.DATEONLY,
47
- allowNull: false,
48
- }),
49
- __metadata("design:type", Date)
50
- ], RecommendationsCache.prototype, "check_in", void 0);
51
- __decorate([
52
- (0, sequelize_typescript_1.Column)({
53
- type: sequelize_typescript_1.DataType.DATEONLY,
54
- allowNull: false,
55
- }),
56
- __metadata("design:type", Date)
57
- ], RecommendationsCache.prototype, "check_out", void 0);
58
- __decorate([
59
- (0, sequelize_typescript_1.Column)({
60
- type: sequelize_typescript_1.DataType.DATE,
61
- allowNull: false,
62
- defaultValue: sequelize_typescript_1.DataType.NOW,
63
- }),
64
- __metadata("design:type", Date)
65
- ], RecommendationsCache.prototype, "cached_at", void 0);
66
- __decorate([
67
- (0, sequelize_typescript_1.Column)({
68
- type: sequelize_typescript_1.DataType.DATE,
69
- allowNull: false,
70
- }),
71
- __metadata("design:type", Date)
72
- ], RecommendationsCache.prototype, "expiry", void 0);
73
- __decorate([
74
- (0, sequelize_typescript_1.Column)({
75
- type: sequelize_typescript_1.DataType.JSONB,
76
- allowNull: true,
77
- }),
78
- __metadata("design:type", Object)
79
- ], RecommendationsCache.prototype, "search_params", void 0);
80
- __decorate([
81
- (0, sequelize_typescript_1.Column)({
82
- type: sequelize_typescript_1.DataType.DATE,
83
- allowNull: false,
84
- defaultValue: sequelize_typescript_1.DataType.NOW,
85
- }),
86
- __metadata("design:type", Date)
87
- ], RecommendationsCache.prototype, "created_at", void 0);
88
- __decorate([
89
- (0, sequelize_typescript_1.BelongsTo)(() => Guest_1.Guest, { foreignKey: 'guest_id' }),
90
- __metadata("design:type", Guest_1.Guest)
91
- ], RecommendationsCache.prototype, "guest", void 0);
92
- exports.RecommendationsCache = RecommendationsCache = __decorate([
93
- (0, sequelize_typescript_1.Table)({
94
- tableName: 'recommendations_cache',
95
- timestamps: true,
96
- createdAt: 'created_at',
97
- updatedAt: false,
98
- })
99
- ], RecommendationsCache);