Este repositório contém a API back-end para o sistema de gerenciamento da delicatessen Arte Del Gusto. Construída com Node.js, Express e TypeScript, esta API robusta serve como o motor lógico central, lidando com gerenciamento de dados, regras de negócio e autenticação tanto para o painel de administração web quanto para o aplicativo móvel utilizado pela equipe.
O sistema facilita o gerenciamento eficiente de usuários, categorias de produtos, produtos (incluindo upload de imagens) e o ciclo de vida completo dos pedidos, desde a criação até a conclusão.
arte-del-gusto.mp4
- Front-End (Painel Web): https://github.com/Antonio-Savio/Arte-del-Gusto-front-end
- Aplicativo Móvel: https://github.com/Antonio-Savio/Arte-del-Gusto-mobile
- Design de API RESTful: Endpoints limpos e previsíveis para gerenciamento de recursos.
- TypeScript: Tipagem forte para maior qualidade de código, manutenibilidade e experiência do desenvolvedor.
- Prisma ORM: Toolkit moderno para banco de dados para interação perfeita, migrações e segurança de tipos.
- Autenticação JWT: Autenticação segura de usuários usando JSON Web Tokens, gerenciada via middleware (
checkAuth.ts
). - Autorização por Middleware: Garante que apenas usuários autenticados possam acessar rotas protegidas.
- Separação de Responsabilidades: Camadas bem definidas para controllers, services e middlewares, promovendo modularidade e testabilidade.
- Migrações de Banco de Dados: Gerenciadas pelo Prisma, garantindo evolução consistente do schema do banco de dados entre ambientes.
- Manipulação de Imagens: Integração com Multer para upload de arquivos e Cloudinary para armazenamento e entrega de imagens na nuvem (ex: banners de produtos).
- Tratamento de Erros Assíncronos: Usa
express-async-errors
para um tratamento mais limpo de operações assíncronas nas rotas Express. - Configuração CORS: Cross-Origin Resource Sharing devidamente configurado para comunicação segura com clientes front-end.
- Variáveis de Ambiente: Gerenciamento seguro de configurações sensíveis usando
dotenv
. - Pronto para Deploy: Configurado para fácil implantação na Vercel (
vercel.json
, scriptvercel-build
).
- Ambiente de Execução: Node.js
- Framework: Express.js
- Linguagem: TypeScript
- ORM: Prisma
- Banco de Dados: PostgreSQL
- Autenticação: bcryptjs (Hashing de Senha), jsonwebtoken (JWT)
- Upload de Arquivos: Multer
- Armazenamento em Nuvem: Cloudinary
- Implantação: Vercel
Autenticação (checkAuth
) necessária para rotas marcadas com (auth)
.
Usuários (User)
POST /users
- Cria uma nova conta de usuário (requername
,email
epassword
no corpo da requisição).POST /session
- Autentica um usuário (requeremail
epassword
no corpo da requisição) e retorna um token JWT e dados do usuário.GET /userinfo
- Obtém detalhes do usuário atualmente autenticado.(auth)
Categorias (Category)
POST /category
- Cria uma nova categoria de produto (requername
no corpo da requisição).(auth)
GET /category
- Lista todas as categorias de produtos.(auth)
DELETE /category
- Deleta uma categoria (requercategory_id
como query parameter).(auth)
Produtos (Product)
POST /product
- Cria um novo produto (requername
,price
,description
,category_id
, e opcionalmente dados do arquivo/banner no corpo da requisição - o formato depende se omulter
está ativo ou não).(auth)
GET /category/product
- Lista produtos por categoria (requercategory_id
como query parameter).(auth)
DELETE /product
- Deleta um produto (requerproduct_id
como query parameter).(auth)
Pedidos (Order)
POST /order
- Cria um novo pedido em rascunho (requertable
e opcionalmentename
no corpo da requisição).(auth)
DELETE /order
- Deleta um pedido inteiro (requerorder_id
como query parameter).(auth)
POST /order/add
- Adiciona um item a um pedido existente (requerorder_id
,product_id
,amount
no corpo da requisição).(auth)
DELETE /order/remove
- Remove um item de um pedido (requeritem_id
como query parameter).(auth)
PUT /order/send
- Atualiza o status de um pedido para enviado/em andamento (requerorder_id
no corpo da requisição ou query parameter).(auth)
GET /orders
- Lista todos os pedidos que não estão em rascunho (status enviado ou concluído).(auth)
GET /order/detail
- Obtém informações detalhadas e itens de um pedido específico (requerorder_id
como query parameter).(auth)
PUT /order/conclude
- Atualiza o status de um pedido para finalizado/concluído (requerorder_id
no corpo da requisição ou query parameter).(auth)
├── prisma/ # Configuração do Prisma ORM
│ ├── migrations/ # Histórico de migrações do banco de dados
│ └── schema.prisma # Definição do schema do banco de dados
├── src/ # Código fonte
│ ├── @types/ # Tipagem personalizada - extensão do Request do Express
│ ├── config/ # Configuração do Multer
│ ├── controllers/ # Manipuladores de requisição, interagem com os services
│ ├── middlewares/ # Middleware do Express - verificação de autenticação
│ ├── prisma/ # Instância do cliente Prisma
│ ├── services/ # Implementação da lógica de negócio
│ ├── routes.ts # Definições das rotas da API
│ └── server.ts # Configuração e inicialização do servidor Express
├── tsconfig.json # Opções do compilador TypeScript
├── vercel.json # Configuração de deploy da Vercel
- Node.js (v16 ou superior recomendado)
- Yarn (ou NPM)
- Git
- Uma instância de PostgreSQL compatível com Prisma em execução
- Conta no Cloudinary (para upload de imagens)
# 1. Clone o repositório
git clone https://github.com/Antonio-Savio/Arte-del-Gusto-back-end.git
# 2. Navegue até o diretório do projeto
cd Arte-del-Gusto-back-end
# 3. Instale as dependências
yarn install
# ou
npm install
Crie um arquivo .env
na raiz do projeto e adicione as seguintes variáveis, substituindo os valores de exemplo pelas suas credenciais reais:
# URL de Conexão do Banco de Dados
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public"
# Chave Secreta JWT
JWT_SECRET="SEU_SEGREDO_JWT_ALEATORIO"
# Credenciais do Cloudinary
CLOUDINARY_NAME="SEU_CLOUDINARY_NAME"
CLOUDINARY_KEY="SUA_CLOUDINARY_KEY"
CLOUDINARY_SECRET="SEU_CLOUDINARY_SECRET"
# Porta do Servidor
# PORT=3333
Certifique-se de que seu servidor de banco de dados esteja em execução e acessível com as credenciais fornecidas no .env
. Em seguida, execute as migrações do Prisma para configurar o schema:
# Aplica as migrações para criar as tabelas do banco de dados
yarn prisma migrate dev
# ou
npx prisma migrate dev
yarn dev
# ou
npm run dev
A API deve estar rodando em http://localhost:3333
.
Alterações no schema do banco de dados são gerenciadas usando o Prisma Migrate.
prisma/schema.prisma
: Define os modelos e relações do banco de dados.prisma/migrations
: Contém arquivos SQL gerados para cada etapa de migração.
Comandos Principais:
yarn prisma migrate dev
: Aplica migrações durante o desenvolvimento (cria o BD se necessário, aplica migrações pendentes).yarn prisma migrate deploy
: Aplica migrações em ambientes de produção/staging.yarn prisma generate
: Atualiza o Prisma Client com base no schema.
Este projeto está configurado para implantação na Vercel.
- O arquivo
vercel.json
fornece a configuração básica. - O script
vercel-build
nopackage.json
("tsc --build && prisma generate && prisma migrate deploy"
) lida com o processo de build:- Compila TypeScript para JavaScript.
- Gera o Prisma Client.
- Aplica as migrações do banco de dados.
Certifique-se de que suas variáveis de ambiente (DATABASE_URL
, JWT_SECRET
, chaves do Cloudinary) estejam corretamente configuradas nas configurações do seu projeto na Vercel.
Contribuições são bem-vindas! Por favor, siga estes passos:
- Faça um fork do projeto.
- Crie uma nova branch (
git checkout -b feature/sua-feature
). - Faça suas alterações e commit (
git commit -m 'feat: Adiciona nova feature incrível'
). - Faça push para a branch (
git push origin feature/sua-feature
). - Abra um Pull Request.
Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes (se existir, caso contrário, declare que é MIT).
Antonio Sávio
- Email: savio.aragao@hotmail.com
- GitHub: Antonio-Savio
- LinkedIn: antonio-savio