Desenvolver uma API de gerenciamento de avaliação de livros que realiza uma integração com uma API externa de livros. Ele deve permitir o cadastro validado de livros, avaliações e usuário.
- ID (GUID)
- Título (string)
- Descrição (string)
- ISBN (string)
- Autor (string)
- Editora (string)
- Genero (Enum)
- AnoPublicacao (int)
- Paginas (int)
- DataRegistro (DateTime)
- NotaMedia (decimal)
- CapaLivro (bytes)
- Avaliacoes (List)
- ID (GUID)
- Nota (int)
- Descricao (string)
- IdUsuario (int)
- IdLivro (int)
- DataRegistro (DateTime)
- ID (GUID)
- Email (string)
- Nome (string)
- Avaliacoes (List)
- Data de início não pode ser maior que o fim de leitura, ao cadastrar a avaliação;
- ISBN deve ser único ao cadastrar livro;
- Nota deve ser de 1 a 5 ao cadastrar avaliação;
- A nota média do livro deve ser recalculada a cada cadastro de avaliação;
- O usuário pode cadastrar apenas uma avaliação por livro;
- O sistema deve gerar um relatório sobre a quantidade de livros lidos naquele ano (+);
- O sistema deve permitir o usuário subir um arquivo com a capa do livro (+);
- Salvar em memória
- O sistema deve permitir o usuário baixar um arquivo com a capa do livro (+);
- Baixar da memória
- O sistema deve permitir consulta de livros em uma fonte externa (+);
- Configurar por meio de uma classe de opções;
- Criar o client com base no Google APIs;
- O sistema deve realizar a autenticação e autorização do usuário (+);
- Pedir autorização na camada de consulta externa;
- Criar uma rotina de autorização baseada em permissões;
- Utilizar documentação com o Swagger;
- Utilizar validação com o FluentValidation na camada de aplicação;
- Utilizar camadas da arquitetura limpa;
- Utilizar ORM EfCore com SQL Server nas entidades;
- Utilizar o padrão CQRS no projeto de acordo com as regras de negócio;
- Utilizar o padrão Repository nas entidades do projeto;
- Utilizar o padrão de resultados na camada de domínio;