seed-mock-data.sql 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. -- ============================================================
  2. -- VidReview Mock Data Seed Script
  3. -- Run with:
  4. -- docker exec -i vidreview-db psql -U vidreview -d vidreview < scripts/seed-mock-data.sql
  5. --
  6. -- Behaviour:
  7. -- * If DB already has users -> skips entirely (update deploy safe)
  8. -- * If DB is empty -> seeds full mock dataset
  9. -- ============================================================
  10. -- Guard: skip if users already exist
  11. DO $$
  12. BEGIN
  13. IF EXISTS (SELECT 1 FROM "User" LIMIT 1) THEN
  14. RAISE NOTICE E'Database already has users -- skipping seed (update deploy detected).\n';
  15. ELSE
  16. RAISE NOTICE 'Seeding mock data...';
  17. END IF;
  18. END
  19. $$;
  20. -- Password hash for "demo1234" (bcrypt, $2a$10$...)
  21. -- Hash: docker exec vidreview-api node -e "require('bcryptjs').hash('demo1234',10).then(h=>console.log(h))"
  22. \set PASS_HASH '$2a$10$lnSHDKXHRTayh.Z6Sx/q7eHecpMywQqG5nWvTWThj6lw0h.a99gyO'
  23. \set ON_ERROR_STOP on
  24. -- Users
  25. INSERT INTO "User" (id, email, name, password, "globalRole", active, "storageQuota", "storageUsed", "createdAt", "updatedAt")
  26. VALUES (gen_random_uuid()::text, 'admin@vidreview.local', 'Admin', :'PASS_HASH', 'ADMIN', true, 524288000, 0, NOW(), NOW());
  27. INSERT INTO "User" (id, email, name, password, "globalRole", active, "storageQuota", "storageUsed", "createdAt", "updatedAt") VALUES
  28. (gen_random_uuid()::text, 'alice@vidreview.local', 'Alice Johnson', :'PASS_HASH', 'MEMBER', true, 524288000, 0, NOW(), NOW()),
  29. (gen_random_uuid()::text, 'bob@vidreview.local', 'Bob Smith', :'PASS_HASH', 'MEMBER', true, 524288000, 0, NOW(), NOW()),
  30. (gen_random_uuid()::text, 'carol@vidreview.local', 'Carol White', :'PASS_HASH', 'MEMBER', true, 524288000, 0, NOW(), NOW()),
  31. (gen_random_uuid()::text, 'david@vidreview.local', 'David Lee', :'PASS_HASH', 'MEMBER', true, 524288000, 0, NOW(), NOW()),
  32. (gen_random_uuid()::text, 'eva@vidreview.local', 'Eva Martinez', :'PASS_HASH', 'MEMBER', true, 524288000, 0, NOW(), NOW());
  33. -- Projects (each owned by one member)
  34. INSERT INTO "Project" (id, name, "ownerId", "createdAt", "updatedAt") VALUES
  35. (gen_random_uuid()::text, 'Brand Campaign Q2', (SELECT id FROM "User" WHERE email='alice@vidreview.local'), NOW(), NOW()),
  36. (gen_random_uuid()::text, 'Product Launch Video', (SELECT id FROM "User" WHERE email='alice@vidreview.local'), NOW(), NOW()),
  37. (gen_random_uuid()::text, 'Internal Training Clips', (SELECT id FROM "User" WHERE email='bob@vidreview.local'), NOW(), NOW()),
  38. (gen_random_uuid()::text, 'Customer Testimonials', (SELECT id FROM "User" WHERE email='bob@vidreview.local'), NOW(), NOW()),
  39. (gen_random_uuid()::text, 'Event Highlights Reel', (SELECT id FROM "User" WHERE email='carol@vidreview.local'), NOW(), NOW()),
  40. (gen_random_uuid()::text, 'Social Media Shorts', (SELECT id FROM "User" WHERE email='david@vidreview.local'), NOW(), NOW()),
  41. (gen_random_uuid()::text, 'How-To Tutorial Series', (SELECT id FROM "User" WHERE email='eva@vidreview.local'), NOW(), NOW()),
  42. (gen_random_uuid()::text, 'Partner Collaboration', (SELECT id FROM "User" WHERE email='carol@vidreview.local'), NOW(), NOW());
  43. -- Project Members
  44. -- Brand Campaign Q2 (owner=Alice, ADMIN)
  45. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  46. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='alice@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='alice@vidreview.local')
  47. FROM "Project" WHERE name='Brand Campaign Q2';
  48. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  49. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='bob@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='alice@vidreview.local')
  50. FROM "Project" WHERE name='Brand Campaign Q2';
  51. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  52. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='carol@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='alice@vidreview.local')
  53. FROM "Project" WHERE name='Brand Campaign Q2';
  54. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  55. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='david@vidreview.local'), id, 'VIEWER', NOW(), (SELECT id FROM "User" WHERE email='alice@vidreview.local')
  56. FROM "Project" WHERE name='Brand Campaign Q2';
  57. -- Product Launch Video
  58. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  59. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='alice@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='alice@vidreview.local')
  60. FROM "Project" WHERE name='Product Launch Video';
  61. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  62. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='eva@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='alice@vidreview.local')
  63. FROM "Project" WHERE name='Product Launch Video';
  64. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  65. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='carol@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='alice@vidreview.local')
  66. FROM "Project" WHERE name='Product Launch Video';
  67. -- Internal Training Clips
  68. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  69. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='bob@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='bob@vidreview.local')
  70. FROM "Project" WHERE name='Internal Training Clips';
  71. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  72. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='alice@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='bob@vidreview.local')
  73. FROM "Project" WHERE name='Internal Training Clips';
  74. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  75. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='david@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='bob@vidreview.local')
  76. FROM "Project" WHERE name='Internal Training Clips';
  77. -- Customer Testimonials
  78. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  79. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='bob@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='bob@vidreview.local')
  80. FROM "Project" WHERE name='Customer Testimonials';
  81. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  82. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='carol@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='bob@vidreview.local')
  83. FROM "Project" WHERE name='Customer Testimonials';
  84. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  85. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='eva@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='bob@vidreview.local')
  86. FROM "Project" WHERE name='Customer Testimonials';
  87. -- Event Highlights Reel
  88. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  89. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='carol@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='carol@vidreview.local')
  90. FROM "Project" WHERE name='Event Highlights Reel';
  91. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  92. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='bob@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='carol@vidreview.local')
  93. FROM "Project" WHERE name='Event Highlights Reel';
  94. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  95. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='alice@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='carol@vidreview.local')
  96. FROM "Project" WHERE name='Event Highlights Reel';
  97. -- Social Media Shorts
  98. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  99. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='david@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='david@vidreview.local')
  100. FROM "Project" WHERE name='Social Media Shorts';
  101. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  102. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='alice@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='david@vidreview.local')
  103. FROM "Project" WHERE name='Social Media Shorts';
  104. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  105. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='bob@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='david@vidreview.local')
  106. FROM "Project" WHERE name='Social Media Shorts';
  107. -- How-To Tutorial Series
  108. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  109. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='eva@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='eva@vidreview.local')
  110. FROM "Project" WHERE name='How-To Tutorial Series';
  111. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  112. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='carol@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='eva@vidreview.local')
  113. FROM "Project" WHERE name='How-To Tutorial Series';
  114. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  115. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='david@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='eva@vidreview.local')
  116. FROM "Project" WHERE name='How-To Tutorial Series';
  117. -- Partner Collaboration
  118. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  119. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='carol@vidreview.local'), id, 'ADMIN', NOW(), (SELECT id FROM "User" WHERE email='carol@vidreview.local')
  120. FROM "Project" WHERE name='Partner Collaboration';
  121. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  122. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='david@vidreview.local'), id, 'EDITOR', NOW(), (SELECT id FROM "User" WHERE email='carol@vidreview.local')
  123. FROM "Project" WHERE name='Partner Collaboration';
  124. INSERT INTO "ProjectMember" ("id","userId","projectId","role","joinedAt","invitedBy")
  125. SELECT gen_random_uuid()::text, (SELECT id FROM "User" WHERE email='eva@vidreview.local'), id, 'REVIEWER', NOW(), (SELECT id FROM "User" WHERE email='carol@vidreview.local')
  126. FROM "Project" WHERE name='Partner Collaboration';
  127. -- Output summary
  128. \pset format aligned
  129. \pset border 2
  130. \echo ''
  131. \echo '============================================================'
  132. \echo ' VidReview Mock Data Seeded Successfully'
  133. \echo '============================================================'
  134. \echo ''
  135. \echo ' Password (all accounts): demo1234'
  136. \echo ' Storage quota: 500 MB per user'
  137. \echo ''
  138. \echo '-- Users ----------------------------------------------------'
  139. SELECT
  140. "globalRole"::text AS "Role",
  141. name AS "Name",
  142. email AS "Email",
  143. ("storageQuota"::bigint / 1024 / 1024) || ' MB' AS "Quota"
  144. FROM "User"
  145. ORDER BY
  146. CASE "globalRole" WHEN 'ADMIN' THEN 0 WHEN 'MEMBER' THEN 1 ELSE 2 END,
  147. name;
  148. \echo ''
  149. \echo '-- Projects & Members ----------------------------------------'
  150. SELECT
  151. pr.name AS "Project",
  152. u.name AS "Member",
  153. pm.role::text AS "Role",
  154. CASE WHEN pr."ownerId" = u.id THEN '(owner)' ELSE '' END AS "Note"
  155. FROM "Project" pr
  156. JOIN "ProjectMember" pm ON pm."projectId" = pr.id
  157. JOIN "User" u ON u.id = pm."userId"
  158. ORDER BY pr.name, u.name;
  159. \echo ''
  160. \echo '============================================================'
  161. \echo ''