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-errorspara 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,emailepasswordno corpo da requisição).POST /session- Autentica um usuário (requeremailepasswordno 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 (requernameno corpo da requisição).(auth)GET /category- Lista todas as categorias de produtos.(auth)DELETE /category- Deleta uma categoria (requercategory_idcomo 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 omulterestá ativo ou não).(auth)GET /category/product- Lista produtos por categoria (requercategory_idcomo query parameter).(auth)DELETE /product- Deleta um produto (requerproduct_idcomo query parameter).(auth)
Pedidos (Order)
POST /order- Cria um novo pedido em rascunho (requertablee opcionalmentenameno corpo da requisição).(auth)DELETE /order- Deleta um pedido inteiro (requerorder_idcomo query parameter).(auth)POST /order/add- Adiciona um item a um pedido existente (requerorder_id,product_id,amountno corpo da requisição).(auth)DELETE /order/remove- Remove um item de um pedido (requeritem_idcomo query parameter).(auth)PUT /order/send- Atualiza o status de um pedido para enviado/em andamento (requerorder_idno 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_idcomo query parameter).(auth)PUT /order/conclude- Atualiza o status de um pedido para finalizado/concluído (requerorder_idno 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 installCrie 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=3333Certifique-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 devyarn dev
# ou
npm run devA 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.jsonfornece a configuração básica. - O script
vercel-buildnopackage.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
