Skip to content

codeFumaca/EndemiLog-API

Repository files navigation

Nest Logo

API (NestJS + Prisma + MySQL)

API REST construída com NestJS, Prisma e MySQL para gerenciar usuários, residências (properties), blocos (blocks), bairros (neighborhoods) e registros (registry).

Stack

  • Node.js + TypeScript
  • NestJS 10
  • Prisma ORM
  • MySQL
  • Jest (tests)

Pré‑requisitos

  • Node.js 18+ (recomendado)
  • MySQL 8+ em execução

Configuração do ambiente

  1. Crie um arquivo .env na raiz do projeto com a variável de conexão do banco:
# .env
NODE_ENV=
SECRET=
DATABASE_URL="mysql://usuario:senha@localhost:3306/nome_do_banco"
  1. Instale as dependências:
npm install
  1. Gere o Prisma Client e aplique o schema ao banco (migrate ou push):
# Gera o client
npx prisma generate

# Cria/aplica migração (ambiente de dev)
npx prisma migrate dev --name init

# Alternativa rápida (sincroniza sem histórico de migrações)
# npx prisma db push

Executar a aplicação

# Desenvolvimento (watch)
npm run start:dev

# Execução simples
npm run start

# Produção (após build)
npm run build
npm run start:prod

Scripts úteis

# Lint/format
npm run lint
npm run format

# Testes
npm run test          # unit
npm run test:e2e      # e2e
npm run test:cov      # cobertura

Estrutura do projeto

prisma/
  schema.prisma
src/
  app.module.ts
  main.ts
  auth/
    auth.controller.ts
    auth.guard.ts
    auth.module.ts
    auth.service.ts
    dto/
      signIn.dto.ts
  blocks/
    blocks.controller.ts
    blocks.module.ts
    blocks.service.ts
    dto/
      create-block.dto.ts
      update-block.dto.ts
  database/
    prisma.service.ts
  dto/
    FindOneParams.dto.ts
  middlewares/
    logger.middleware.ts
  registrations/
    registrations.controller.ts
    registrations.module.ts
    registrations.service.ts
    dto/
      create-registration.dto.ts
      update-registration.dto.ts
  residences/
    residences.controller.ts
    residences.module.ts
    residences.service.ts
    dto/
      create-residence.dto.ts
      update-residence.dto.ts
  users/
    users.controller.ts
    users.module.ts
    users.service.ts
    dto/
      create-user.dto.ts
      get-user.dto.ts
      update-user.dto.ts

Banco de dados (Prisma)

Modelos principais no schema.prisma:

  • user (campos: id, username, password, email, name, role, ...)
  • propety (residência/imóvel, com type via enum propetyType e relacionamento com Block)
  • Block (com bairro neighborhood e propriedades)
  • neighborhood
  • registry (registros com vários campos numéricos e relacionamentos opcionais)

Após qualquer alteração no schema.prisma, rode:

npx prisma generate
npx prisma migrate dev --name <descricao>

Rotas e paginação/filtragem

Alguns controladores expõem endpoints REST (ex.: users, residences, blocks, registrations).

Exemplo do padrão de listagem com paginação e filtros (vide residences.controller.ts):

GET /residences?skip=0&take=10&where={"ativo":true}&orderBy={"id":"desc"}

Parâmetros suportados (query string):

  • skip: número de registros para pular (offset)
  • take: quantidade de registros para retornar (limit)
  • cursor: JSON ou id para cursor (p.ex.: {"id": 15} ou 15 se tratado no controller)
  • where: JSON com filtros compatíveis com Prisma (ex.: { "ativo": true })
  • orderBy: JSON com ordenação (ex.: { "id": "desc" })

Observação: where, orderBy e cursor são strings JSON e são parseados no controller.

Segurança

  • Senhas de usuários são hasheadas com bcrypt no fluxo de criação (users.controller.ts).
  • Ao buscar usuários, prefira usar select no Prisma para não expor password na resposta.

Dicas de troubleshooting

  • Erro de conexão: verifique DATABASE_URL no .env e se o MySQL está acessível.
  • Mudou o schema e o client não reflete: rode npx prisma generate.
  • Migração com erro: ajuste o schema.prisma e rode novamente npx prisma migrate dev.

About

API REST em NestJS + Prisma + MySQL para o app EndemiLog

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published