Skip to content

darsonbjf/request-forms-platform

Repository files navigation

Request Forms Platform

Validate Request Forms Platform Node.js PostgreSQL License: MIT

Aplicação full-stack para coleta e gestão de solicitações via formulário. O projeto contém um frontend público, um painel administrativo e uma API Node.js com Prisma e PostgreSQL.

Projeto criado e publicado originalmente em dezembro de 2024. Atualmente, esta versão foi adaptada para portfólio, com arquitetura reorganizada, documentação pública e remoção de credenciais, dumps e referências de ambiente interno.

O objetivo atual deste repositório é servir como aplicação de referência para um fluxo DevOps end-to-end: build, teste, imagem Docker, scan de segurança, deploy Kubernetes/GitOps e observabilidade.

Componentes

  • apps/web/: frontend público em React, Chakra UI e Vite.
  • apps/admin/: painel administrativo em React, Chakra UI e Vite.
  • apps/api/: API Express com Prisma, autenticação JWT e upload de anexos.
  • infra/observability/: configurações opcionais de métricas, logs e tracing.
  • scripts/: automações auxiliares para imagens e deploy local.
  • docker-compose-dev.yml: ambiente local com PostgreSQL, backend e frontends.

O que este projeto demonstra

  • Aplicação full-stack containerizada com frontend público, painel admin e API.
  • API Express com Prisma, PostgreSQL, autenticação JWT, upload de anexos e seed administrativo opcional.
  • Endpoints operacionais para liveness, readiness e métricas Prometheus.
  • Dockerfiles separados para API, web e admin, com .dockerignore e healthchecks.
  • CI com instalação, validação Prisma, testes de API, build frontend, Docker Compose config, build de imagens e Trivy.
  • Checks locais para bloquear .env, secrets, dumps, chaves e marcadores internos antes de publicar.

Segurança para uso público

Este repositório não deve conter segredos reais, dumps de banco, chaves de serviços externos ou dados de ambiente interno. Use .env.example como base e mantenha .env fora do Git.

Se você clonar uma versão antiga que continha segredos, rotacione as credenciais antes de tornar o repositório público.

Requisitos

  • Node.js 18+
  • npm 9+
  • Docker e Docker Compose, opcional para ambiente local completo
  • PostgreSQL 15+ se executar sem Docker

Execução Local Com Docker

cp .env.example .env
docker compose -f docker-compose-dev.yml up --build

Serviços padrão:

  • Frontend público: http://localhost:5173
  • Painel admin: http://localhost:5174
  • API: http://localhost:3001/forms
  • PostgreSQL: localhost:15432 no host, postgres:5432 na rede Docker

O ambiente demo sobe com catalogo inicial para os selects do formulario e com usuario administrativo:

  • Usuario: admin
  • Senha: valor de ADMIN_PASSWORD, por padrao demo-admin-password

O reCAPTCHA fica desabilitado por padrao na demo local. Para ativa-lo, informe uma chave publica valida em VITE_RECAPTCHA_SITE_KEY e a chave privada correspondente em SECRET_KEY.

Execução Sem Docker

Backend:

cd apps/api
npm install
npm run prisma:generate
npm run prisma:migrate
npm run dev

Frontend público:

cd apps/web
npm install
npm run dev

Painel admin:

cd apps/admin
npm install
npm run dev

Scripts Úteis

Na raiz:

npm run validate
npm run build
npm run test:api
npm run build:user
npm run build:admin
npm run prisma:validate
make public-check
make security-check

Build das imagens Docker:

REGISTRY_NAMESPACE=seu-usuario TAG=latest ./scripts/build-images.sh

Endpoints Operacionais

Com API_PREFIX=/forms, a API expõe:

  • GET /livez: liveness sem dependência externa.
  • GET /health: health básico.
  • GET /readyz: readiness com checagem de banco via Prisma.
  • GET /metrics: métricas Prometheus.
  • GET /forms/health, /forms/livez e /forms/readyz: equivalentes com prefixo para compatibilidade com ingress/API gateway.

Variáveis Importantes

  • DATABASE_URL: conexão PostgreSQL usada pelo Prisma.
  • JWT_SECRET: chave de assinatura dos tokens do painel administrativo.
  • ADMIN_PASSWORD: senha inicial usada pelo seed opcional.
  • SEED_DEMO_DATA: quando true, popula catalogos demonstrativos do formulario.
  • VITE_BASE_URL: URL base da API usada pelos frontends.
  • VITE_API_PREFIX: prefixo das rotas da API, padrão /forms.
  • VITE_RECAPTCHA_SITE_KEY: chave pública do reCAPTCHA.
  • VITE_REQUIRED_FILE_KEY_*: nomes usados pela API para mapear anexos exigidos no formulário.
  • SECRET_KEY: chave privada do reCAPTCHA no backend.

Publicação

Antes de publicar:

  1. Confirme que .env, mysecrets.yml, dumps SQL e builds não estão versionados.
  2. Rode npm run build.
  3. Rode npm run prisma:validate.
  4. Rode npm run test:api.
  5. Rode make public-check.
  6. Rode make security-check, quando Docker estiver disponível.

Evidências

Consulte docs/evidence.md para a lista de validações reproduzíveis e para o papel deste projeto no demo DevOps end-to-end.

About

Full-stack reference app for DevOps pipelines with React, Express, Prisma, PostgreSQL, Docker, CI validation and observability endpoints.

Topics

Resources

License

Security policy

Stars

0 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors