39948-vm/backend/src/db/seeders/20231127130745-sample-data.js

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, {});
},
};