seed-initial.cjs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const { PrismaClient } = require('@prisma/client');
  2. const { hash } = require('bcryptjs');
  3. function getInitialStylistFromEnv(env = process.env) {
  4. return {
  5. id: BigInt(env.INITIAL_STYLIST_ID || '1'),
  6. username: env.INITIAL_STYLIST_USERNAME || 'Ogawa',
  7. email: env.INITIAL_STYLIST_EMAIL || 'stylist@example.com',
  8. password: env.INITIAL_STYLIST_PASSWORD || 'Passw0rd!',
  9. };
  10. }
  11. async function seedInitialStylist(prisma, initialStylist, hashPassword) {
  12. const existing = await prisma.hairstylistUser.findUnique({
  13. where: { id: initialStylist.id },
  14. });
  15. if (existing) {
  16. return 'existing';
  17. }
  18. const password = await hashPassword(initialStylist.password, 10);
  19. await prisma.hairstylistUser.create({
  20. data: {
  21. id: initialStylist.id,
  22. username: initialStylist.username,
  23. email: initialStylist.email,
  24. password,
  25. isDeleted: 0,
  26. },
  27. });
  28. return 'created';
  29. }
  30. async function seedInitialData(prisma, options = {}) {
  31. const env = options.env || process.env;
  32. const hashPassword = options.hashPassword || hash;
  33. const initialStylist = getInitialStylistFromEnv(env);
  34. const stylist = await seedInitialStylist(prisma, initialStylist, hashPassword);
  35. return {
  36. stylist,
  37. stylistUsername: initialStylist.username,
  38. stylistEmail: initialStylist.email,
  39. };
  40. }
  41. async function main() {
  42. const prisma = new PrismaClient();
  43. try {
  44. const result = await seedInitialData(prisma);
  45. console.log(
  46. `Initial account ensured: stylist=${result.stylist}, account=${result.stylistUsername} <${result.stylistEmail}>`,
  47. );
  48. } finally {
  49. await prisma.$disconnect();
  50. }
  51. }
  52. if (require.main === module) {
  53. main().catch((error) => {
  54. console.error(error);
  55. process.exitCode = 1;
  56. });
  57. }
  58. module.exports = {
  59. getInitialStylistFromEnv,
  60. seedInitialData,
  61. };