Initial commit: CMS completo com gerenciamento de leads e personalização de tema
This commit is contained in:
71
frontend/prisma/schema.prisma
Normal file
71
frontend/prisma/schema.prisma
Normal file
@@ -0,0 +1,71 @@
|
||||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
// Modelo de Usuário (para o Painel Admin)
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
email String @unique
|
||||
password String
|
||||
name String?
|
||||
avatar String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
// Modelo de Projeto
|
||||
model Project {
|
||||
id String @id @default(cuid())
|
||||
title String
|
||||
category String
|
||||
client String?
|
||||
status String @default("Em andamento") // "Em andamento", "Concluído"
|
||||
completionDate DateTime?
|
||||
description String? @db.Text
|
||||
coverImage String?
|
||||
galleryImages String[]
|
||||
featured Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
// Modelo de Serviço
|
||||
model Service {
|
||||
id String @id @default(cuid())
|
||||
title String
|
||||
icon String
|
||||
shortDescription String?
|
||||
fullDescription String? @db.Text
|
||||
active Boolean @default(true)
|
||||
order Int @default(0)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
// Modelo de Mensagem (Contato)
|
||||
model Message {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
email String
|
||||
subject String
|
||||
message String @db.Text
|
||||
status String @default("Nova") // "Nova", "Lida", "Respondida"
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
// Modelo de Conteúdo de Página (para textos editáveis)
|
||||
model PageContent {
|
||||
id String @id @default(cuid())
|
||||
slug String @unique // "home", "sobre", "contato"
|
||||
content Json
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
32
frontend/prisma/seed.js
Normal file
32
frontend/prisma/seed.js
Normal file
@@ -0,0 +1,32 @@
|
||||
const { PrismaClient } = require('../src/generated/client');
|
||||
const bcrypt = require('bcryptjs');
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
const email = 'admin@occto.com';
|
||||
const password = 'admin'; // Senha inicial simples
|
||||
const hashedPassword = await bcrypt.hash(password, 10);
|
||||
|
||||
const user = await prisma.user.upsert({
|
||||
where: { email },
|
||||
update: {},
|
||||
create: {
|
||||
email,
|
||||
name: 'Admin Occto',
|
||||
password: hashedPassword,
|
||||
},
|
||||
});
|
||||
|
||||
console.log({ user });
|
||||
}
|
||||
|
||||
main()
|
||||
.then(async () => {
|
||||
await prisma.$disconnect();
|
||||
})
|
||||
.catch(async (e) => {
|
||||
console.error(e);
|
||||
await prisma.$disconnect();
|
||||
process.exit(1);
|
||||
});
|
||||
208
frontend/prisma/seed.ts
Normal file
208
frontend/prisma/seed.ts
Normal file
@@ -0,0 +1,208 @@
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import * as bcrypt from 'bcryptjs';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
console.log('🌱 Iniciando seed de dados iniciais...\n');
|
||||
|
||||
// 1. Criar usuário admin
|
||||
const email = 'admin@occto.com';
|
||||
const password = 'admin';
|
||||
const hashedPassword = await bcrypt.hash(password, 10);
|
||||
|
||||
const user = await prisma.user.upsert({
|
||||
where: { email },
|
||||
update: {},
|
||||
create: {
|
||||
email,
|
||||
name: 'Admin Occto',
|
||||
password: hashedPassword,
|
||||
},
|
||||
});
|
||||
|
||||
console.log('✅ Usuário admin criado:', user.email);
|
||||
|
||||
// 2. Seed para página Home
|
||||
const homePage = await prisma.pageContent.upsert({
|
||||
where: { slug: 'home' },
|
||||
update: {},
|
||||
create: {
|
||||
slug: 'home',
|
||||
content: {
|
||||
hero: {
|
||||
title: 'Engenharia de Excelência para Seus Projetos',
|
||||
subtitle: 'Soluções completas em engenharia veicular, mecânica e segurança do trabalho com mais de 15 anos de experiência.',
|
||||
buttonText: 'Conheça Nossos Serviços'
|
||||
},
|
||||
features: {
|
||||
pretitle: 'Por que nos escolher',
|
||||
title: 'Nossos Diferenciais',
|
||||
items: [
|
||||
{
|
||||
icon: 'ri-shield-star-line',
|
||||
title: 'Qualidade Garantida',
|
||||
description: 'Processos certificados e equipe altamente qualificada para garantir excelência em cada projeto.'
|
||||
},
|
||||
{
|
||||
icon: 'ri-settings-4-line',
|
||||
title: 'Soluções Personalizadas',
|
||||
description: 'Atendimento sob medida para as necessidades específicas de cada cliente e projeto.'
|
||||
},
|
||||
{
|
||||
icon: 'ri-truck-line',
|
||||
title: 'Especialização Veicular',
|
||||
description: 'Expertise consolidada em engenharia automotiva e de frotas, com foco em segurança e eficiência.'
|
||||
}
|
||||
]
|
||||
},
|
||||
services: {
|
||||
pretitle: 'Nossos Serviços',
|
||||
title: 'O Que Fazemos',
|
||||
items: [
|
||||
{
|
||||
icon: 'ri-draft-line',
|
||||
title: 'Projetos Técnicos',
|
||||
description: 'Desenvolvimento de projetos de engenharia com documentação completa e aprovações necessárias.'
|
||||
},
|
||||
{
|
||||
icon: 'ri-file-paper-2-line',
|
||||
title: 'Laudos e Perícias',
|
||||
description: 'Emissão de laudos técnicos e realização de perícias especializadas em engenharia.'
|
||||
},
|
||||
{
|
||||
icon: 'ri-alert-line',
|
||||
title: 'Segurança do Trabalho',
|
||||
description: 'Implementação de normas e procedimentos de segurança conforme legislação vigente.'
|
||||
},
|
||||
{
|
||||
icon: 'ri-truck-fill',
|
||||
title: 'Engenharia Veicular',
|
||||
description: 'Modificações, adaptações e adequações de veículos comerciais e especiais.'
|
||||
}
|
||||
]
|
||||
},
|
||||
about: {
|
||||
pretitle: 'Conheça a OCCTO',
|
||||
title: 'Sobre Nós',
|
||||
description: 'Com mais de 15 anos de experiência, a OCCTO Engenharia se consolidou como referência em soluções de engenharia para o setor automotivo e industrial. Nossa equipe de especialistas está comprometida em entregar projetos de excelência, sempre priorizando segurança, qualidade e inovação.',
|
||||
highlights: [
|
||||
'Mais de 500 clientes atendidos',
|
||||
'Equipe técnica altamente qualificada',
|
||||
'Parceiro oficial de grandes empresas'
|
||||
]
|
||||
},
|
||||
testimonials: {
|
||||
pretitle: 'Depoimentos',
|
||||
title: 'O Que Dizem Nossos Clientes',
|
||||
items: [
|
||||
{
|
||||
name: 'Ricardo Mendes',
|
||||
role: 'Gerente de Frota - Coca-Cola',
|
||||
text: 'Excelente trabalho! A OCCTO realizou todas as adequações da nossa frota com qualidade e dentro do prazo. Equipe muito profissional.'
|
||||
},
|
||||
{
|
||||
name: 'Fernanda Costa',
|
||||
role: 'Diretora de Operações - Log Express',
|
||||
text: 'Parceria de confiança. Os projetos são sempre bem elaborados e atendem todas as nossas necessidades técnicas e regulatórias.'
|
||||
},
|
||||
{
|
||||
name: 'Paulo Oliveira',
|
||||
role: 'Engenheiro Chefe - AutoTrans',
|
||||
text: 'Conhecimento técnico incomparável. A consultoria da OCCTO foi fundamental para otimizar nossos processos e garantir conformidade total.'
|
||||
}
|
||||
]
|
||||
},
|
||||
stats: {
|
||||
clients: '500+',
|
||||
projects: '1200+',
|
||||
years: '15'
|
||||
},
|
||||
cta: {
|
||||
title: 'Pronto para tirar seu projeto do papel?',
|
||||
text: 'Entre em contato com nossa equipe de especialistas e solicite um orçamento sem compromisso.',
|
||||
button: 'Fale Conosco'
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
console.log('✅ Página Home criada:', homePage.slug);
|
||||
|
||||
// 3. Seed para página Sobre
|
||||
const sobrePage = await prisma.pageContent.upsert({
|
||||
where: { slug: 'sobre' },
|
||||
update: {},
|
||||
create: {
|
||||
slug: 'sobre',
|
||||
content: {
|
||||
hero: {
|
||||
title: 'Sobre a OCCTO Engenharia',
|
||||
subtitle: 'Excelência técnica e comprometimento com resultados desde 2009'
|
||||
},
|
||||
mission: {
|
||||
title: 'Nossa Missão',
|
||||
text: 'Fornecer soluções de engenharia de alta qualidade, garantindo segurança, eficiência e conformidade em todos os projetos que realizamos.'
|
||||
},
|
||||
vision: {
|
||||
title: 'Nossa Visão',
|
||||
text: 'Ser referência nacional em engenharia veicular e segurança do trabalho, reconhecidos pela excelência técnica e inovação.'
|
||||
},
|
||||
values: {
|
||||
title: 'Nossos Valores',
|
||||
items: [
|
||||
'Compromisso com a qualidade',
|
||||
'Ética profissional',
|
||||
'Inovação constante',
|
||||
'Respeito ao cliente',
|
||||
'Segurança em primeiro lugar'
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
console.log('✅ Página Sobre criada:', sobrePage.slug);
|
||||
|
||||
// 4. Seed para página Contato
|
||||
const contatoPage = await prisma.pageContent.upsert({
|
||||
where: { slug: 'contato' },
|
||||
update: {},
|
||||
create: {
|
||||
slug: 'contato',
|
||||
content: {
|
||||
hero: {
|
||||
title: 'Entre em Contato',
|
||||
subtitle: 'Nossa equipe está pronta para atender suas necessidades'
|
||||
},
|
||||
info: {
|
||||
address: {
|
||||
street: 'Rua Exemplo, 123',
|
||||
neighborhood: 'Centro',
|
||||
city: 'São Paulo',
|
||||
state: 'SP',
|
||||
zip: '01234-567'
|
||||
},
|
||||
phone: '(11) 9999-9999',
|
||||
email: 'contato@occto.com.br',
|
||||
hours: 'Segunda a Sexta: 8h às 18h'
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
console.log('✅ Página Contato criada:', contatoPage.slug);
|
||||
|
||||
console.log('\n🎉 Seed concluído com sucesso!');
|
||||
console.log('📊 Total: 1 usuário + 3 páginas criadas\n');
|
||||
}
|
||||
|
||||
main()
|
||||
.then(async () => {
|
||||
await prisma.$disconnect();
|
||||
})
|
||||
.catch(async (e) => {
|
||||
console.error(e);
|
||||
await prisma.$disconnect();
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user