Projeto e desenvolver um sistema parecido com ifood aonde tem cliente e produtor que vai vender seu produto para cliente, basicamente produtor ele tem acesso a criar seu produtos, estabelicimento e coupons de desconto para os cliente e o cliente pode criar seu orders de qual produto vai comprar e tambem pode usar coupons para ter descontos.
- NestJS: Utilizado por sua arquitetura modular e suporte a TypeScript.
- Prisma: Utilizado para ORM devido à sua facilidade de uso e integração com PostgreSQL.
- Node.js
- PostgreSQL
Validação: Usar class-validator é ideal para validação de dados de entrada, como em DTOs (Data Transfer Objects), para garantir que os dados recebidos atendem aos critérios desejados. Transformação: Usar class-transformer é útil para converter dados entre formatos e instâncias de classes, especialmente quando você está lidando com entradas de usuários ou dados de APIs externas.
Instalar essas bibliotecas é uma boa prática em projetos onde a validação e a transformação de dados são necessárias. Elas são muito usadas em aplicações que seguem boas práticas de desenvolvimento e ajudam a manter o código limpo e gerenciável. Essas ferramentas são especialmente úteis em projetos que utilizam NestJS para lidar com validações e transformações de dados de forma eficiente e organizada.
-
Clone o repositório:
git clone https://github.com/juanfsouza/Ifood-Backend.git cd Ifood-Backend
-
Instale as dependências:
npm install
-
Opcional Configure as variáveis de ambiente:
- Crie um arquivo
.env
na raiz do projeto com as seguintes variáveis:DATABASE_URL="sua_string_de_conexao_do_postgresql"
-
Execute as migrações do banco de dados:
npx prisma migrate dev
-
Inicie o servidor:
npm run start:dev
- Endpoint:
POST /producers
- Exemplo de Requisição:
{ "name": "Joice Pizza", "email": "joicepizza@example.com", "password": "password" }
- Endpoint:
PUT /producers/{id}
- Exemplo de Requisição:
{ "name": "Joice Updated", "email": "joiceupdated@example.com", "password": "password" }
- Endpoint:
DELETE /producers/{id}
- Endpoint:
POST /customers
- Exemplo de Requisição:
{ "name": "Jane Smith", "email": "jane.smith@example.com", "password": "anothersecurepassword" }
- Endpoint:
PUT /customers/{id}
- Exemplo de Requisição:
{ "name": "Jane Smith Updated", "email": "jane.smith.updated@example.com", "password": "newsecurepassword" }
- Endpoint:
DELETE /customers/{id}
- Endpoint:
POST /products
- Exemplo de Requisição:
{ "name": "Product Name", "description": "Product Description", "price": 150, "producerId": 2 }
- Endpoint:
PUT /products/{id}
- Exemplo de Requisição:
{ "name": "Updated Product Name", "description": "Updated Product Description", "price": 150 }
- Endpoint:
DELETE /products/{id}
- Endpoint:
POST /products
- Exemplo de Requisição:
{ "name": "Product Name", "description": "Product Description", "price": 150, "producerId": 2 }
- Endpoint:
PUT /products/{id}
- Exemplo de Requisição:
{ "name": "Updated Product Name", "description": "Updated Product Description", "price": 150 }
- Endpoint:
DELETE /products/{id}
- Endpoint:
POST /orders
- Exemplo de Requisição:
{ "customerId": 2, "productIds": [2, 3] }
- Endpoint:
PUT /orders/{id}
- Exemplo de Requisição:
{ "customerId": 2, "productIds": [2, 4] }
- Endpoint:
DELETE /orders/{id}
- Endpoint:
POST /coupons
- Exemplo de Requisição:
{ "code": "Coupon get 10.00 off", "discount": 10.00, "expiresAt": "2024-08-21T00:00:00Z", "productId": 3 }
- Endpoint:
PUT /coupons/{id}
- Exemplo de Requisição:
{ "discount": 15.00 }
- Endpoint:
DELETE /coupons/{id}
- Endpoint:
POST /establishments
- Exemplo de Requisição:
{ "name": "Nome do Estabelecimento", "street": "Rua Exemplo, 123", "city": "Cidade Exemplo", "state": "Estado Exemplo", "producerId": 2 }
- Endpoint:
PUT /establishments/{id}
- Exemplo de Requisição:
{ "name": "Novo Nome do Estabelecimento", "street": "Nova Rua Exemplo, 456", "city": "Nova Cidade Exemplo", "state": "Novo Estado Exemplo", "producerId": 1 }
- Endpoint:
DELETE /establishments/{id}
- Qualidade do Código: Segui boas práticas de programação, incluindo Clean Code e Clean Architecture.
- Documentação: Esta documentação cobre todas as funcionalidades e explica como configurar e utilizar a API.
- **Teste com Jest foram implementados em todas rotas.
- Api: Essa api foi desenvolvida com intesão de criar algo parecido com sistema do ifood.
- ** Link: http://localhost:3000/api#/