Este é um documento README.md que descreve a estrutura e organização do projeto "Dslearnbds" relacionado ao Capítulo 4 do DSLearn, uma API desenvolvida com Spring Boot. O Capítulo 4 aborda os temas de Domínio, ORM (Object-Relational Mapping) e Autorizações. A API permite a autenticação de usuários e fornece endpoints relacionados a usuários, entregas (deliveries) e notificações.
O projeto está organizado da seguinte forma:
+---dslearnbds
¦ DslearnbdsApplication.java
¦
+---components
¦ JwtTokenEnhancer.java
¦
+---config
¦ AppConfig.java
¦ AuthorizationServerConfig.java
¦ ResourceServerConfig.java
¦ WebSecurityConfig.java
¦
+---dto
¦ DeliverRevisionDTO.java
¦ NotificationDTO.java
¦ UserDTO.java
¦
+---entities
¦ ¦ Content.java
¦ ¦ Course.java
¦ ¦ Deliver.java
¦ ¦ Enrollment.java
¦ ¦ Lesson.java
¦ ¦ Notification.java
¦ ¦ Offer.java
¦ ¦ Reply.java
¦ ¦ Resource.java
¦ ¦ Role.java
¦ ¦ Section.java
¦ ¦ Task.java
¦ ¦ Topic.java
¦ ¦ User.java
¦ ¦
¦ +---enums
¦ ¦ DeliverStatus.java
¦ ¦ ResourceType.java
¦ ¦
¦ +---pk
¦ EnrollmentPK.java
¦
+---repositories
¦ CourseRepository.java
¦ DeliverRepository.java
¦ EnrollmentRepository.java
¦ LessonRepository.java
¦ NotificationRepository.java
¦ OfferRepository.java
¦ ReplyRepository.java
¦ ResourceRepository.java
¦ RoleRepository.java
¦ SectionRepository.java
¦ TopicRepository.java
¦ UserRepository.java
¦
+---resources
¦ ¦ DeliverResource.java
¦ ¦ NotificationResource.java
¦ ¦ UserResource.java
¦ ¦
¦ +---exceptions
¦ FieldMessage.java
¦ OAuthCustomError.java
¦ ResourceExceptionHandler.java
¦ StandardError.java
¦ ValidationError.java
¦
+---services
AuthService.java
DeliverService.java
NotificationService.java
UserService.java
¦
¦ +---exceptions
¦ DatabaseException.java
¦ ForbiddenException.java
¦ ResourceNotFoundException.java
¦ UnauthorizedException.java
Contém componentes relacionados a melhorias no token JWT.
JwtTokenEnhancer.java
: Componente responsável por aprimorar o token JWT com informações adicionais durante o processo de autenticação e autorização.
Contém classes de configuração, como a configuração do servidor de autorização, servidor de recursos e segurança web.
AppConfig.java
: Configurações gerais da aplicação Spring Boot.AuthorizationServerConfig.java
: Configuração do servidor de autorização OAuth 2.0 para gerenciar os tokens de acesso.ResourceServerConfig.java
: Configuração do servidor de recursos OAuth 2.0 para proteger os endpoints da aplicação.WebSecurityConfig.java
: Configuração da segurança da aplicação, definindo as regras de autenticação.
Contém classes Data Transfer Object (DTO) para transferir dados entre a API e a camada de serviço.
DeliverRevisionDTO.java
: DTO (Data Transfer Object) para a revisão de uma entrega.NotificationDTO.java
: DTO para representar uma notificação.UserDTO.java
: DTO para representar um usuário.
Contém as classes de entidades que são mapeadas para tabelas no banco de dados:
Content.java
: Entidade que representa o conteúdo de um recurso.Course.java
: Entidade que representa um curso.Deliver.java
: Entidade que representa uma entrega de tarefa.Enrollment.java
: Entidade que representa a matrícula de um usuário em um curso.Lesson.java
: Entidade que representa uma aula de um curso.Notification.java
: Entidade que representa uma notificação.Offer.java
: Entidade que representa a oferta de um curso.Reply.java
: Entidade que representa a resposta a uma tarefa.Resource.java
: Entidade que representa um recurso.Role.java
: Entidade que representa uma função (perfil) de usuário.Section.java
: Entidade que representa uma seção de um curso.Task.java
: Entidade que representa uma tarefa.Topic.java
: Entidade que representa um tópico.User.java
: Entidade que representa um usuário.
DeliverStatus.java
: Enumeração para os possíveis status de uma entrega.ResourceType.java
: Enumeração para os tipos de recursos.
Contém classes de chaves primárias compostas de entidades.
EnrollmentPK.java
: Classe que representa a chave primária composta da entidade Enrollment.
Contém interfaces que fornecem acesso aos dados do banco de dados (Repositories).
CourseRepository.java
: Interface do repositório para a entidade Course.DeliverRepository.java
: Interface do repositório para a entidade Deliver.EnrollmentRepository.java
: Interface do repositório para a entidade Enrollment.LessonRepository.java
: Interface do repositório para a entidade Lesson.NotificationRepository.java
: Interface do repositório para a entidade Notification.OfferRepository.java
: Interface do repositório para a entidade Offer.ReplyRepository.java
: Interface do repositório para a entidade Reply.ResourceRepository.java
: Interface do repositório para a entidade Resource.RoleRepository.java
: Interface do repositório para a entidade Role.SectionRepository.java
: Interface do repositório para a entidade Section.TopicRepository.java
: Interface do repositório para a entidade Topic.UserRepository.java
: Interface do repositório para a entidade User.
Contém classes de recursos da API que definem os endpoints para as operações CRUD.
DeliverResource.java
: Classe de recurso que representa o endpoint para entregas.NotificationResource.java
: Classe de recurso que representa o endpoint para notificações.UserResource.java
: Classe de recurso que representa o endpoint para usuários.
Contém classes de exceção personalizadas para tratamento de erros específicos da API.
FieldMessage.java
: Classe para representar mensagens de erro de campos.OAuthCustomError.java
: Classe para representar erros personalizados de autenticação e autorização.ResourceExceptionHandler.java
: Classe para lidar com exceções globais na aplicação.StandardError.java
: Classe para representar erros padrão.ValidationError.java
: Classe para representar erros de validação.
Contém as classes de serviços que implementam a lógica de negócio da API.
AuthService.java
: Interface do serviço de autenticação.DeliverService.java
: Interface do serviço de entrega.NotificationService.java
: Interface do serviço de notificação.UserService.java
: Interface do serviço de usuário.
DatabaseException.java
: Exceção personalizada para erros relacionados ao banco de dados.ForbiddenException.java
: Exceção personalizada para erros de acesso não autorizado.ResourceNotFoundException.java
: Exceção personalizada para erros de recurso não encontrado.UnauthorizedException.java
: Exceção personalizada para erros de autenticação e autorização.
Os endpoints da API podem ser testados usando o Postman. Abaixo estão os principais endpoints:
- Auth: Autenticação e Autorização.
/oauth/token
(POST): Endpoint para autenticação com credenciais de login. Retorna um token de acesso e um token de atualização.
- User: Recursos relacionados aos usuários.
/users/{id}
(GET): Obtém informações de um usuário pelo seu ID.
- Deliver: Recursos relacionados às entregas.
/deliveries/{id}
(PUT): Atualiza o status e o feedback de uma entrega (deliver) específica.
- Notification: Recursos relacionados às notificações.
/notifications
(GET): Obtém todas as notificações do usuário autenticado.
Os endpoints de autenticação são protegidos e requerem um token de acesso válido para serem acessados.
Para utilizar os endpoints da API, importe a coleção do Postman através do link https://www.postman.com/collections/b156d5adf224f89f6ca3. A coleção contém requisições configuradas para testar os principais endpoints da API.
Antes de testar as requisições, certifique-se de definir as variáveis de ambiente do Postman apropriadas para as informações de autenticação necessárias (por exemplo, {{client-id}}
, {{client-secret}}
, {{username}}
, {{password}}
, {{host}}
, {{token}}
, {{refresh_token}}
). Estas informações podem variar dependendo da configuração da API e do ambiente de desenvolvimento.