ThaliaLevy/newsletter
API com o objetivo de enviar notícias diárias e de forma personalizada, via e-mail, aos usuários. Para receber o e-mail, o usuário precisa cadastrar os assuntos que gostaria de receber atualizações.
Java
- Java 17;
- Maven;
- Spring boot 2.7.5;
- Spring Web;
- Spring DevTools;
- Spring Data JPA;
- Spring Security;
- Spring Webflux;
- Spring Mail;
- Flyway;
- MySQL;
- Swagger 2.9.2;
- JWT 3.18.1;
- Flyway.
- Cadastro de usuário informando se possui perfil de administrador ou não, realizado somente por perfil administrador;
- Cadastro de etiqueta por usuário, realizado somente pelo próprio usuário sem administrador;
- Consumo de api externa, de onde serão retornadas as listagens de notícias (https://apinoticias.tedk.com.br/);
- Busca de listagem de notícias ao informar etiqueta relacionada ao assunto que deseja visualizar, realizada somente por usuários sem administrador;
- Histórico de parâmetros (etiqueta e data) acessados no dia atual, que pode ser visualizado pelo próprio usuário que fez os acessos ou um perfil administrador que visualiza os acessos de todos os usuários;
- Histórico de etiquetas mais acessadas independente da data, que pode ser visualizado somente por perfil administrador;
- Banco de dados é populado no ato de criação das tabelas.
- JWT para gerar token;
- Swagger para documentar os endpoints da API;
- Projeto no Postman para documentar os endpoints da API;
- Envio de e-mail com confirmação de sucesso no ato de cadastro de um usuário;
- Envio de e-mail contendo todas as notícias da data atual, de acordo com as etiquetas dos usuários, para cada usuário, realizado por um perfil administrador;
- Busca de listagem de notícias ao informar data da notícia e etiqueta relacionada ao assunto que deseja visualizar, realizada somente por usuários sem administrador;
- Exceptions com retorno de status http personalizados de acordo com o erro, dentro da classe customizada handler;
- Uso de DTOs para facilitar a transferência de dados de uma camada para outra;
- Spring Security para permitir restringir acessos.