1215 lines
27 KiB
JavaScript
1215 lines
27 KiB
JavaScript
const db = require('../models');
|
|
const Users = db.users;
|
|
|
|
const Projects = db.projects;
|
|
|
|
const ProjectMemberships = db.project_memberships;
|
|
|
|
const Assets = db.assets;
|
|
|
|
const AssetVariants = db.asset_variants;
|
|
|
|
const PresignedUrlRequests = db.presigned_url_requests;
|
|
|
|
const TourPages = db.tour_pages;
|
|
|
|
const ProjectAudioTracks = db.project_audio_tracks;
|
|
|
|
const PublishEvents = db.publish_events;
|
|
|
|
const PwaCaches = db.pwa_caches;
|
|
|
|
const AccessLogs = db.access_logs;
|
|
|
|
const ProjectsData = [
|
|
{
|
|
name: 'Cardiff Arena Tour',
|
|
|
|
slug: 'cardiff-arena',
|
|
|
|
description: 'Interactive arena tour for visitors and event planners.',
|
|
|
|
logo_url: 'https://cdn.platform.com/cardiff/logo.png',
|
|
|
|
favicon_url: 'https://cdn.platform.com/cardiff/favicon.ico',
|
|
|
|
og_image_url: 'https://cdn.platform.com/cardiff/og.jpg',
|
|
|
|
theme_config_json:
|
|
'{colors:{primary:#0EA5E9,background:#0B1220},fonts:{base:Inter}}',
|
|
|
|
custom_css_json: '{buttons:{radius:14px}}',
|
|
|
|
cdn_base_url: 'https://cdn.platform.com/cardiff',
|
|
|
|
is_deleted: true,
|
|
|
|
deleted_at_time: new Date('2026-01-01T00:00:00Z'),
|
|
},
|
|
|
|
{
|
|
name: 'Riverside Park Walkthrough',
|
|
|
|
slug: 'riverside-park',
|
|
|
|
description: 'Offline-ready guided walkthrough for the city park.',
|
|
|
|
logo_url: 'https://cdn.platform.com/riverside/logo.png',
|
|
|
|
favicon_url: 'https://cdn.platform.com/riverside/favicon.ico',
|
|
|
|
og_image_url: 'https://cdn.platform.com/riverside/og.jpg',
|
|
|
|
theme_config_json:
|
|
'{colors:{primary:#22C55E,background:#FFFFFF},fonts:{base:Manrope}}',
|
|
|
|
custom_css_json: '{header:{shadow:md}}',
|
|
|
|
cdn_base_url: 'https://cdn.platform.com/riverside',
|
|
|
|
is_deleted: false,
|
|
|
|
deleted_at_time: new Date('2026-01-01T00:00:00Z'),
|
|
},
|
|
|
|
{
|
|
name: 'Mall Central Experience',
|
|
|
|
slug: 'mall-central',
|
|
|
|
description: 'Retail complex presentation with navigation and galleries.',
|
|
|
|
logo_url: 'https://cdn.platform.com/mall/logo.png',
|
|
|
|
favicon_url: 'https://cdn.platform.com/mall/favicon.ico',
|
|
|
|
og_image_url: 'https://cdn.platform.com/mall/og.jpg',
|
|
|
|
theme_config_json:
|
|
'{colors:{primary:#A855F7,background:#0F172A},fonts:{base:Poppins}}',
|
|
|
|
custom_css_json: '{cards:{border:1px solid rgba(255,255,255,0.12)}}',
|
|
|
|
cdn_base_url: 'https://cdn.platform.com/mall',
|
|
|
|
is_deleted: false,
|
|
|
|
deleted_at_time: new Date('2026-01-01T00:00:00Z'),
|
|
},
|
|
];
|
|
|
|
const ProjectMembershipsData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
access_level: 'editor',
|
|
|
|
is_active: true,
|
|
|
|
invited_at: new Date('2026-02-01T10:00:00Z'),
|
|
|
|
accepted_at: new Date('2026-02-01T10:05:00Z'),
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
access_level: 'reviewer',
|
|
|
|
is_active: true,
|
|
|
|
invited_at: new Date('2026-02-02T09:00:00Z'),
|
|
|
|
accepted_at: new Date('2026-02-02T09:10:00Z'),
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
access_level: 'viewer',
|
|
|
|
is_active: true,
|
|
|
|
invited_at: new Date('2026-02-10T14:00:00Z'),
|
|
|
|
accepted_at: new Date('2026-02-10T14:30:00Z'),
|
|
},
|
|
];
|
|
|
|
const AssetsData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
name: 'Arena Lobby Background',
|
|
|
|
asset_type: 'image',
|
|
|
|
cdn_url: 'https://cdn.platform.com/cardiff/images/lobby.webp',
|
|
|
|
storage_key: 'cardiff/images/lobby.webp',
|
|
|
|
mime_type: 'image/webp',
|
|
|
|
size_mb: 2.45,
|
|
|
|
width_px: 3840,
|
|
|
|
height_px: 2160,
|
|
|
|
duration_sec: 0.0,
|
|
|
|
checksum: 'sha256_lobby_001',
|
|
|
|
is_public: true,
|
|
|
|
is_deleted: false,
|
|
|
|
deleted_at_time: new Date('2026-01-01T00:00:00Z'),
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
name: 'Hallway Transition Video',
|
|
|
|
asset_type: 'video',
|
|
|
|
cdn_url: 'https://cdn.platform.com/cardiff/video/transition-hallway.mp4',
|
|
|
|
storage_key: 'cardiff/video/transition-hallway.mp4',
|
|
|
|
mime_type: 'video/mp4',
|
|
|
|
size_mb: 18.2,
|
|
|
|
width_px: 1920,
|
|
|
|
height_px: 1080,
|
|
|
|
duration_sec: 4.8,
|
|
|
|
checksum: 'sha256_vid_002',
|
|
|
|
is_public: true,
|
|
|
|
is_deleted: true,
|
|
|
|
deleted_at_time: new Date('2026-01-01T00:00:00Z'),
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
name: 'Park Ambience Loop',
|
|
|
|
asset_type: 'video',
|
|
|
|
cdn_url: 'https://cdn.platform.com/riverside/audio/ambience.mp3',
|
|
|
|
storage_key: 'riverside/audio/ambience.mp3',
|
|
|
|
mime_type: 'audio/mpeg',
|
|
|
|
size_mb: 5.6,
|
|
|
|
width_px: 0,
|
|
|
|
height_px: 0,
|
|
|
|
duration_sec: 120.0,
|
|
|
|
checksum: 'sha256_aud_003',
|
|
|
|
is_public: true,
|
|
|
|
is_deleted: true,
|
|
|
|
deleted_at_time: new Date('2026-01-01T00:00:00Z'),
|
|
},
|
|
];
|
|
|
|
const AssetVariantsData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
variant_type: 'mp4_low',
|
|
|
|
cdn_url: 'https://cdn.platform.com/cardiff/images/lobby_thumb.webp',
|
|
|
|
width_px: 640,
|
|
|
|
height_px: 360,
|
|
|
|
size_mb: 0.12,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
variant_type: 'preview',
|
|
|
|
cdn_url: 'https://cdn.platform.com/cardiff/images/lobby_preview.webp',
|
|
|
|
width_px: 1280,
|
|
|
|
height_px: 720,
|
|
|
|
size_mb: 0.35,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
variant_type: 'preview',
|
|
|
|
cdn_url:
|
|
'https://cdn.platform.com/cardiff/video/transition-hallway_720p.mp4',
|
|
|
|
width_px: 1280,
|
|
|
|
height_px: 720,
|
|
|
|
size_mb: 9.4,
|
|
},
|
|
];
|
|
|
|
const PresignedUrlRequestsData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
purpose: 'download',
|
|
|
|
asset_type: 'video',
|
|
|
|
requested_key: 'cardiff/images/section-a.webp',
|
|
|
|
mime_type: 'image/webp',
|
|
|
|
requested_size_mb: 3.2,
|
|
|
|
expires_at: new Date('2026-03-16T12:30:00Z'),
|
|
|
|
status: 'issued',
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
purpose: 'upload',
|
|
|
|
asset_type: 'video',
|
|
|
|
requested_key: 'cardiff/video/transition-gate.mp4',
|
|
|
|
mime_type: 'video/mp4',
|
|
|
|
requested_size_mb: 28.0,
|
|
|
|
expires_at: new Date('2026-03-16T12:35:00Z'),
|
|
|
|
status: 'issued',
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
purpose: 'upload',
|
|
|
|
asset_type: 'audio',
|
|
|
|
requested_key: 'riverside/audio/ambience.mp3',
|
|
|
|
mime_type: 'audio/mpeg',
|
|
|
|
requested_size_mb: 6.0,
|
|
|
|
expires_at: new Date('2026-03-16T09:10:00Z'),
|
|
|
|
status: 'issued',
|
|
},
|
|
];
|
|
|
|
const TourPagesData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'stage',
|
|
|
|
source_key: 'cardiff_welcome_stage',
|
|
|
|
name: 'Welcome',
|
|
|
|
slug: 'welcome',
|
|
|
|
sort_order: 1,
|
|
|
|
background_image_url: 'https://cdn.platform.com/cardiff/images/lobby.webp',
|
|
|
|
background_video_url: '',
|
|
|
|
background_audio_url: '',
|
|
|
|
background_loop: true,
|
|
|
|
requires_auth: true,
|
|
|
|
ui_schema_json: '{menu:{enabled:false},grid:responsive}',
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'stage',
|
|
|
|
source_key: 'cardiff_arena_floor_stage',
|
|
|
|
name: 'Arena Floor',
|
|
|
|
slug: 'arena-floor',
|
|
|
|
sort_order: 2,
|
|
|
|
background_image_url: '',
|
|
|
|
background_video_url:
|
|
'https://cdn.platform.com/cardiff/video/floor-loop.mp4',
|
|
|
|
background_audio_url: '',
|
|
|
|
background_loop: true,
|
|
|
|
requires_auth: true,
|
|
|
|
ui_schema_json: '{safeArea:true}',
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'stage',
|
|
|
|
source_key: 'riverside_start_prod',
|
|
|
|
name: 'Start',
|
|
|
|
slug: 'start',
|
|
|
|
sort_order: 1,
|
|
|
|
background_image_url:
|
|
'https://cdn.platform.com/riverside/images/start.webp',
|
|
|
|
background_video_url: '',
|
|
|
|
background_audio_url: '',
|
|
|
|
background_loop: true,
|
|
|
|
requires_auth: true,
|
|
|
|
ui_schema_json: '{hint:Swipe to explore}',
|
|
},
|
|
];
|
|
|
|
const ProjectAudioTracksData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'dev',
|
|
|
|
source_key: 'cardiff_global_stage',
|
|
|
|
name: 'Arena Ambient',
|
|
|
|
slug: 'arena-ambient',
|
|
|
|
url: 'https://cdn.platform.com/cardiff/audio/ambient.mp3',
|
|
|
|
loop: true,
|
|
|
|
volume: 0.6,
|
|
|
|
sort_order: 1,
|
|
|
|
is_enabled: true,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'production',
|
|
|
|
source_key: 'riverside_global_prod',
|
|
|
|
name: 'Park Ambience',
|
|
|
|
slug: 'park-ambience',
|
|
|
|
url: 'https://cdn.platform.com/riverside/audio/ambience.mp3',
|
|
|
|
loop: true,
|
|
|
|
volume: 0.7,
|
|
|
|
sort_order: 1,
|
|
|
|
is_enabled: true,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'dev',
|
|
|
|
source_key: 'mall_global_dev',
|
|
|
|
name: 'Soft Lounge',
|
|
|
|
slug: 'soft-lounge',
|
|
|
|
url: 'https://cdn.platform.com/mall/audio/lounge.mp3',
|
|
|
|
loop: true,
|
|
|
|
volume: 0.5,
|
|
|
|
sort_order: 1,
|
|
|
|
is_enabled: false,
|
|
},
|
|
];
|
|
|
|
const PublishEventsData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
from_environment: 'dev',
|
|
|
|
to_environment: 'dev',
|
|
|
|
started_at: new Date('2026-03-01T10:00:00Z'),
|
|
|
|
finished_at: new Date('2026-03-01T10:01:10Z'),
|
|
|
|
status: 'queued',
|
|
|
|
error_message: '',
|
|
|
|
pages_copied: 6,
|
|
|
|
transitions_copied: 2,
|
|
|
|
audios_copied: 1,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
from_environment: 'production',
|
|
|
|
to_environment: 'production',
|
|
|
|
started_at: new Date('2026-03-15T18:00:00Z'),
|
|
|
|
finished_at: new Date('2026-03-15T18:02:40Z'),
|
|
|
|
status: 'queued',
|
|
|
|
error_message:
|
|
'Asset preload list generation failed due to missing CDN URL.',
|
|
|
|
pages_copied: 6,
|
|
|
|
transitions_copied: 2,
|
|
|
|
audios_copied: 1,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
from_environment: 'dev',
|
|
|
|
to_environment: 'production',
|
|
|
|
started_at: new Date('2026-02-05T09:00:00Z'),
|
|
|
|
finished_at: new Date('2026-02-05T09:01:05Z'),
|
|
|
|
status: 'running',
|
|
|
|
error_message: '',
|
|
|
|
pages_copied: 4,
|
|
|
|
transitions_copied: 1,
|
|
|
|
audios_copied: 1,
|
|
},
|
|
];
|
|
|
|
const PwaCachesData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'production',
|
|
|
|
cache_version: 'cardiff-stage-v12',
|
|
|
|
manifest_json:
|
|
'{name:Cardiff Arena Tour,start_url:/welcome,display:standalone}',
|
|
|
|
asset_list_json:
|
|
'{assets:[/images/lobby.webp,/video/transition-hallway.mp4]}',
|
|
|
|
generated_at: new Date('2026-03-15T17:40:00Z'),
|
|
|
|
is_active: true,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'stage',
|
|
|
|
cache_version: 'riverside-prod-v7',
|
|
|
|
manifest_json:
|
|
'{name:Riverside Park Walkthrough,start_url:/start,display:standalone}',
|
|
|
|
asset_list_json: '{assets:[/images/start.webp,/audio/ambience.mp3]}',
|
|
|
|
generated_at: new Date('2026-02-05T09:02:00Z'),
|
|
|
|
is_active: true,
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'stage',
|
|
|
|
cache_version: 'seaside-stage-v3',
|
|
|
|
manifest_json:
|
|
'{name:Seaside Concert Hall,start_url:/lobby,display:standalone}',
|
|
|
|
asset_list_json:
|
|
'{assets:[/images/lobby.webp,/video/spotlight.mp4,/audio/foyer-loop.mp3]}',
|
|
|
|
generated_at: new Date('2026-03-05T12:22:00Z'),
|
|
|
|
is_active: true,
|
|
},
|
|
];
|
|
|
|
const AccessLogsData = [
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'stage',
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
path: '/welcome',
|
|
|
|
ip_address: '203.0.113.10',
|
|
|
|
user_agent: 'Mozilla/5.0 Chrome/122.0 Desktop',
|
|
|
|
accessed_at: new Date('2026-03-14T08:06:10Z'),
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'production',
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
path: '/admin/projects/cardiff-arena',
|
|
|
|
ip_address: '203.0.113.11',
|
|
|
|
user_agent: 'Mozilla/5.0 Chrome/122.0 Desktop',
|
|
|
|
accessed_at: new Date('2026-03-15T17:55:44Z'),
|
|
},
|
|
|
|
{
|
|
// type code here for "relation_one" field
|
|
|
|
environment: 'stage',
|
|
|
|
// type code here for "relation_one" field
|
|
|
|
path: '/start',
|
|
|
|
ip_address: '198.51.100.55',
|
|
|
|
user_agent: 'Mozilla/5.0 Safari/17.3 iOS',
|
|
|
|
accessed_at: new Date('2026-03-12T10:20:00Z'),
|
|
},
|
|
];
|
|
|
|
// Similar logic for "relation_many"
|
|
|
|
async function associateProjectMembershipWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const ProjectMembership0 = await ProjectMemberships.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (ProjectMembership0?.setProject) {
|
|
await ProjectMembership0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const ProjectMembership1 = await ProjectMemberships.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (ProjectMembership1?.setProject) {
|
|
await ProjectMembership1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const ProjectMembership2 = await ProjectMemberships.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (ProjectMembership2?.setProject) {
|
|
await ProjectMembership2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associateProjectMembershipWithUser() {
|
|
const relatedUser0 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const ProjectMembership0 = await ProjectMemberships.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (ProjectMembership0?.setUser) {
|
|
await ProjectMembership0.setUser(relatedUser0);
|
|
}
|
|
|
|
const relatedUser1 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const ProjectMembership1 = await ProjectMemberships.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (ProjectMembership1?.setUser) {
|
|
await ProjectMembership1.setUser(relatedUser1);
|
|
}
|
|
|
|
const relatedUser2 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const ProjectMembership2 = await ProjectMemberships.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (ProjectMembership2?.setUser) {
|
|
await ProjectMembership2.setUser(relatedUser2);
|
|
}
|
|
}
|
|
|
|
async function associateAssetWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const Asset0 = await Assets.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (Asset0?.setProject) {
|
|
await Asset0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const Asset1 = await Assets.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (Asset1?.setProject) {
|
|
await Asset1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const Asset2 = await Assets.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (Asset2?.setProject) {
|
|
await Asset2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associateAssetVariantWithAsset() {
|
|
const relatedAsset0 = await Assets.findOne({
|
|
offset: Math.floor(Math.random() * (await Assets.count())),
|
|
});
|
|
const AssetVariant0 = await AssetVariants.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (AssetVariant0?.setAsset) {
|
|
await AssetVariant0.setAsset(relatedAsset0);
|
|
}
|
|
|
|
const relatedAsset1 = await Assets.findOne({
|
|
offset: Math.floor(Math.random() * (await Assets.count())),
|
|
});
|
|
const AssetVariant1 = await AssetVariants.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (AssetVariant1?.setAsset) {
|
|
await AssetVariant1.setAsset(relatedAsset1);
|
|
}
|
|
|
|
const relatedAsset2 = await Assets.findOne({
|
|
offset: Math.floor(Math.random() * (await Assets.count())),
|
|
});
|
|
const AssetVariant2 = await AssetVariants.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (AssetVariant2?.setAsset) {
|
|
await AssetVariant2.setAsset(relatedAsset2);
|
|
}
|
|
}
|
|
|
|
async function associatePresignedUrlRequestWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PresignedUrlRequest0 = await PresignedUrlRequests.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (PresignedUrlRequest0?.setProject) {
|
|
await PresignedUrlRequest0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PresignedUrlRequest1 = await PresignedUrlRequests.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (PresignedUrlRequest1?.setProject) {
|
|
await PresignedUrlRequest1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PresignedUrlRequest2 = await PresignedUrlRequests.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (PresignedUrlRequest2?.setProject) {
|
|
await PresignedUrlRequest2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associatePresignedUrlRequestWithUser() {
|
|
const relatedUser0 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const PresignedUrlRequest0 = await PresignedUrlRequests.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (PresignedUrlRequest0?.setUser) {
|
|
await PresignedUrlRequest0.setUser(relatedUser0);
|
|
}
|
|
|
|
const relatedUser1 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const PresignedUrlRequest1 = await PresignedUrlRequests.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (PresignedUrlRequest1?.setUser) {
|
|
await PresignedUrlRequest1.setUser(relatedUser1);
|
|
}
|
|
|
|
const relatedUser2 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const PresignedUrlRequest2 = await PresignedUrlRequests.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (PresignedUrlRequest2?.setUser) {
|
|
await PresignedUrlRequest2.setUser(relatedUser2);
|
|
}
|
|
}
|
|
|
|
async function associateTourPageWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const TourPage0 = await TourPages.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (TourPage0?.setProject) {
|
|
await TourPage0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const TourPage1 = await TourPages.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (TourPage1?.setProject) {
|
|
await TourPage1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const TourPage2 = await TourPages.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (TourPage2?.setProject) {
|
|
await TourPage2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associateProjectAudioTrackWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const ProjectAudioTrack0 = await ProjectAudioTracks.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (ProjectAudioTrack0?.setProject) {
|
|
await ProjectAudioTrack0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const ProjectAudioTrack1 = await ProjectAudioTracks.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (ProjectAudioTrack1?.setProject) {
|
|
await ProjectAudioTrack1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const ProjectAudioTrack2 = await ProjectAudioTracks.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (ProjectAudioTrack2?.setProject) {
|
|
await ProjectAudioTrack2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associatePublishEventWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PublishEvent0 = await PublishEvents.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (PublishEvent0?.setProject) {
|
|
await PublishEvent0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PublishEvent1 = await PublishEvents.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (PublishEvent1?.setProject) {
|
|
await PublishEvent1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PublishEvent2 = await PublishEvents.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (PublishEvent2?.setProject) {
|
|
await PublishEvent2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associatePublishEventWithUser() {
|
|
const relatedUser0 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const PublishEvent0 = await PublishEvents.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (PublishEvent0?.setUser) {
|
|
await PublishEvent0.setUser(relatedUser0);
|
|
}
|
|
|
|
const relatedUser1 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const PublishEvent1 = await PublishEvents.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (PublishEvent1?.setUser) {
|
|
await PublishEvent1.setUser(relatedUser1);
|
|
}
|
|
|
|
const relatedUser2 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const PublishEvent2 = await PublishEvents.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (PublishEvent2?.setUser) {
|
|
await PublishEvent2.setUser(relatedUser2);
|
|
}
|
|
}
|
|
|
|
async function associatePwaCacheWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PwaCache0 = await PwaCaches.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (PwaCache0?.setProject) {
|
|
await PwaCache0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PwaCache1 = await PwaCaches.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (PwaCache1?.setProject) {
|
|
await PwaCache1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const PwaCache2 = await PwaCaches.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (PwaCache2?.setProject) {
|
|
await PwaCache2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associateAccessLogWithProject() {
|
|
const relatedProject0 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const AccessLog0 = await AccessLogs.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (AccessLog0?.setProject) {
|
|
await AccessLog0.setProject(relatedProject0);
|
|
}
|
|
|
|
const relatedProject1 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const AccessLog1 = await AccessLogs.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (AccessLog1?.setProject) {
|
|
await AccessLog1.setProject(relatedProject1);
|
|
}
|
|
|
|
const relatedProject2 = await Projects.findOne({
|
|
offset: Math.floor(Math.random() * (await Projects.count())),
|
|
});
|
|
const AccessLog2 = await AccessLogs.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (AccessLog2?.setProject) {
|
|
await AccessLog2.setProject(relatedProject2);
|
|
}
|
|
}
|
|
|
|
async function associateAccessLogWithUser() {
|
|
const relatedUser0 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const AccessLog0 = await AccessLogs.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 0,
|
|
});
|
|
if (AccessLog0?.setUser) {
|
|
await AccessLog0.setUser(relatedUser0);
|
|
}
|
|
|
|
const relatedUser1 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const AccessLog1 = await AccessLogs.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 1,
|
|
});
|
|
if (AccessLog1?.setUser) {
|
|
await AccessLog1.setUser(relatedUser1);
|
|
}
|
|
|
|
const relatedUser2 = await Users.findOne({
|
|
offset: Math.floor(Math.random() * (await Users.count())),
|
|
});
|
|
const AccessLog2 = await AccessLogs.findOne({
|
|
order: [['id', 'ASC']],
|
|
offset: 2,
|
|
});
|
|
if (AccessLog2?.setUser) {
|
|
await AccessLog2.setUser(relatedUser2);
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
up: async () => {
|
|
// Keep production-like schema strict; skip auto sample payload inserts by default.
|
|
if (process.env.ENABLE_SAMPLE_DATA !== 'true') {
|
|
return;
|
|
}
|
|
|
|
await Projects.bulkCreate(ProjectsData);
|
|
|
|
await ProjectMemberships.bulkCreate(ProjectMembershipsData);
|
|
|
|
await Assets.bulkCreate(AssetsData);
|
|
|
|
await AssetVariants.bulkCreate(AssetVariantsData);
|
|
|
|
await PresignedUrlRequests.bulkCreate(PresignedUrlRequestsData);
|
|
|
|
await TourPages.bulkCreate(TourPagesData);
|
|
|
|
await ProjectAudioTracks.bulkCreate(ProjectAudioTracksData);
|
|
|
|
await PublishEvents.bulkCreate(PublishEventsData);
|
|
|
|
await PwaCaches.bulkCreate(PwaCachesData);
|
|
|
|
await AccessLogs.bulkCreate(AccessLogsData);
|
|
|
|
await Promise.all([
|
|
// Similar logic for "relation_many"
|
|
|
|
await associateProjectMembershipWithProject(),
|
|
|
|
await associateProjectMembershipWithUser(),
|
|
|
|
await associateAssetWithProject(),
|
|
|
|
await associateAssetVariantWithAsset(),
|
|
|
|
await associatePresignedUrlRequestWithProject(),
|
|
|
|
await associatePresignedUrlRequestWithUser(),
|
|
|
|
await associateTourPageWithProject(),
|
|
|
|
await associateProjectAudioTrackWithProject(),
|
|
|
|
await associatePublishEventWithProject(),
|
|
|
|
await associatePublishEventWithUser(),
|
|
|
|
await associatePwaCacheWithProject(),
|
|
|
|
await associateAccessLogWithProject(),
|
|
|
|
await associateAccessLogWithUser(),
|
|
]);
|
|
},
|
|
|
|
down: async (queryInterface) => {
|
|
if (process.env.ENABLE_SAMPLE_DATA !== 'true') {
|
|
return;
|
|
}
|
|
|
|
await queryInterface.bulkDelete('projects', null, {});
|
|
|
|
await queryInterface.bulkDelete('project_memberships', null, {});
|
|
|
|
await queryInterface.bulkDelete('assets', null, {});
|
|
|
|
await queryInterface.bulkDelete('asset_variants', null, {});
|
|
|
|
await queryInterface.bulkDelete('presigned_url_requests', null, {});
|
|
|
|
await queryInterface.bulkDelete('tour_pages', null, {});
|
|
|
|
await queryInterface.bulkDelete('project_audio_tracks', null, {});
|
|
|
|
await queryInterface.bulkDelete('publish_events', null, {});
|
|
|
|
await queryInterface.bulkDelete('pwa_caches', null, {});
|
|
|
|
await queryInterface.bulkDelete('access_logs', null, {});
|
|
},
|
|
};
|