Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SISAR — Sistema de Controle Aprova Rápido

Aplicação fullstack em um único app Next.js: as telas e a API (/api/*) rodam no mesmo processo, no mesmo domínio e porta (sem CORS). O antigo backend NestJS foi incorporado ao app Next.js.

app/                    App Next.js (telas + rota /api/[...path])
components/             Componentes visuais compartilhados
services/               Acesso à API e funções do servidor
src/                    regras de negócio, rotas, autenticação e agendador
  <modulo>/              <modulo>.service.ts + <modulo>.routes.ts (+ tests)
  container.ts           instâncias dos services (substitui a injeção do Nest)
  rotas.ts               registro de todas as rotas
prisma/                 schema, migrações, seed e scripts de dados (banco SISAR)
sgu/                    schema do banco SGU (somente leitura)
docs/                   Plano e histórico da migração do NestJS para o Next

Requisitos

  • Node 20+ (testado com 24), npm 11
  • MySQL 8 (banco sisar) e acesso de leitura ao SGU

Configuração

Crie .env.local na raiz (não versionado). É a única fonte de variáveis: o app e os scripts de banco leem este arquivo. Veja example.env para a lista completa.

Variável Uso
DATABASE_URL, SGU_DATABASE_URL bancos SISAR e SGU
JWT_SECRET, RT_SECRET assinatura dos tokens de acesso (15 min) e refresh (7 dias)
AUTH_SECRET, AUTH_URL next-auth (sessão das telas)
NEXT_PUBLIC_API_URL URL da API integrada ao Next, com barra final (ex.: http://localhost:3098/api/); é embutida no build
ENVIRONMENT local aceita o login de qualquer usuário já cadastrado, sem consultar o serviço de autenticação
LDAP_SERVER, LDAP_DOMAIN, LDAP_BASE, USER_LDAP, PASS_LDAP login por LDAP (não local)
LDAP_API_URL base da API de autenticação LDAP (http://api.smul.pmsp), usada para validar login/senha e buscar dados de novos usuários
API_FERIADOS_URL consulta de feriados para cálculo de dias úteis
RESEND_API_KEY, RESEND_FROM envio dos relatórios agendados por e-mail
AGENDADOR off desliga as tarefas agendadas nesta instância

Desenvolvimento

npm install            # instala e gera os clientes Prisma (postinstall)
npm run dev            # app fullstack Next (telas + API) em http://localhost:3098
npm test               # testes da API (Jest)
npm run lint

O repositório usa um único package.json na raiz, sem npm workspaces ou pacote de API separado. O produto executado em desenvolvimento e produção é um único processo Next.js na raiz. Banco (a partir da raiz, usando o .env.local do app):

npm run db:migrate:dev                      # cria/aplica migração em desenvolvimento
npm run db:migrate:deploy                   # aplica migrações existentes
npm run db:seed                             # dados iniciais, categorias e tipos de alvará
npm run prisma:generate                     # regenera clientes (com os servidores parados)

O seed cadastra ou atualiza, de forma idempotente, as categorias R, HIS, HMP e CAEPP, os pareceres Ausência de Documentos e Não Cumprimento de Requisito, além dos tipos de alvará e seus prazos institucionais. Ele não remove registros existentes.

Produção (servidor próprio)

Veja docs/deploy.md.

Tarefas agendadas

Iniciadas pelo instrumentation.ts quando o servidor sobe: reconsideração de admissibilidade (todo dia 06:00) e envio de relatórios agendados (a cada minuto). Com mais de uma instância, o envio de relatórios não duplica (reivindicação atômica no banco); desligue as demais com AGENDADOR=off se preferir uma só executando.

Adicionando uma funcionalidade na API

  1. src/<modulo>/<modulo>.service.ts (recebe PrismaService etc. no construtor).
  2. <modulo>.routes.ts com controller('<prefixo>', [rota.get(...), ...]); use recursos: [...] para a permissão exigida (sem isso exige o recurso processos; ['*'] = qualquer logado; publica: true = sem login).
  3. Instancie o service em container.ts, registre em dependencias.ts e as rotas em rotas.ts. O teste tests/container.spec.ts avisa se algo ficar fora de sincronia.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages