Conheça o projeto
Construir uma API REST em .NET para gerenciar livros de uma livraria, com CRUD completo, validações, documentação via Swagger e herança entre classes para organizar o domínio.
Instruções
Estrutura, regras e requisitos do projeto
1. Requisitos
- Deve ser possível criar um livro;
- Deve ser possível visualizar todos os livros que foram criados;
- Deve ser possível visualizar um livro em específico;
- Deve ser possível editar informações de um livro;
- Deve ser possível excluir um livro.
Campos obrigatórios
| Campo | Tipo | Obrigatório | Regras/Validações |
|---|---|---|---|
| id | GUID | Sim | Gerado automaticamente pelo sistema. |
| title | string | Sim | Deve ter entre 2 e 120 caracteres. |
| author | string | Sim | Deve ter entre 2 e 120 caracteres. |
| genre | string | Sim | Deve ser um dos valores válidos: ficção, romance, mistério, .... |
| price | decimal | Sim | Deve ser maior ou igual a 0. |
| stock | int | Sim | Deve ser maior ou igual a 0. |
Regras de negócio
titleeauthornão devem existir duplicados;pricenão pode ser negativo;stocknão pode ser negativo;genredeve estar numa lista de gêneros válidos.- Quando o livro é criado, preencher
CreatedAtem alterações, atualizarUpdatedAt.
Endpoints
- Crie todos os endpoints necessários;
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/books | Criar um novo livro. |
| GET | /api/books | Listar todos os livros (com filtros opcionais). |
| GET | /api/books/{id} | Buscar um livro pelo ID. |
| PUT | /api/books/{id} | Atualizar informações de um livro. |
| DELETE | /api/books/{id} | Excluir um livro da livraria. |
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 livro;
- Deve ser possível visualizar todos os livros que foram criados;
- Deve ser possível visualizar um livro em específico;
- Deve ser possível editar informações de um livro;
- Deve ser possível excluir um livro.
Campos obrigatórios
| Campo | Tipo | Obrigatório | Regras/Validações |
|---|---|---|---|
| id | GUID | Sim | Gerado automaticamente pelo sistema. |
| title | string | Sim | Deve ter entre 2 e 120 caracteres. |
| author | string | Sim | Deve ter entre 2 e 120 caracteres. |
| genre | string | Sim | Deve ser um dos valores válidos: ficção, romance, mistério, .... |
| price | decimal | Sim | Deve ser maior ou igual a 0. |
| stock | int | Sim | Deve ser maior ou igual a 0. |
Regras de negócio
titleeauthornão devem existir duplicados;pricenão pode ser negativo;stocknão pode ser negativo;genredeve estar numa lista de gêneros válidos.- Quando o livro é criado, preencher
CreatedAtem alterações, atualizarUpdatedAt.
Endpoints
- Crie todos os endpoints necessários;
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/books | Criar um novo livro. |
| GET | /api/books | Listar todos os livros (com filtros opcionais). |
| GET | /api/books/{id} | Buscar um livro pelo ID. |
| PUT | /api/books/{id} | Atualizar informações de um livro. |
| DELETE | /api/books/{id} | Excluir um livro da livraria. |
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