From 159ae1e8dbdf797d32e6274f0d3ea8996b30a798 Mon Sep 17 00:00:00 2001 From: Sidney Gomes Date: Wed, 22 Jul 2026 22:16:46 -0300 Subject: [PATCH] fix: run prisma db push and seed db on startup --- server.ts | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/server.ts b/server.ts index c6c7226..b24304b 100644 --- a/server.ts +++ b/server.ts @@ -4,6 +4,7 @@ import jwt from 'jsonwebtoken'; import bcrypt from 'bcryptjs'; import multer from 'multer'; import axios from 'axios'; +import { execSync } from 'child_process'; import { S3Client, PutObjectCommand, CreateBucketCommand, HeadBucketCommand, PutBucketPolicyCommand } from '@aws-sdk/client-s3'; import { createServer as createViteServer } from 'vite'; import { prisma } from './src/db/prisma'; @@ -1824,6 +1825,71 @@ app.put('/api/admin/courses/:id/price', authenticateToken, requireAdmin, async ( // --- VITE MIDDLEWARE / SPA FALLBACK --- async function startServer() { + try { + console.log('šŸ”„ Sincronizando banco de dados com Prisma...'); + execSync('npx prisma db push --accept-data-loss', { stdio: 'inherit' }); + console.log('āœ… Banco de dados sincronizado!'); + + // Seed test users if DB is empty + const adminCount = await prisma.user.count({ where: { email: 'sidney.gomes1989@gmail.com' } }); + if (adminCount === 0) { + console.log('🌱 Semeando usuĆ”rios de teste...'); + const defaultPassword = bcrypt.hashSync('admin123', 10); + const studentPassword = bcrypt.hashSync('aluno123', 10); + + await prisma.user.createMany({ + data: [ + { + email: 'sidney.gomes1989@gmail.com', + password: defaultPassword, + name: 'Administrador Sidney', + role: 'admin', + subscriptionStatus: 'ACTIVE', + }, + { + email: 'aluno@microtecflix.com', + password: studentPassword, + name: 'Aluno Teste', + role: 'student', + subscriptionStatus: 'ACTIVE', + }, + { + email: 'joao@microtecflix.com', + password: studentPassword, + name: 'JoĆ£o Silva (Excel)', + role: 'student', + subscriptionStatus: 'ACTIVE', + }, + { + email: 'maria@microtecflix.com', + password: studentPassword, + name: 'Maria Ativa', + role: 'student', + subscriptionStatus: 'ACTIVE', + }, + { + email: 'pedro@microtecflix.com', + password: studentPassword, + name: 'Pedro Atrasado', + role: 'student', + subscriptionStatus: 'OVERDUE', + }, + { + email: 'ana@microtecflix.com', + password: studentPassword, + name: 'Ana Cancelada', + role: 'student', + subscriptionStatus: 'CANCELED', + } + ], + skipDuplicates: true + }); + console.log('āœ… UsuĆ”rios de teste semeados com sucesso!'); + } + } catch (dbError) { + console.error('āŒ Falha ao inicializar banco de dados:', dbError); + } + if (process.env.NODE_ENV !== 'production') { const vite = await createViteServer({ server: { middlewareMode: true },