
Conheça o projeto
Nesse desafio, você vai construir uma API para gerenciar o faturamento de uma barbearia. A API deve permitir criar, visualizar, editar e excluir registros de faturamento, além de exportar relatórios em PDF e Excel com o total da semana.
Você também vai implementar tratativas de erros e filtros de exceções para garantir que a aplicação seja robusta e confiável. E para fechar com chave de ouro, vai criar testes de unidade para validar as principais funcionalidades da API e assegurar que tudo esteja funcionando corretamente.
Recursos
Materiais para você usar como base para o desenvolvimento
Instruções
Estrutura, regras e requisitos do projeto
1. Requisitos
- Deve ser possível criar um faturamento;
- Deve ser possível visualizar todos os faturamentos;
- Deve ser possível visualizar um faturamento pelo ID;
- Deve ser possível editar um faturamento;
- Deve ser possível excluir um faturamento;
- Deve ser possível ver o total do período (somando apenas pagos);
- Deve ser possível exportar relatório semanal em PDF;
- Deve ser possível exportar relatório semanal em Excel;
- Crie tratativas de erros e filtros de exceções para a sua aplicação;
- Crie testes de unidade para a sua aplicação;
- A API deve ter documentação no Swagger.
Sugestão de campos
campo | tipo | obrigatório | restrições / observações |
---|---|---|---|
id | GUID | Sim | Gerado automaticamente pelo sistema |
date | DateOnly | Sim | Data do faturamento |
barberName | string | Sim | 2–80 caracteres |
clientName | string | Sim | 2–120 caracteres |
serviceName | string | Sim | 2–120 caracteres; ex.: corte, barba, combo |
amount | decimal | Sim | Valor ≥ 0; se status = Cancelado, deve ser 0 |
paymentMethod | enum | Sim | Cartão, Dinheiro, Pix, Outro |
status | enum | Sim | Pago, Cancelado |
notes | string | Não | Até 500 caracteres |
createdAt | DateTime | Sim | Data/hora da criação |
updatedAt | DateTime | Sim | Atualizado quando houver alteração |
Endpoints
- Crie todos os endpoints necessários;
Método | Endpoint | Descrição |
---|---|---|
POST | /api/billings | Criar um novo faturamento. |
GET | /api/billings | Listar faturamentos com filtros, paginação e ordenação. |
GET | /api/billings/{id} | Obter um faturamento pelo ID. |
PUT | /api/billings/{id} | Atualizar um faturamento existente. |
DELETE | /api/billings/{id} | Excluir um faturamento pelo ID. |
GET | /api/reports/pdf | Gerar relatório de faturamento em PDF. |
GET | /api/reports/excel | Gerar relatório de faturamento em Excel. |
Status Code
- Retorne status code apropriados pra cada situação:
Status | Quando usar | Descrição |
---|---|---|
200 | Consultas e atualização | Requisição bem-sucedida, dados retornados. |
201 | Criação de novo recurso | Recurso criado com sucesso. |
204 | Exclusão ou atualização | Operação concluída sem conteúdo para retornar. |
400 | Validações inválidas ou dados incorretos | Requisição malformada ou campos inválidos. |
404 | Recurso não encontrado | ID ou rota não corresponde a nenhum recurso. |
409 | Conflito de dados | Conflito com dados já existentes. |
500 | Erro inesperado no servidor | Exceções não tratadas ou falhas internas. |
2. Desenvolvendo o projeto
Para desenvolver esse projeto, recomendamos utilizar as principais tecnologias que utilizamos durante o desenvolvimento do primeiro módulo da formação.
Caso você tenha alguma dificuldade você pode ir no nosso fórum e deixar sua dúvida por lá!
Após terminar o desafio, caso você queira, você pode tentar dar o próximo passo e deixar a aplicação com a sua cara. Tente mudar o layout, cores, ou até adicionar novas funcionalidades para ir além! 🚀
3. Entrega
Após concluir o desafio, você deve enviar a URL do seu código no Github.
Além disso, que tal fazer um post no LinkedIn compartilhando o seu aprendizado e contando como foi a experiência? É uma excelente forma de demonstrar seus conhecimentos e atrair novas oportunidades!
Obs: Se você se sentir à vontade, pode postar um print do resultado final e nos marcar! Vai ser incrível acompanhar a sua evolução! 💜
4. Considerações finais
Lembre-se que o intuito de um desafio é te impulsionar, por isso, dependendo do desafio, pode ser que você precise ir além do que foi discutido em sala de aula. Mas isso não é algo ruim: ter autonomia para buscar informações extras é uma habilidade muito valiosa e vai ser ótimo pra você treinar ela aqui com a gente!
E lembre-se: tenha calma! Enfrentar desafios faz parte do seu processo de aprendizado!
Se precisar de alguma orientação ou suporte, estamos aqui com você! Bons estudos e boa prática! 💜
Feito com 💜 por Rocketseat 👋
1. Requisitos
- Deve ser possível criar um faturamento;
- Deve ser possível visualizar todos os faturamentos;
- Deve ser possível visualizar um faturamento pelo ID;
- Deve ser possível editar um faturamento;
- Deve ser possível excluir um faturamento;
- Deve ser possível ver o total do período (somando apenas pagos);
- Deve ser possível exportar relatório semanal em PDF;
- Deve ser possível exportar relatório semanal em Excel;
- Crie tratativas de erros e filtros de exceções para a sua aplicação;
- Crie testes de unidade para a sua aplicação;
- A API deve ter documentação no Swagger.
Sugestão de campos
campo | tipo | obrigatório | restrições / observações |
---|---|---|---|
id | GUID | Sim | Gerado automaticamente pelo sistema |
date | DateOnly | Sim | Data do faturamento |
barberName | string | Sim | 2–80 caracteres |
clientName | string | Sim | 2–120 caracteres |
serviceName | string | Sim | 2–120 caracteres; ex.: corte, barba, combo |
amount | decimal | Sim | Valor ≥ 0; se status = Cancelado, deve ser 0 |
paymentMethod | enum | Sim | Cartão, Dinheiro, Pix, Outro |
status | enum | Sim | Pago, Cancelado |
notes | string | Não | Até 500 caracteres |
createdAt | DateTime | Sim | Data/hora da criação |
updatedAt | DateTime | Sim | Atualizado quando houver alteração |
Endpoints
- Crie todos os endpoints necessários;
Método | Endpoint | Descrição |
---|---|---|
POST | /api/billings | Criar um novo faturamento. |
GET | /api/billings | Listar faturamentos com filtros, paginação e ordenação. |
GET | /api/billings/{id} | Obter um faturamento pelo ID. |
PUT | /api/billings/{id} | Atualizar um faturamento existente. |
DELETE | /api/billings/{id} | Excluir um faturamento pelo ID. |
GET | /api/reports/pdf | Gerar relatório de faturamento em PDF. |
GET | /api/reports/excel | Gerar relatório de faturamento em Excel. |
Status Code
- Retorne status code apropriados pra cada situação:
Status | Quando usar | Descrição |
---|---|---|
200 | Consultas e atualização | Requisição bem-sucedida, dados retornados. |
201 | Criação de novo recurso | Recurso criado com sucesso. |
204 | Exclusão ou atualização | Operação concluída sem conteúdo para retornar. |
400 | Validações inválidas ou dados incorretos | Requisição malformada ou campos inválidos. |
404 | Recurso não encontrado | ID ou rota não corresponde a nenhum recurso. |
409 | Conflito de dados | Conflito com dados já existentes. |
500 | Erro inesperado no servidor | Exceções não tratadas ou falhas internas. |
2. Desenvolvendo o projeto
Para desenvolver esse projeto, recomendamos utilizar as principais tecnologias que utilizamos durante o desenvolvimento do primeiro módulo da formação.
Caso você tenha alguma dificuldade você pode ir no nosso fórum e deixar sua dúvida por lá!
Após terminar o desafio, caso você queira, você pode tentar dar o próximo passo e deixar a aplicação com a sua cara. Tente mudar o layout, cores, ou até adicionar novas funcionalidades para ir além! 🚀
3. Entrega
Após concluir o desafio, você deve enviar a URL do seu código no Github.
Além disso, que tal fazer um post no LinkedIn compartilhando o seu aprendizado e contando como foi a experiência? É uma excelente forma de demonstrar seus conhecimentos e atrair novas oportunidades!
Obs: Se você se sentir à vontade, pode postar um print do resultado final e nos marcar! Vai ser incrível acompanhar a sua evolução! 💜
4. Considerações finais
Lembre-se que o intuito de um desafio é te impulsionar, por isso, dependendo do desafio, pode ser que você precise ir além do que foi discutido em sala de aula. Mas isso não é algo ruim: ter autonomia para buscar informações extras é uma habilidade muito valiosa e vai ser ótimo pra você treinar ela aqui com a gente!
E lembre-se: tenha calma! Enfrentar desafios faz parte do seu processo de aprendizado!
Se precisar de alguma orientação ou suporte, estamos aqui com você! Bons estudos e boa prática! 💜
Feito com 💜 por Rocketseat 👋
Tarefas
Use este checklist para ajudar a organizar a sua entrega