API REST construída com NestJS, Prisma e MySQL para gerenciar usuários, residências (properties), blocos (blocks), bairros (neighborhoods) e registros (registry).
- Node.js + TypeScript
- NestJS 10
- Prisma ORM
- MySQL
- Jest (tests)
- Node.js 18+ (recomendado)
- MySQL 8+ em execução
- Crie um arquivo
.envna 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"- Instale as dependências:
npm install- 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# Desenvolvimento (watch)
npm run start:dev
# Execução simples
npm run start
# Produção (após build)
npm run build
npm run start:prod# Lint/format
npm run lint
npm run format
# Testes
npm run test # unit
npm run test:e2e # e2e
npm run test:cov # coberturaprisma/
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
Modelos principais no schema.prisma:
user(campos: id, username, password, email, name, role, ...)propety(residência/imóvel, comtypevia enumpropetyTypee relacionamento comBlock)Block(com bairroneighborhoode propriedades)neighborhoodregistry(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>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}ou15se 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.
- Senhas de usuários são hasheadas com
bcryptno fluxo de criação (users.controller.ts). - Ao buscar usuários, prefira usar
selectno Prisma para não exporpasswordna resposta.
- Erro de conexão: verifique
DATABASE_URLno.enve 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.prismae rode novamentenpx prisma migrate dev.