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.
- package/dist/libs/database.js +8 -0
- package/dist/migrations/024-add-unique-slug-index-collections.d.ts +3 -0
- package/dist/migrations/024-add-unique-slug-index-collections.js +107 -0
- package/dist/migrations/025-add-creator-bio-social-media.d.ts +3 -0
- package/dist/migrations/025-add-creator-bio-social-media.js +54 -0
- package/dist/models/Collection.d.ts +10 -0
- package/dist/models/Collection.js +145 -2
- package/dist/models/Creator.d.ts +2 -0
- package/dist/models/Creator.js +14 -0
- package/package.json +1 -1
- package/dist/migrations/011-add-guest-recommendation-tables.d.ts +0 -6
- package/dist/migrations/011-add-guest-recommendation-tables.js +0 -188
- package/dist/migrations/012-add-guest-favorite-hotels.d.ts +0 -6
- package/dist/migrations/012-add-guest-favorite-hotels.js +0 -50
- package/dist/models/GuestFavoriteHotel.d.ts +0 -9
- package/dist/models/GuestFavoriteHotel.js +0 -63
- package/dist/models/GuestProfile.d.ts +0 -13
- package/dist/models/GuestProfile.js +0 -90
- package/dist/models/GuestSearchHistory.d.ts +0 -20
- package/dist/models/GuestSearchHistory.js +0 -143
- package/dist/models/RecommendationsCache.d.ts +0 -14
- package/dist/models/RecommendationsCache.js +0 -99
package/dist/libs/database.js
CHANGED
|
@@ -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,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,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
|
-
|
|
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);
|
package/dist/models/Creator.d.ts
CHANGED
package/dist/models/Creator.js
CHANGED
|
@@ -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,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,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);
|