feat: enhance employee and symbol management with new features, improved UI components, and backend schema updates
This commit is contained in:
425
packages/backend/convex/seed.ts
Normal file
425
packages/backend/convex/seed.ts
Normal file
@@ -0,0 +1,425 @@
|
||||
import { internalMutation } from "./_generated/server";
|
||||
import { v } from "convex/values";
|
||||
import { hashPassword } from "./auth/utils";
|
||||
|
||||
// Dados exportados do Convex Cloud
|
||||
const simbolosData = [
|
||||
{
|
||||
descricao: "Cargo de Direção e Assessoramento Superior - 5",
|
||||
nome: "DAS-5",
|
||||
repValor: "4747.84",
|
||||
tipo: "cargo_comissionado" as const,
|
||||
valor: "5934.80",
|
||||
vencValor: "1186.96",
|
||||
},
|
||||
{
|
||||
descricao: "Cargo de Direção e Assessoramento Superior - 3",
|
||||
nome: "DAS-3",
|
||||
repValor: "6273.92",
|
||||
tipo: "cargo_comissionado" as const,
|
||||
valor: "7842.40",
|
||||
vencValor: "1568.48",
|
||||
},
|
||||
{
|
||||
descricao: "Cargo de Direção e Assessoramento Superior -2",
|
||||
nome: "DAS - 2",
|
||||
repValor: "7460.87",
|
||||
tipo: "cargo_comissionado" as const,
|
||||
valor: "9326.09",
|
||||
vencValor: "1865.22",
|
||||
},
|
||||
{
|
||||
descricao: "Cargo de Apoio e Assessoramento - 1",
|
||||
nome: "CAA-1",
|
||||
repValor: "4120.43",
|
||||
tipo: "cargo_comissionado" as const,
|
||||
valor: "5150.54",
|
||||
vencValor: "1030.11",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Direção e Assessoramento",
|
||||
nome: "FDA",
|
||||
repValor: "",
|
||||
tipo: "funcao_gratificada" as const,
|
||||
valor: "7460.87",
|
||||
vencValor: "",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Supervisão - 3",
|
||||
nome: "CAA - 3",
|
||||
repValor: "2204.36",
|
||||
tipo: "cargo_comissionado" as const,
|
||||
valor: "2755.45",
|
||||
vencValor: "551.09",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Direção e Assessoramento -1",
|
||||
nome: "FDA-1",
|
||||
repValor: "",
|
||||
tipo: "funcao_gratificada" as const,
|
||||
valor: "6273.92",
|
||||
vencValor: "",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Direção e Assessoramento -2",
|
||||
nome: "FDA -2",
|
||||
repValor: "",
|
||||
tipo: "funcao_gratificada" as const,
|
||||
valor: "5765.22",
|
||||
vencValor: "",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Direção e Assessoramento - 3",
|
||||
nome: "FDA - 3",
|
||||
repValor: "",
|
||||
tipo: "funcao_gratificada" as const,
|
||||
valor: "4747.83",
|
||||
vencValor: "",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Direção e Assessoramento - 4",
|
||||
nome: "FDA - 4",
|
||||
repValor: "",
|
||||
tipo: "funcao_gratificada" as const,
|
||||
valor: "3391.31",
|
||||
vencValor: "",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Supervisão - 1",
|
||||
nome: "FGS -1 ",
|
||||
repValor: "",
|
||||
tipo: "funcao_gratificada" as const,
|
||||
valor: "1532.08",
|
||||
vencValor: "",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Supervisão - 2",
|
||||
nome: "FGS - 2",
|
||||
repValor: "",
|
||||
tipo: "funcao_gratificada" as const,
|
||||
valor: "934.74",
|
||||
vencValor: "",
|
||||
},
|
||||
{
|
||||
descricao: "Função Gratificada de Supervisão - 2",
|
||||
nome: "CAA - 2",
|
||||
repValor: "3391.31",
|
||||
tipo: "cargo_comissionado" as const,
|
||||
valor: "4239.14",
|
||||
vencValor: "847.83",
|
||||
},
|
||||
];
|
||||
|
||||
const funcionariosData = [
|
||||
{
|
||||
admissaoData: "01/01/2000",
|
||||
cep: "50740500",
|
||||
cidade: "Recife",
|
||||
cpf: "04281554645",
|
||||
email: "kilder@kilder.com.br",
|
||||
endereco: "Rua Bernardino Alves Maia, Várzea",
|
||||
matricula: "4585",
|
||||
nascimento: "01/01/2000",
|
||||
nome: "Madson Kilder",
|
||||
rg: "123456122",
|
||||
simboloNome: "DAS-3", // Será convertido para ID
|
||||
simboloTipo: "cargo_comissionado" as const,
|
||||
telefone: "8101234564",
|
||||
uf: "PE",
|
||||
},
|
||||
{
|
||||
admissaoData: "01/01/2000",
|
||||
cep: "50740400",
|
||||
cidade: "Recife",
|
||||
cpf: "05129038401",
|
||||
email: "princesalves@gmail.com",
|
||||
endereco: "Rua Deputado Cunha Rabelo, Várzea",
|
||||
matricula: "123456",
|
||||
nascimento: "05/01/1985",
|
||||
nome: "Princes Alves rocha wanderley",
|
||||
rg: "639541200",
|
||||
simboloNome: "FDA-1", // Será convertido para ID
|
||||
simboloTipo: "funcao_gratificada" as const,
|
||||
telefone: "81123456455",
|
||||
uf: "PE",
|
||||
},
|
||||
{
|
||||
admissaoData: "01/10/2025",
|
||||
cep: "50740400",
|
||||
cidade: "Recife",
|
||||
cpf: "06102637496",
|
||||
email: "deyvison.wanderley@gmail.com",
|
||||
endereco: "Rua Deputado Cunha Rabelo, Várzea",
|
||||
matricula: "256220",
|
||||
nascimento: "16/03/1985",
|
||||
nome: "Deyvison de França Wanderley",
|
||||
rg: "6347974",
|
||||
simboloNome: "CAA-1", // Será convertido para ID
|
||||
simboloTipo: "cargo_comissionado" as const,
|
||||
telefone: "81994235551",
|
||||
uf: "PE",
|
||||
},
|
||||
];
|
||||
|
||||
const solicitacoesAcessoData = [
|
||||
{
|
||||
dataResposta: 1761445098933,
|
||||
dataSolicitacao: 1761445038329,
|
||||
email: "severino@gmail.com",
|
||||
matricula: "3231",
|
||||
nome: "Severino Gates",
|
||||
observacoes: "Aprovação realizada por Deyvison",
|
||||
status: "aprovado" as const,
|
||||
telefone: "(81) 9942-3551",
|
||||
},
|
||||
{
|
||||
dataSolicitacao: 1761445187258,
|
||||
email: "michaeljackson@gmail.com",
|
||||
matricula: "123321",
|
||||
nome: "Michael Jackson",
|
||||
status: "pendente" as const,
|
||||
telefone: "(81) 99423-5551",
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* Seed inicial do banco de dados com os dados exportados do Convex Cloud
|
||||
*/
|
||||
export const seedDatabase = internalMutation({
|
||||
args: {},
|
||||
returns: v.null(),
|
||||
handler: async (ctx) => {
|
||||
console.log("🌱 Iniciando seed do banco de dados...");
|
||||
|
||||
// 1. Criar Roles
|
||||
console.log("🔐 Criando roles...");
|
||||
const roleAdmin = await ctx.db.insert("roles", {
|
||||
nome: "admin",
|
||||
descricao: "Administrador do Sistema",
|
||||
nivel: 0,
|
||||
});
|
||||
console.log(" ✅ Role criada: admin");
|
||||
|
||||
const roleTI = await ctx.db.insert("roles", {
|
||||
nome: "ti",
|
||||
descricao: "Tecnologia da Informação",
|
||||
nivel: 1,
|
||||
setor: "ti",
|
||||
});
|
||||
console.log(" ✅ Role criada: ti");
|
||||
|
||||
const roleUsuarioAvancado = await ctx.db.insert("roles", {
|
||||
nome: "usuario_avancado",
|
||||
descricao: "Usuário Avançado",
|
||||
nivel: 2,
|
||||
});
|
||||
console.log(" ✅ Role criada: usuario_avancado");
|
||||
|
||||
const roleUsuario = await ctx.db.insert("roles", {
|
||||
nome: "usuario",
|
||||
descricao: "Usuário Comum",
|
||||
nivel: 3,
|
||||
});
|
||||
console.log(" ✅ Role criada: usuario");
|
||||
|
||||
// 2. Criar usuário admin inicial
|
||||
console.log("👤 Criando usuário admin...");
|
||||
const senhaAdmin = await hashPassword("Admin@123");
|
||||
await ctx.db.insert("usuarios", {
|
||||
matricula: "0000",
|
||||
senhaHash: senhaAdmin,
|
||||
nome: "Administrador",
|
||||
email: "admin@sgse.pe.gov.br",
|
||||
roleId: roleAdmin as any,
|
||||
ativo: true,
|
||||
primeiroAcesso: false,
|
||||
criadoEm: Date.now(),
|
||||
atualizadoEm: Date.now(),
|
||||
});
|
||||
console.log(" ✅ Usuário admin criado (matrícula: 0000, senha: Admin@123)");
|
||||
|
||||
// 3. Inserir símbolos
|
||||
console.log("📝 Inserindo símbolos...");
|
||||
const simbolosMap = new Map<string, string>();
|
||||
|
||||
for (const simbolo of simbolosData) {
|
||||
const id = await ctx.db.insert("simbolos", {
|
||||
descricao: simbolo.descricao,
|
||||
nome: simbolo.nome,
|
||||
repValor: simbolo.repValor,
|
||||
tipo: simbolo.tipo,
|
||||
valor: simbolo.valor,
|
||||
vencValor: simbolo.vencValor,
|
||||
});
|
||||
simbolosMap.set(simbolo.nome, id);
|
||||
console.log(` ✅ Símbolo criado: ${simbolo.nome}`);
|
||||
}
|
||||
|
||||
// 4. Inserir funcionários
|
||||
console.log("👥 Inserindo funcionários...");
|
||||
const funcionariosMap = new Map<string, string>();
|
||||
for (const funcionario of funcionariosData) {
|
||||
const simboloId = simbolosMap.get(funcionario.simboloNome);
|
||||
if (!simboloId) {
|
||||
console.error(` ❌ Símbolo não encontrado: ${funcionario.simboloNome}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const funcId = await ctx.db.insert("funcionarios", {
|
||||
admissaoData: funcionario.admissaoData,
|
||||
cep: funcionario.cep,
|
||||
cidade: funcionario.cidade,
|
||||
cpf: funcionario.cpf,
|
||||
email: funcionario.email,
|
||||
endereco: funcionario.endereco,
|
||||
matricula: funcionario.matricula,
|
||||
nascimento: funcionario.nascimento,
|
||||
nome: funcionario.nome,
|
||||
rg: funcionario.rg,
|
||||
simboloId: simboloId as any,
|
||||
simboloTipo: funcionario.simboloTipo,
|
||||
telefone: funcionario.telefone,
|
||||
uf: funcionario.uf,
|
||||
});
|
||||
funcionariosMap.set(funcionario.matricula, funcId);
|
||||
console.log(` ✅ Funcionário criado: ${funcionario.nome}`);
|
||||
}
|
||||
|
||||
// 5. Criar usuários para os funcionários
|
||||
console.log("👤 Criando usuários para funcionários...");
|
||||
for (const funcionario of funcionariosData) {
|
||||
const funcId = funcionariosMap.get(funcionario.matricula);
|
||||
if (!funcId) continue;
|
||||
|
||||
const senhaInicial = await hashPassword("Mudar@123");
|
||||
await ctx.db.insert("usuarios", {
|
||||
matricula: funcionario.matricula,
|
||||
senhaHash: senhaInicial,
|
||||
nome: funcionario.nome,
|
||||
email: funcionario.email,
|
||||
funcionarioId: funcId as any,
|
||||
roleId: roleUsuario as any,
|
||||
ativo: true,
|
||||
primeiroAcesso: true,
|
||||
criadoEm: Date.now(),
|
||||
atualizadoEm: Date.now(),
|
||||
});
|
||||
console.log(` ✅ Usuário criado: ${funcionario.nome} (senha: Mudar@123)`);
|
||||
}
|
||||
|
||||
// 6. Inserir solicitações de acesso
|
||||
console.log("📋 Inserindo solicitações de acesso...");
|
||||
for (const solicitacao of solicitacoesAcessoData) {
|
||||
await ctx.db.insert("solicitacoesAcesso", {
|
||||
dataResposta: solicitacao.dataResposta,
|
||||
dataSolicitacao: solicitacao.dataSolicitacao,
|
||||
email: solicitacao.email,
|
||||
matricula: solicitacao.matricula,
|
||||
nome: solicitacao.nome,
|
||||
observacoes: solicitacao.observacoes,
|
||||
status: solicitacao.status,
|
||||
telefone: solicitacao.telefone,
|
||||
});
|
||||
console.log(` ✅ Solicitação criada: ${solicitacao.nome}`);
|
||||
}
|
||||
|
||||
console.log("✨ Seed concluído com sucesso!");
|
||||
console.log("");
|
||||
console.log("🔑 CREDENCIAIS DE ACESSO:");
|
||||
console.log(" Admin: matrícula 0000, senha Admin@123");
|
||||
console.log(" Funcionários: usar matrícula, senha Mudar@123");
|
||||
return null;
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Limpar todos os dados do banco
|
||||
*/
|
||||
export const clearDatabase = internalMutation({
|
||||
args: {},
|
||||
returns: v.null(),
|
||||
handler: async (ctx) => {
|
||||
console.log("🗑️ Limpando banco de dados...");
|
||||
|
||||
// Limpar logs de acesso
|
||||
const logs = await ctx.db.query("logsAcesso").collect();
|
||||
for (const log of logs) {
|
||||
await ctx.db.delete(log._id);
|
||||
}
|
||||
console.log(` ✅ ${logs.length} logs de acesso removidos`);
|
||||
|
||||
// Limpar sessões
|
||||
const sessoes = await ctx.db.query("sessoes").collect();
|
||||
for (const sessao of sessoes) {
|
||||
await ctx.db.delete(sessao._id);
|
||||
}
|
||||
console.log(` ✅ ${sessoes.length} sessões removidas`);
|
||||
|
||||
// Limpar usuários
|
||||
const usuarios = await ctx.db.query("usuarios").collect();
|
||||
for (const usuario of usuarios) {
|
||||
await ctx.db.delete(usuario._id);
|
||||
}
|
||||
console.log(` ✅ ${usuarios.length} usuários removidos`);
|
||||
|
||||
// Limpar funcionários
|
||||
const funcionarios = await ctx.db.query("funcionarios").collect();
|
||||
for (const funcionario of funcionarios) {
|
||||
await ctx.db.delete(funcionario._id);
|
||||
}
|
||||
console.log(` ✅ ${funcionarios.length} funcionários removidos`);
|
||||
|
||||
// Limpar símbolos
|
||||
const simbolos = await ctx.db.query("simbolos").collect();
|
||||
for (const simbolo of simbolos) {
|
||||
await ctx.db.delete(simbolo._id);
|
||||
}
|
||||
console.log(` ✅ ${simbolos.length} símbolos removidos`);
|
||||
|
||||
// Limpar solicitações de acesso
|
||||
const solicitacoes = await ctx.db.query("solicitacoesAcesso").collect();
|
||||
for (const solicitacao of solicitacoes) {
|
||||
await ctx.db.delete(solicitacao._id);
|
||||
}
|
||||
console.log(` ✅ ${solicitacoes.length} solicitações removidas`);
|
||||
|
||||
// Limpar menu-permissões
|
||||
const menuPermissoes = await ctx.db.query("menuPermissoes").collect();
|
||||
for (const mp of menuPermissoes) {
|
||||
await ctx.db.delete(mp._id);
|
||||
}
|
||||
console.log(` ✅ ${menuPermissoes.length} menu-permissões removidas`);
|
||||
|
||||
// Limpar menu-permissões personalizadas
|
||||
const menuPermissoesPersonalizadas = await ctx.db.query("menuPermissoesPersonalizadas").collect();
|
||||
for (const mpp of menuPermissoesPersonalizadas) {
|
||||
await ctx.db.delete(mpp._id);
|
||||
}
|
||||
console.log(` ✅ ${menuPermissoesPersonalizadas.length} menu-permissões personalizadas removidas`);
|
||||
|
||||
// Limpar role-permissões
|
||||
const rolePermissoes = await ctx.db.query("rolePermissoes").collect();
|
||||
for (const rp of rolePermissoes) {
|
||||
await ctx.db.delete(rp._id);
|
||||
}
|
||||
console.log(` ✅ ${rolePermissoes.length} role-permissões removidas`);
|
||||
|
||||
// Limpar permissões
|
||||
const permissoes = await ctx.db.query("permissoes").collect();
|
||||
for (const permissao of permissoes) {
|
||||
await ctx.db.delete(permissao._id);
|
||||
}
|
||||
console.log(` ✅ ${permissoes.length} permissões removidas`);
|
||||
|
||||
// Limpar roles
|
||||
const roles = await ctx.db.query("roles").collect();
|
||||
for (const role of roles) {
|
||||
await ctx.db.delete(role._id);
|
||||
}
|
||||
console.log(` ✅ ${roles.length} roles removidas`);
|
||||
|
||||
console.log("✨ Banco de dados limpo!");
|
||||
return null;
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user