diff --git a/README.md b/README.md index d16c2f3..f6b2923 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,11 @@ tecnologia ajudar a fazer a diferença na vida das pessoas, tornando mais fácil - **Informações detalhadas sobre necessidades**: As organizações podem detalhar quais tipos de doações são necessárias, permitindo aos doadores direcionarem suas doações de maneira mais efetiva. -- **Facilitação do processo de doação**: Nossa plataforma se propõem a tornar a doação uma atividade fácil e simples de ser realizada, incentivando cada vez mais pessoas a participarem. \ No newline at end of file +- **Facilitação do processo de doação**: Nossa plataforma se propõem a tornar a doação uma atividade fácil e simples de ser realizada, incentivando cada vez mais pessoas a participarem. + +--- + +## Swagger +- [API Conectar Doações - Swagger](http://localhost:8080/swagger-ui/index.html) + +--- \ No newline at end of file diff --git a/Release_Notes.md b/Release_Notes.md new file mode 100644 index 0000000..1df42ac --- /dev/null +++ b/Release_Notes.md @@ -0,0 +1,1068 @@ +# Release Notes + + + +--- +## **_Release 1.0.0_** + +**Commit** 83c5874bc129c9e159ec8920d59a049443cadc89: + +Esse commit adiciona configurações de OpenAPI, segurança web e CORS. Três classes de configuração foram criadas: + +**Arquivos Adicionados:** `CorsConfig.java`, `OpenApiConfig.java`, `WebSecurityConfig.java` + +**Alterações:** + +- **CorsConfig.java**: Essa classe de configuração foi criada para habilitar o compartilhamento de recursos de origem cruzada (CORS). Ela fornece um bean para `CorsFilter`, que é utilizado para tratar requisições CORS, permitindo requisições de qualquer origem, quaisquer cabeçalhos e qualquer método. + +- **OpenApiConfig.java**: Essa classe de configuração foi criada para aprimorar a documentação da API. Configura as informações detalhadas e as tags que são exibidas na documentação do Swagger/OpenAPI. + +- **WebSecurityConfig.java**: Essa classe de configuração foi criada para definir as configurações de segurança web da aplicação. + +**Nota:** A principal ênfase deste commit é melhorar a documentação da API, segurança web e compartilhamento de recursos de origem cruzada, fornecendo classes de configuração para cada um deles. + +--- + +**Commit** 792c0a9834c279579c9f88b6a84cec59df631b07: + +Este commit reorganiza os pacotes e remove um teste não utilizado. Os principais arquivos do pacote "diegosneves.github.conectardoacoes" foram movidos para pacotes mais específicos sob "diegosneves.github.conectardoacoes.adapters.rest". Além disso, o arquivo de teste "ConectarDoacoesApplicationTests.java" foi removido por não estar sendo utilizado. + +**Arquivos Alterados:** `ConectarDoacoesApplication.java`, `CorsConfig.java`, `OpenApiConfig.java`, `WebSecurityConfig.java` + +**Alterações:** + +- Os pacotes dos arquivos foram alterados para "diegosneves.github.conectardoacoes.adapters.rest" para melhorar a organização do projeto. +- O teste "ConectarDoacoesApplicationTests.java" foi removido do repositório. + +**Nota:** A principal ênfase deste commit é melhorar a organização dos pacotes do projeto e remover os testes que não estão sendo utilizados. + +--- + +**Commit** bf127e04eb7ef579e12fd578ddeac74ce944ecd9: + +Este commit adiciona manipulação de UUID e exceções relacionadas. Uma nova classe de utilidade para lidar com operações relacionadas ao UUID é introduzida. Além disso, ele adiciona um novo tipo de exceção (UuidUtilsException) para casos em que o UUID fornecido é inválido. O commit também inclui um arquivo de enumerador (ExceptionDetails) para fornecer detalhes mais claros sobre vários cenários de falha. + +**Arquivos Adicionados:** `ExceptionDetails.java`, `UuidUtilsException.java`, `UuidUtils.java` + +**Alterações:** + +- **ExceptionDetails.java**: Enumera detalhes de exceções para mensagens de erro mais claras. Definido o erro INVALID_UUID_FORMAT_MESSAGE. + +- **UuidUtilsException.java**: Uma nova exceção personalizada para lidar com cenários inválidos do UUID. + +- **UuidUtils.java**: Classe utilitária para realizar operações relacionadas ao UUID. Funções como `generateUuid()` e `isValidUUID()` são fornecidas. + +**Nota:** A ênfase principal deste commit é melhorar a manipulação e validação de UUID, adicionando novas classes e exceções para lidar com cenários relacionados ao UUID. + +--- + +**Commit** 9451eacb312d1e03f38b75063c3a491df674a447: + +Este commit adiciona uma nova classe de usuário (User) e seu contrato (UserContract). Também inclui uma classe de exceções (UserCreationFailureException) para casos de falha na criação do usuário. Um arquivo de teste para a classe User também foi adicionado para garantir adequada cobertura de testes. + +**Arquivos Adicionados:** `User.java`, `UserContract.java`, `UserProfile.java`, `UserCreationFailureException.java`, `UserTest.java` + +**Alterações:** + +- `User.java`: Define a classe User e os métodos para validação de dados do usuário durante a criação do mesmo. + +- `UserContract.java`: Define o contrato para a classe User. + +- `UserProfile.java`: Define o perfil do usuário, podendo ser DOADOR ou BENEFICIARIO. + +- `UserCreationFailureException.java`: Define uma nova exceção customizada, lançada quando ocorre uma falha na criação de um usuário. + +- `UserTest.java`: Adiciona testes para a classe User, garantindo que o usuário seja corretamente criado e validado. + +**Nota**: O principal objetivo deste commit é a adição da classe User, com todas as suas especificidades e testes necessários. + +--- + +**Commit** 374f567670c9d8271a747027111fc84e65e5e72f: + +Este commit adiciona documentação detalhada para várias classes e métodos, com o objetivo de melhor explicar o propósito e o uso dessas classes e métodos. Também altera a exceção apresentada na classe 'UserCreationFailureException' e remove a dependência do PostgreSQL do `pom.xml`, optando pelo uso do H2 como banco de dados. + +**Arquivos Alterados:** `pom.xml`, `User.java`, `UserContract.java`, `ExceptionDetails.java`, `UserCreationFailureException.java`. + +**Alterações:** + +- Removida a dependência do PostgreSQL no `pom.xml` + +- `User.java`: Adicionada documentação detalhada para a classe e seus métodos. + +- `UserContract.java`: Adicionada documentação detalhada, explicando cada método da interface e seus respectivos propósitos. + +- `ExceptionDetails.java`: Alterada a exceção USER_NAME_INVALID para USER_CREATION_ERROR e adicionada nova exceção ADDRESS_CREATION_ERROR. + +- `UserCreationFailureException.java`: Adicionada documentação detalhada explicando a classe de exceção e seus possíveis usos. + +**Nota**: A ênfase deste commit está na melhor documentação das classes afetadas e na mudança para o uso do H2 como banco de dados em vez do PostgreSQL. + +--- + +**Commit** fab77ed4449460b8d8381357a052daa49a06240c: + +Este commit cria classes de exceção personalizadas para tratar erros específicos durante a criação de entidades, como `Address`, `Donation` e `Shelter`. Além disso, expande o enum `ExceptionDetails` para incluir detalhes sobre os erros de criação de `Donation` e `Shelter`. As novas classes de exceção estendem de `RuntimeException` e podem ser usadas para lançar erros personalizados com mensagens claras e específicas. + +**Arquivos Alterados:** `ExceptionDetails.java`, `AddressCreationFailureException.java`, `DonationRegisterFailureException.java`, `ShelterCreationFailureException.java`, `UuidUtilsException.java`. + +**Alterações:** + +- `ExceptionDetails.java`: Adicionadas novas constantes de erro para tratar falhas na criação de doação e abrigo. + +- `AddressCreationFailureException.java`: Criada classe de exceção personalizada para lidar especificamente com falhas durante a criação de endereços. + +- `DonationRegisterFailureException.java`: Criada classe de exceção personalizada para lidar especificamente com falhas durante o registro de doações. + +- `ShelterCreationFailureException.java`: Criada classe de exceção personalizada para lidar especificamente com falhas durante a criação de abrigos. + +**Nota:** A ênfase deste commit está em melhorar o tratamento de erros durante a criação de `Address`, `Donation`, e `Shelter` através do uso de classes de exceção personalizadas. + +--- + +**Commit** d4b3fa7ffc2ac12195fe61b10625098df1fd39b5: + +Este commit adiciona documentação para a enumeração `UserProfile`. Esta enumeração fornece os tipos de perfis disponíveis para um usuário, sendo eles 'Doador' e 'Beneficiário'. + +**Arquivos Alterados:** `UserProfile.java` + +**Alterações:** + +- `UserProfile.java`: Adicionada documentação para a enumeração `UserProfile`, descrevendo os tipos de perfis disponíveis para um usuário. + +**Nota:** A ênfase deste commit está em adicionar documentação clara para a enumeração `UserProfile`, explicando seu uso e funcionalidade. + +--- + +**Commit** 15c239b2f165c4f5d3014d629dca5cae0547ae59: + +Este commit adiciona várias classes de teste para a validação das entidades Address, Donation e Shelter. Os testes incluem a verificação de criação bem-sucedida de instâncias, validação de campos necessários, mudança de atributos e exceções de erro esperadas. + +**Arquivos Adicionados:** `ShelterTest.java`, `AddressTest.java`, `DonationTest.java` + +**Alterações:** + +Criação de testes para as seguintes entidades: + +- `ShelterTest.java`: foram adicionados testes para a criação de abrigos, validação do ID do abrigo, alteração do nome e endereço do abrigo e adição de doações ao abrigo. + +- `AddressTest.java`: foram adicionados testes para a criação de endereços e validação de campos de endereço. + +- `DonationTest.java`: foram adicionados testes para a criação de doações e validação de campos de doação. + +**Nota:** A principal ênfase desse commit é adicionar uma ampla cobertura de testes para as entidades de Address, Donation e Shelter, incluindo testes de validação de campo, alteração de atributos e criação de instâncias. + +--- + +**Commit** 6d2b5ea5b4cef2afe8f3293b445f6e6d9bb64a27: + +Este commit introduz novas classes de entidade no domínio principal. Foram adicionadas as classes Shelter, Address e Donation para representar refúgios, endereços e doações, respectivamente. Além disso, foram implementadas verificações para validar os dados de cada entidade antes da criação dos objetos, garantindo a integridade dos dados. + +**Arquivos Adicionados:** `Shelter.java`, `Address.java`, `Donation.java` + +**Alterações:** + +Foram adicionadas as seguintes novas classes de entidade: + +- `Shelter.java`: Representa um abrigo na aplicação com atributos para identificação, nome do abrigo, endereço, usuário responsável e uma lista de doações. A validação de dados é feita antes da criação do objeto para garantir a integridade dos dados. + +- `Address.java`: Representa um endereço físico que é associado a um abrigo. Os detalhes incluem a rua, o número, o bairro, a cidade, o estado e o CEP. + +- `Donation.java`: Representa uma doação que pode ser feita a um abrigo. Tem atributos para identificação única da doação, o nome da doação e a quantidade da doação. + +**Nota:** A enfase principal dessa confirmação é o estabelecimento de novas classes de entidade para representar abrigos, endereços e doações. Cada uma dessas novas classes de entidade inclui verificação e validação de dados para garantir a integridade dos dados quando um novo objeto é criado. + +--- + +**Commit** a8f4e148ff4cfd1a4c8b46d7614d6e29fa8a8461: + +Este commit adiciona a classe UserFactory para lidar com a criação de objetos do usuário. Além disso, os testes para a entidade de usuário foram atualizados para usar a nova fábrica em vez da criação direta do construtor, proporcionando uma validação mais eficiente do UUID do usuário. + +**Arquivos Adicionados:** `UserFactory.java` +**Arquivos Modificados:** `UserTest.java` + +**Alterações:** + +- `UserFactory.java`: Uma nova classe UserFactory foi adicionada. A classe conta com um método chamado `create`, que aceita parâmetros para nome do usuário, e-mail, perfil de usuário e senha, e retorna um novo objeto Usuário. Isso facilita a construção de objetos de usuário e encapsula a lógica de sua criação em uma única classe. + +- `UserTest.java`: Os testes da entidade do usuário foram atualizados para utilizar a nova fábrica. Isso resultou em uma validação mais eficiente do UUID do usuário e uma forma mais limpa de criar objetos de usuário para os testes. + +**Nota:** A principal ênfase dessa confirmação é a adição da classe UserFactory para simplificar a criação de objetos de usuário e proporcionar a validação eficiente do UUID do usuário durante a criação de novos objetos de usuário, o que melhorou a qualidade dos testes de usuários. + +--- + +**Commit** 1e4dd6df35c94ab31da36f9a6e9b7749792c5896: + +Este commit adiciona a classe ShelterFactory para lidar com a criação de objetos Shelter por meio de um método estático. Além disso, os testes para a entidade Shelter foram atualizados para usar a nova fábrica em vez da criação direta do construtor, proporcionando uma validação mais eficiente do UUID do Shelter. + +**Arquivos Adicionados:** `ShelterFactory.java` +**Arquivos Modificados:** `ShelterTest.java` + +**Alterações:** + +- `ShelterFactory.java`: Uma nova classe ShelterFactory foi adicionada. A classe oferece um método chamado `create`, que aceita parâmetros para o nome do abrigo, o objeto de endereço e o usuário responsável, e retorna um novo objeto Shelter. Isso facilita a construção de objetos de abrigo e encapsula a lógica de criação em uma única classe. + +- `ShelterTest.java`: Os testes da entidade Shelter foram atualizados para utilizar a nova fábrica. Isso resultou em uma validação mais eficiente do UUID do abrigo e uma forma mais limpa de criar objetos de abrigo para os testes. + +**Nota:** A principal ênfase desta confirmação é a adição da classe ShelterFactory para simplificar a criação de objetos Shelter. Isso melhora a consistência e a facilidade de manutenção do código, ao mesmo tempo em que proporciona uma validação eficaz do UUID durante a criação de novos objetos de abrigo. + +--- + +**Commit** 87c199f6098852153e3af2341bb124fdb8257a33: + +Este commit refatora a lógica de validação dos dados do usuário introduzindo o método `checkNotNullAndNotEmptyOrThrowException`. Este método genérico verifica a nulidade e o vazio de objetos e strings, respectivamente, eliminando a repetição de código, simplificando a lógica de validação e aumentando a clareza e a concisão do código. + +**Arquivos Alterados:** `User.java` + +**Alterações:** + +- `User.java`: Refatorado o método `validateData()`, removendo a verificação explícita de nulidade e vazio de cada campo. Essas verificações foram encapsuladas e centralizadas no novo método `checkNotNullAndNotEmptyOrThrowException()`, que é utilizado para validação. Agora, as exceções `UserCreationFailureException` são lançadas a partir deste método centralizado. + +**Nota:** A ênfase principal deste commit é melhorar a qualidade do código, reduzindo a redundância e aumentando a legibilidade e manutenção através da introdução de uma função de validação centralizada que poder ser reutilizada para várias verificações de validação. + +--- + +**Commit** b2f376bae6579f894798cdd3b8bf3085f364f860: + +Este commit introduz a classe `ValidationUtils` para abstrair uma validação genérica de objeto nulo ou vazio (se for uma instância de String). A validação é então aplicada nas classes `User` e `Shelter`, substituindo a lógica de validação de objeto existente por um único método de validação centralizado e reutilizável. + +**Arquivos Alterados:** `Shelter.java`, `User.java`, `ExceptionDetails.java` +**Arquivos Adicionados:** `ValidationUtilsException.java` + +**Alterações:** + +- `Shelter.java`: Substituídas as verificações de nulidade e vazio por chamadas ao método `ValidationUtils.checkNotNullAndNotEmptyOrThrowException()`. +- `User.java`: Análogo à classe `Shelter.java`, as verificações de nulidade e vazio foram substituídas por chamadas ao método `ValidationUtils.checkNotNullAndNotEmptyOrThrowException()`. +- `ExceptionDetails.java`: Adicionado um novo tipo de erro `EXCEPTION_TYPE_NOT_THROWN`. +- `ValidationUtilsException.java`: Nova classe de exceção lançada quando um erro relacionado a uma exceção personalizada não pode ser lançada. + +**Nota:** O principal objetivo deste commit é tornar o código mais eficiente e fácil de manter, introduzindo um mecanismo de validação centralizado e reutilizável para objetivos comuns de validação, como verificar a nulidade de um objeto ou se uma string está vazia. + +--- + +**Commit** c3136efe49172d352450ddd081386aa44d2fb1c4: + +Neste commit, foram adicionados comentários de documentação completos para as classes `UserFactory` e `ShelterFactory`, melhorando a compreensão e a legibilidade de seu uso. + +**Arquivos Alterados:** `UserFactory.java`, `ShelterFactory.java` + +**Alterações:** + +- `UserFactory.java`: Adicionada documentação clara e abrangente que descreve a função da classe, seu funcionamento e a importância de seu método de criação. +- `ShelterFactory.java`: Análogo à classe `UserFactory`, foram adicionados comentários de documentação detalhados que descrevem a função da classe e o uso de seu método de criação. + +**Nota:** Este commit se concentra na melhoria da legibilidade e na facilitação da manutenção do código através da adição de comentários explicativos completos nas classes `UserFactory` e `ShelterFactory`. + +--- + +**Commit** 091c6eb82e4697dbe5ba101ccbec70de48d749cb: + +Este commit adiciona testes de unidade para a classe `ValidationUtils` para assegurar a eficácia de seus métodos. Houve uma pequena limpeza, removendo importações desnecessárias e simplificando o lançamento de exceções. + +**Arquivos Alterados:** `ValidationUtils.java` + +**Arquivo Adicionado:** `ValidationUtilsTest.java` + +**Alterações:** + +- `ValidationUtils.java`: Implementada a simplificação no lançamento de exceções e removidas importações desnecessárias. +- `ValidationUtilsTest.java`: Adicionados testes de unidade para todos os métodos públicos na classe `ValidationUtils`. Esses testes verificam a eficácia e a precisão dos métodos de validação fornecidos pela classe. + +**Nota:** A ênfase principal deste commit é melhorar a robustez do código, garantindo que o comportamento esperado da classe de utilidade da `ValidationUtils` esteja correto por meio de testes de unidade completos e abrangentes. + +--- + +**Commit** 14f567111c672a53dd7b9a8caa980ac09dc3ca6b: + +Este commit adiciona o `UserService` com operações CRUD básicas. Foram adicionadas funções para criar, recuperar, atualizar e excluir usuários. Também foram implementados métodos para alterar a senha e o nome de usuário. A estrutura inclui validações de dados e tratamento de exceções personalizadas para situações de erros específicos durante essas operações. + +**Arquivos Adicionados:** `UserRepository.java`, `ExceptionDetails.java`, `UserServiceFailureException.java`, `RepositoryContract.java`, `UserService.java` + +**Alterações:** + +- `UserRepository.java`: Interface do repositório de usuário criada para definir operações específicas para usuários. +- `ExceptionDetails.java`: Enumeração para detalhar as exceções que ocorreram. Adicionada `USER_MANIPULATION_ERROR` e `SHELTER_MANIPULATION_ERROR` como novos tipos de exceção. +- `UserServiceFailureException.java`: Exceção personalizada para falha no `UserService` durante a manipulação do usuário. +- `RepositoryContract.java`: Interface de contrato de repositório genérica que define as operações CRUD básicas. +- `UserService.java`: Implementação do contrato do serviço `UserService` para fornecer operações CRUD básicas. + +**Nota:** O foco deste commit é a implementação do `UserService` com operações CRUD básicas. Também aborda a captura de situações de erro específicas durante essas operações e adiciona validações para garantir a integridade dos dados do usuário. + +--- + +**Commit** d815d980246582fcb489c47d2492d8dfa6952cc7: + +Este commit adiciona testes para exceções de criação de usuário no `UserServiceTest.java`. Os testes adicionados verificam cenários em que a criação do usuário pode falhar devido à falta de valor ou valor vazio para os campos de nome de usuário, e-mail, perfil de usuário e senha. Esses testes podem ajudar a tornar o código mais robusto, contribuindo para um tratamento adequado das exceções. + +**Arquivo Alterado:** `UserServiceTest.java` + +**Alterações:** + +- Adicionados vários testes no arquivo `UserServiceTest.java`. Esses testes lidam com cenários em que a criação do usuário pode falhar. Os campos verificados são o nome do usuário, e-mail, perfil do usuário e senha. +- Se o valor de qualquer um desses campos for nulo ou vazio, uma exceção `UserCreationFailureException` é lançada. +- Durante cada teste, é verificado que o método `save` do repositório de usuários nunca é chamado (verifica-se usando `verify(this.userRepository, never()).save(any(UserContract.class));`). +- Após a exceção ser lançada, cada teste verifica se a exceção lançada é de fato uma instância de `UserCreationFailureException`. + +**Nota:** Este commit foca principalmente em aprimorar a robustez do código, garantindo que as exceções de falha na criação do usuário sejam adequadamente tratadas. + +--- + +**Commit** 943ef24af1be3c7cb3f58c752280c509105e6ce3: + +Este commit adiciona uma validação para garantir que os identificadores de usuário sejam UUIDs válidos. Isso é feito através de um novo método, `validateUserId`, que é chamado sempre que um userId é usado. Testes relacionados à nova implementação também foram adicionados. + +**Arquivos Alterados:** `UserService.java`, `UserServiceTest.java` + +**Alterações:** + +- Em `UserService.java`, foi adicionado um novo método `validateUserId`. Este método chama `ValidationUtils.checkNotNullAndNotEmptyOrThrowException` para garantir que userId não seja nulo ou vazio. Depois disso, tenta validar userId como um UUID válido usando `UuidUtils.isValidUUID`. +- `validateUserId` é chamado em múltiplos lugares no `UserService.java`, como `getUser`, `changePassword` e `changeUserName`. +- Em `UserServiceTest.java`, foram adicionados novos testes para verificar se a exceção `UserServiceFailureException` é lançada quando um userId inválido é passado para `getUser`, `changePassword` e `changeUserName`. + +**Nota:** Este commit se concentrará principalmente na validação de userId. O código agora garante que todos os userIds no sistema sejam UUIDs válidos para evitar problemas futuros. + +--- + +**Commit** 7b1e6662913d80a4dd27e759dfddd3eb4842911b: + +Este commit adiciona um novo conjunto de métodos ao `Shelter` que retornam todas as doações associadas ao abrigo. Nos testes, a maneira de obter doações do abrigo foi ajustada para usar o novo método criado, em vez de refletir diretamente na variável. + +**Arquivos Alterados:** `Shelter.java`, `ShelterContract.java`, `ShelterTest.java` + +**Alterações:** + +- Um novo método `getDonations` foi adicionado à classe `Shelter`. Este método retorna todas as doações associadas a este abrigo. +- O método `getDonations` também foi adicionado à interface `ShelterContract`. Ele define que um abrigo deve ser capaz de retornar todas as doações a ele associadas. +- Em `ShelterTest`, o código foi alterado para utilizar o novo método `getDonations` quando se quer verificar as doações de um abrigo. Anteriormente, isso era feito através de reflexão, que é uma prática menos segura e mais propensa a erros. + +**Nota:** Este commit foca principalmente em adicionar um novo método para obter todas as doações associadas a um abrigo. Este é um passo para tornar o código mais seguro e legível. + +--- + +**Commit** 389a611d105272d3396022e7d8ec6b16816d85e5: + +Este commit adiciona novas classes para manipular abrigos, o que inclui a criação de classes de repositório, serviço e exceção, juntamente com testes associados. Operações de gerenciamento incluem criar um abrigo, alterar o nome e o endereço de um abrigo, adicionar uma doação, e obter detalhes de um abrigo. Além disso, novas exceções foram adicionadas para lidar com erros que podem ocorrer durante a manipulação de abrigos. + +**Arquivos Adicionados:** `ShelterRepository.java`, `ShelterServiceFailureException.java`, `ShelterService.java` + +**Alterações:** + +- `ShelterRepository.java`: Esta interface define o contrato para um repositório que persiste e recupera as entidades Shelter. +- `ShelterServiceFailureException.java`: Esta é uma classe de exceção personalizada que estende a RuntimeException. É usada especialmente para lidar com erros que ocorrem durante a criação de um abrigo. +- `ShelterService.java`: A classe de serviço ShelterService é responsável pelas operações de negócios relacionadas a abrigos. Estas operações incluem criação de abrigos, busca por abrigos e alterações nos atributos dos abrigos. + +**Nota:** Este commit se concentra na adição de novas classes e métodos para manipular abrigos, que é um passo essencial para o gerenciamento de abrigos no sistema. + +--- + +**Commit** 03c8a914696ad46ef59581396a9415c4827163e3: + +Este commit atualiza os javadocs em vários arquivos, mudando as tags de versão para indicações de "since". Isso melhora a documentação e reflete de maneira mais apropriada que as classes ou métodos são considerados como parte do projeto desde a versão indicada. + +**Arquivos Alterados:** +`CorsConfig.java`, `OpenApiConfig.java`, `WebSecurityConfig.java`, `Shelter.java`, `ShelterContract.java`, `Address.java`, `Donation.java`, `ShelterFactory.java`, `ShelterRepository.java`, `User.java`, `UserContract.java`, `UserProfile.java`, `UserFactory.java`, `UserRepository.java` + +**Alterações:** + +- Javadocs em arquivos foram alterados para usar a tag "@since" em vez de "@version" para indicar desde qual versão essas classes ou métodos estão disponíveis. + +**Nota:** A principal mudança deste commit foi para atualizar a documentação das classes, o que melhora a manutenibilidade e a compreensibilidade do código para os futuros mantenedores. + +--- + +**Commit** 3612f0bde4ae449b32256b2ae8bd92b5f2c8ea8d: + +Este commit adiciona um novo método privado para validar o ID do usuário na classe `UserService`. Este é um método importante que é chamado antes de várias outras operações. Foram feitas também algumas pequenas alterações de formatação para melhor alinhamento dos parâmetros dos métodos. + +**Arquivos Alterados:** `UserService.java` + +**Alterações:** + +- Adicionado um novo método privado `validateUserId` para validar se o ID do usuário fornecido é válido. +- Realizadas pequenas alterações de formatação para alinhar melhor os parâmetros dos métodos. + +**Nota:** O principal foco deste commit é melhorar a validação e a qualidade do código através da adição de verificação de ID do usuário e ajuste de formatação. + +--- + +**Commit** 7e5e43c5d680fdcd524fac6a41f057040652d497: + +Este commit refatora as importações nos testes `ShelterServiceTest` e `UserServiceTest`. As importações desnecessárias foram removidas e as importações relacionadas ao Assertions foram reorganizadas para melhorar a clareza. Algumas classes não utilizadas foram também removidas para manter o código limpo. + +**Arquivos Alterados:** `ShelterServiceTest.java`, `UserServiceTest.java` + +**Alterações:** + +- Remoção de importações desnecessárias. +- Reorganização das importações de Assertions para melhor clareza e legibilidade. +- Remoção de classes que não estavam sendo utilizadas. + +**Nota:** O principal objetivo deste commit é melhorar a legibilidade e a organização do código, mantendo-o limpo e conciso. + +--- + +**Commit** da7c7b55874ea6d4d05c68b1c28db8a7f6122b10: + +Este commit adiciona várias entidades de banco de dados que representam Donation, Shelter e Address, bem como um enum de perfil de usuário. As entidades de banco de dados são utilizadas para modelar a estrutura do banco de dados e facilitar as operações de banco de dados, enquanto o enum de perfil de usuário é utilizado para categorizar os usuários em diferentes perfis. + +**Arquivos Adicionados:** +- `UserProfileType.java` +- `AddressEntity.java` +- `DonationEntity.java` +- `ShelterEntity.java` + +**Alterações:** + +- Adicionada a enumeração `UserProfileType` com os perfis disponíveis para um usuário: 'Doador' e 'Beneficiário'. +- Adicionada a classe `AddressEntity` que representa um objeto de endereço no banco de dados mapeado para a tabela "address" +- Adicionada a classe `DonationEntity` que representa um objeto de doação no banco de dados mapeado para a tabela "donations". +- Adicionada a classe `ShelterEntity` que representa um objeto de abrigo no banco de dados mapeado para a tabela "shelters". + +**Nota:** Este commit foca na definição da estrutura básica do banco de dados e na categorização de usuários em diferentes perfis de usuário. + +--- + +**Commit** eb77a61034db8d631f2f903c7a2fa6f7db95dd8e: + +Este commit atualiza os nomes dos métodos do repositório que estão sendo usados no `ShelterServiceTest` e `UserServiceTest`. As mudanças incluem a alteração de `save` para `persist`, `findById` para `findEntityById`, e a atualização do nome dos repositórios. Os testes foram também atualizados para refletir essas mudanças. + +**Arquivos Alterados:** +- `ShelterEntity.java` +- `ShelterRepository.java` renomeado para `ShelterContractRepository.java` +- `UserRepository.java` renomeado para `UserContractRepository.java` +- `RepositoryContract.java` +- `ShelterService.java` + +**Alterações:** + +- Remoção do comentário de `UserEntity responsibleUser` em `ShelterEntity.java`. +- Alteração do nome do `ShelterRepository` para `ShelterContractRepository` em `ShelterService.java` e no próprio arquivo `ShelterRepository.java`. +- Alteração do nome do `UserRepository` para `UserContractRepository` no próprio arquivo `UserRepository.java`. +- Atualização dos nomes dos métodos do repositório de acordo com as novas alterações na classe `RepositoryContract.java`. +- Atualização dos métodos em `ShelterService.java` para usar os novos nomes dos métodos do repositório. + +**Nota:** A principal ênfase deste commit é atualizar a nomenclatura dos métodos do repositório para melhorar a clareza e consistência do código. + +--- + +**Commit** 5bb4b9a6dff4553c27f0fd548dd06db65ac19eb1: + +Este commit adiciona novas classes de mapeamento para lidar com a conversão de entidades de persistência em objetos de domínio. Ele também inclui a adição de novas classes de exceções personalizadas para fornecer mensagens de erro mais detalhadas durante a manipulação dos dados das entidades. + +**Arquivos Adicionados:** +- `ExceptionDetails.java` +- `ConstructorDefaultUndefinedException.java` +- `MapperFailureException.java` +- `ShelterEntityFailuresException.java` +- `BuilderMapper.java` + +**Alterações:** + +- Adicionada a classe `ExceptionDetails.java` que é uma enumeração que define várias mensagens de exceções. +- Adicionada a classe `ConstructorDefaultUndefinedException.java` que é uma exceção personalizada lançada quando não é definido um construtor padrão. +- Adicionada a classe `MapperFailureException.java` que é uma exceção personalizada para gerenciar falhas durante o processo de mapeamento. +- Adicionada a classe `ShelterEntityFailuresException.java` que é uma exceção personalizada lançada quando ocorre uma falha em uma operação relacionada ao `ShelterEntity`. +- Adicionada a classe `BuilderMapper.java` que fornece métodos para mapear os campos de um objeto fonte para os campos de uma classe destino. + +**Nota:** A principal ênfase deste commit é adicionar classes de mapeamento e exceção personalizadas para manipulação consistente de conversões de entidade de persistência para objetos de domínio e gerenciamento de erros durante essas operações. Isso aprimora a robustez e a transparência do código, fornecendo mensagens de erro mais informativas. + +--- + +**Commit** 69804a5fca3a7c420a4de00b0322a5f804ee137d: + +Este commit adiciona a classe `ShelterRepository` que é responsável pela persistência de dados relacionados a abrigos. Implementa operações CRUD e adiciona suas próprias operações básicas, como encontrar por ID, buscar todas, persistir e deletar. Mecanismos de mapeamento foram utilizados para desacoplar a conversão entre entidades JPA e objetos de domínio. + +**Arquivos Adicionado:** +- `ShelterRepository.java` + +**Alterações:** + +- Adicionada a classe `ShelterRepository` que é responsável pela persistência de dados relacionados a abrigos. Ela implementa operações CRUD e implementa também suas próprias operações básicas, como encontrar por ID, buscar todas, persistir e deletar. + +**Nota:** A principal ênfase deste commit é a criação do repositório `ShelterRepository` que é crucial para a persistência de dados relacionados a abrigos. Os mecanismos de mapeamento utilizados auxiliam na conversão entre entidades JPA e objetos de domínio, promovendo um código mais limpo e desacoplado. + +--- + +**Commit** 5f009c3a9d4327d5576865bd6d475e9c4fd7f29b: + +Este commit adiciona exceções personalizadas para falhas no endereço e usuário, além de estratégias de mapeamento para converter entidades de abrigo para entidades de domínio. Agora, as doações associadas a um abrigo são corretamente mapeadas e atribuídas ao objeto de abrigo durante a construção. A cobertura do teste foi estendida para abordar esses novos cenários. + +**Arquivos Adicionados:** +- `AddressEntityFailuresException.java` +- `UserEntityFailuresException.java` + +**Arquivos Alterados:** +- `ExceptionDetails.java` +- `MapperStrategy.java` +- `ShelterMapper.java` + +**Alterações:** + +- Adicionadas as exceções `AddressEntityFailuresException` e `UserEntityFailuresException`. +- Atualizados os detalhes de exceção em `ExceptionDetails.java` para fornecer mensagens de erro mais específicas. +- Atualizada a estratégia de mapeamento do objeto `MapperStrategy` para refletir a alteração de 'origem' para 'source'. +- Atualizado o `ShelterMapper` para incluir o mapeamento de doações associadas ao abrigo. + +**Nota:** Este commit incide sobre a adição de exceções personalizadas para fornecer mensagens de erro mais específicas e úteis. Além disso, melhorou o mapeamento de objetos para cobrir associações complexas, como mapear doações para um abrigo. + +--- + +**Commit** ea36a07eb5bee11bdae27f783ffcb318faa0faf5: + +Neste commit foram implementados as verificações de dados em `UserMapper` para garantir que os dados não sejam nulos ou vazios antes das operações de mapeamento. Também foram adicionados testes unitários correspondentes para essas validações. Além disso, a exceção `ConstructorDefaultUndefinedException` foi expandida para aceitar uma mensagem personalizada. + +**Arquivo Alterados:** +- `ConstructorDefaultUndefinedException.java` +- `UserMapper.java` + +**Arquivo Adicionado:** +- `UserMapperTest.java` + +**Alterações:** + +- Adicionado no `ConstructorDefaultUndefinedException` um construtor que permite definir uma mensagem de erro personalizada. +- Implementado o método `validateData` em `UserMapper` que valida se os dados fornecidos são nulos ou vazios, lançando uma exceção se qualquer uma dessas condições for verdadeira. +- Adicionado `UserMapperTest` para testar o mapeamento de um `UserEntity` para um `User` e vice-versa, além de testar o lançamento de exceções quando os dados são nulos ou vazios. + +**Nota:** Este commit foca em garantir a qualidade dos dados durante o mapeamento entre `UserEntity` e `User`, adicionando validações de dados e expandindo as capacidades de tratamento de exceções. + +--- + +**Commit** 8e4e95a8ca320f7bf75043d85aac35a8db46e1c3: + +Neste commit, foram adicionados os adaptadores `AddressMapper` e `UserEntityMapper` para converter `AddressEntity` em objetos `Address` e objetos `User` em entidades `UserEntity`, respectivamente. Testes de unidade correspondentes foram adicionados para assegurar a funcionalidade correta do mapeamento. Atualizações foram feitas no `BuilderMapper` para permitir mais funcionalidades de mapeamento. + +**Novos Arquivos:** +- `AddressMapper.java` +- `UserEntityMapper.java` + +**Arquivo Alterado:** +- `BuilderMapper.java` + +**Alterações:** +- Implementado o `AddressMapper` para converter objetos `AddressEntity` em objetos `Address`, incluindo a validação de dados e gerenciamento de exceções. +- Implementado o `UserEntityMapper` para converter objetos `User` em entidades `UserEntity`. +- O `BuilderMapper` foi atualizado para gerenciar a criação de instâncias de classe com construtores não-padrão. + +**Nota:** Este commit se concentra em melhorar as capacidades de mapeamento do projeto, adicionando novos adaptadores de mapeamento e expandindo as funcionalidades do `BuilderMapper`. + +--- + +**Commit** 1c8e3d09220490f41b5533191467bd689efe6b9e: + +Neste commit, a classe `Address` foi atualizada para incluir um campo de ID. As checagens de validação de campo foram atualizadas para incluir checagens para IDs válidas e foram adicionadas as exceções apropriadas. Também foram adicionados teste para confirmar a funcionalidade da criação do ID do endereço e do tratamento de exceções. + +**Arquivos alterados:** +- `AddressMapper.java` +- `Address.java` +- `AddressCreationFailureException.java` +- `AddressTest.java` + +**Alterações:** +- Adicionado campo ID na classe `Address` e atualizamos o construtor e os métodos de validação correspondentes. +- O método `mapFrom` no `AddressMapper` foi atualizado para mapear o ID do `AddressEntity` para o `Address`. +- `AddressCreationFailureException` foi extendido para suportar exceções causadas por IDs inválidos. +- `AddressTest` foi atualizado para testar a nova funcionalidade de ID. + +**Nota:** Este commit foca na aprimoração das funcionalidades do objeto `Address` acrescentando um campo de ID e adicionando a lógica de validação apropriada. + +--- + +**Commit** 2df853b611f0d6a14cb399807cd3af6e20a18808: + +Este commit adiciona a validação de ID na entidade `Donation`. Agora, a entidade é validada para garantir que o ID seja um UUID válido, também foram adicionados testes unitários para cobrir esses novos casos de erro. Além disso, o código foi refatorizado para utilizar a utilidade de validação para checagens de valores nulos e vazios. + +**Arquivos alterados:** +- `Donation.java` +- `DonationRegisterFailureException.java` +- `DonationTest.java` + +**Alterações:** +- Adicionado campo ID na classe `Donation` com validação para garantir que seja um UUID válido. +- `DonationRegisterFailureException` foi ampliado para suportar exceções causadas por IDs inválidos. +- Testes adicionados em `DonationTest` para verificar o comportamento com IDs inválidos. +- Refatorado o código para usar `ValidationUtils` para verificações de nulidade e vazio. + +**Nota:** Este commit foca na melhoria das funcionalidades do objeto `Donation`, adicionando um campo de ID com a lógica de validação apropriada e refatorando o código para reuso. + +--- + +**Commit** 6e1641e950bd467f7d74afe434e1d060dd7cbf3a: + +Este commit atualiza as classes `ShelterTest`, `ShelterServiceTest`, `ShelterMapper` e `ShelterMapperTest` para substituir a criação de objetos `Address` e `Donation` com novos construtores que incluem IDs. Essas alterações ajudam a evitar a criação de objetos duplicados e melhorar a identificação de objetos durante a execução do código. + +**Arquivos Alterados:** +- `ShelterMapper.java` +- `ShelterMapperTest.java` +- `ShelterTest.java` +- `ShelterServiceTest.java` + +**Alterações:** + +- No `ShelterMapper.java`, o mapeamento foi alterado para os construtores com ID em vez dos construtores sem ID para os objetos `Address` e `Donation`. +- No `ShelterMapperTest.java`, o mapeamento foi atualizado para usar construtores com IDs para `Address` e `Donation`. +- No `ShelterTest.java`, foi atualizada a geração de objetos `Address` e `Donation` para modelos que aceitam IDs. +- No `ShelterServiceTest.java`, foi atualizado o modelo de `Address` para um modelo que aceita ID. + +**Nota:** Este commit se concentra na atualização do mapeamento e testes de unidades para se alinhar com mudanças recentes nos construtores de `Address` e `Donation`. + +--- + +**Commit** 4e1819e1423c4780e2fe5a3fd9f55adab902b43f: + +Este commit atualiza a classe `UserEntityMapper` para incluir uma documentação mais detalhada sobre seu uso e funcionamento. Também foi removida a exceção 'ConstructorDefaultUndefinedException', tornando o código mais limpo e legível. + +**Arquivos Alterados:** +- `UserEntityMapper.java` + +**Alterações:** + +- A documentação foi expandida e melhorada na classe `UserEntityMapper`, incluindo informações mais detalhadas sobre o propósito da classe e o uso de seus métodos. +- A exceção `ConstructorDefaultUndefinedException` foi removida como parte dos catchs do método de mapeamento, o que torna o código mais legível. + +**Nota:** A ênfase principal neste commit foi na melhoria da documentação de classe e na limpeza do código para melhor legibilidade e manutenibilidade. + +--- + +**Commit** 9dc93888fd8a7bee62ada68fb5eafa9e2b2ff1e8: + +Este commit remove a anotação `@GeneratedValue` dos IDs em `AddressEntity.java` e `DonationEntity.java`. A partir de agora, a geração do UUID será responsabilidade do código que cria uma instância dessas entidades. + +**Arquivos Alterados:** +- `AddressEntity.java` +- `DonationEntity.java` + +**Alterações:** + +- As anotações `@GeneratedValue` foram removidas dos IDs em `AddressEntity.java` e `DonationEntity.java`. Isso implica que o próprio código agora terá a responsabilidade de gerar os UUIDs quando criar instâncias dessas entidades. + +**Nota:** Este commit se concentra em transformar a geração de UUIDs para as entidades `Address` e `Donation` em uma responsabilidade do código que cria instâncias dessas entidades, em vez de confiar na auto geração pelo JPA. + +--- + +**Commit** caf02cfe13f195e5edbd20daa2c7a3d43bee9e18: + +Este commit introduz novas classes de mapeamento para gerenciar a conversão entre entidades de doação e objetos de domínio. Essas classes recém-criadas são `DonationMapper` e `DonationEntityMapper`. Configurações de testes unitários correspondentes também foram implementadas para garantir a funcionalidade correta dessas classes. Além disso, este commit também apresenta a classe `DonationFactory` para lidar com a criação de instâncias de doação. + +**Arquivos Adicionados:** +- `DonationEntityMapper.java` +- `DonationMapper.java` +- `DonationFactory.java` +- `DonationEntityMapperTest.java` +- `DonationMapperTest.java` +- `DonationFactoryTest.java` + +**Alterações:** + +- A nova classe `DonationEntityMapper` foi adicionada, que implementa o mapeamento de objetos de domínio `Donation` para entidades `DonationEntity`. +- A nova classe `DonationMapper` foi adicionada, que implementa o mapeamento de entidades `DonationEntity` para objetos de domínio `Donation`. +- A nova classe `DonationFactory` foi adicionada, que fornece uma função de fábrica para a criação de instâncias `Donation`. +- Novos testes unitários foram adicionados para `DonationEntityMapper`, `DonationMapper` e `DonationFactory` para garantir que as classes implementem a funcionalidade correta. + +**Nota:** Este commit visa melhorar a manutenção e a postoerior manutenção do código, separando a lógica de mapeamento de `Donation` e `DonationEntity` em classes separadas e não espalhado por todo o código. + +--- + +**Commit** 0ab93e8348434a81e2970f5fdfd22c7c86315d10: + +Este commit introduz o mapeador de entidades de endereço, testes para o mapeador e uma fábrica de endereços. O mapeador é usado para traduzir as entidades de endereço do domínio para as entidades de endereço que podem ser armazenadas no banco de dados, e vice-versa. A fábrica de endereço, por sua vez, fornece um meio centralizado e simplificado para criar novas entidades de endereço. + +**Arquivos Adicionados:** +- `AddressEntityMapper.java` +- `AddressFactory.java` +- `AddressEntityMapperTest.java` + +**Alterações:** + +- A nova classe `AddressEntityMapper` foi adicionada, que implementa o mapeamento de objetos de domínio `Address` para entidades `AddressEntity`. +- A nova classe `AddressFactory` foi adicionada, que fornece uma função de fábrica para a criação de instâncias `Address`. +- Novos testes unitários foram adicionados para `AddressEntityMapper` para garantir que a classe implemente a funcionalidade correta. + +**Nota:** Este commit visa melhorar a manutenção e posterior manutenção do código, separando a lógica de mapeamento de `Address` e `AddressEntity` em classes separadas e não espalhado por todo o código. + +--- + +**Commit** a74194682c4635aeaa9e7fe03ea57821f6554cf5: + +Este commit introduz a classe ShelterEntityMapper, que é responsável pelo mapeamento da entidade de abrigo. A implementação inclui funções para mapear de entidades para objetos de domínio e vice-versa, bem como tratamento de exceções. Além disso, inclui testes unitários extensivos para verificar a funcionalidade do mapeador. + +**Arquivos Adicionados:** +- `ShelterEntityMapper.java` +- `ShelterEntityMapperTest.java` + +**Alterações:** + +- A nova classe `ShelterEntityMapper` foi adicionada, que implementa o mapeamento de objetos de domínio `Shelter` para entidades `ShelterEntity`. +- Novos testes unitários foram adicionados para `ShelterEntityMapper` para garantir que a classe implemente a funcionalidade correta. + +**Nota:** Este commit visa melhorar a manutenção e posterior manutenção do código, separando a lógica de mapeamento de `Shelter` e `ShelterEntity` em classes separadas e não espalhado por todo o código. + +--- + +**Commit** a2ba3d880cdfb3c38e9a0c1e78e72f993e69a45d: + +Este commit atualiza a classe ShelterMapper para melhorar a clareza e robustez do mapeamento de ShelterEntity para Shelter. A verificação de objeto source não nulo foi adicionada e o tratamento de exceções foi aprimorado. As mudanças nos testes acrescentam testes parametrizados e atualizam verificações de erro. + +**Arquivos Alterados:** +- `ShelterMapper.java` +- `ShelterMapperTest.java` + +**Alterações:** + +- Na classe `ShelterMapper.java`, a verificação de objeto source não nulo foi adicionada e o tratamento de exceções foi aprimorado para melhor lidar com erros de runtime. +- Em `ShelterMapperTest.java`, foram adicionados testes parametrizados e atualizadas as verificações de erro de acordo com as mudanças implementadas em `ShelterMapper.java`. + +**Nota:** Essas alterações visão o fortalecimento e a clareza do mapeamento de entidades, além de aumentar a cobertura de testes para situações diversas de erro. + +--- + +**Commit** fd8c2a0d83d5471aef6aee0d7fb666f67e393bcd: + +Este commit atualiza o mapeamento e a persistência de entidades no reposítorio `ShelterRepository`. Foram feitas alterações significativas no método `findEntityById`, removendo a captura de exceções e substituindo pela chamada direta ao método `mapFrom`. Adicionalmente, foi implementada a lógica de persistência, que garante a não nulidade de uma entidade antes de sua persistência. A entidade é mapeada para o formato correto antes de ser persistida. + +**Arquivos Alterados:** +- `ShelterRepository.java`, `AddressEntity.java`, `DonationEntity.java`, `Donation.java`, `ShelterEntityMapperTest.java`, `ShelterTest.java`, `DonationTest.java` + +**Alterações:** + +- As anotações `GeneratedValue` e `GenerationType` foram removidas dos arquivos `AddressEntity` e `DonationEntity`. +- No repositório `ShelterRepository`, a chamada ao método `mapFrom` foi direcionada para a classe `ShelterMapper` ao invés da interface `MapperStrategy`. +- Foram implementados detalhamentos no javadoc do método de persistência do `ShelterRepository`. +- A lógica de verificação de que a entidade a ser persistida não é nula foi implementada no handling de persistência em `ShelterRepository`, antes da chamada ao método save do `CrudRepository`. +- O método de persistência em `ShelterRepository` chama o `mapFrom` da classe `ShelterEntityMapper` para transformar a entidade em `Shelter`. +- As propriedades no objeto `Donation` foram alteradas para imutáveis (final). +- O tratamento de exceção `MapperFailureException` foi removido de `ShelterRepository` e substituído pela chamada direta ao método `mapFrom`. + +**Nota:** A principal ênfase desta confirmação é melhorar a lógica de persistência e mapeamento no repositório `ShelterRepository`, ao mesmo tempo que melhora a imutabilidade dos objetos `Donation`. + +--- + +**Commit** c181f2b97c512de00e49bdb9bc619b0670bcf255: + +Este commit adiciona testes de integração para o repositório `ShelterRepository`. Os testes abordam todas as operações básicas do repositório Shelter, incluindo recuperação, persistência e exclusão de entidades Shelter. Além disso, validações e exceções são testadas para garantir a robustez da implementação. + +**Arquivos Alterados:** `ShelterRepository.java`, `ShelterRepositoryIntegrationTest.java` (novo arquivo de teste) + +**Alterações:** + +- `ShelterRepository.java`: Foi adicionada uma verificação para garantir que a lista de entidades não seja nula ou vazia no método `mapEntityList`. +- `ShelterRepositoryIntegrationTest.java`: Este é um novo arquivo que inclui vários testes de integração projetados para validar as várias funcionalidades em `ShelterRepository`, incluindo a recuperação, persistência e exclusão de entidades, bem como os campos e associações relacionados. + +**Nota:** A principal ênfase desta submissão é aprimorar a validade e integridade dos testes implementados para o repositório `ShelterRepository`. + +--- + +**Commit** 325fc20c528eab9b32d7d89df1a5e85e28f87a91: + +Este commit altera o método de validação de dados `checkNotNullAndNotEmptyOrThrowException` para `validateNotNullOrEmpty` em várias partes do código, simplificando a verificação dos dados e tornando o código mais legível e conciso. Agora, há apenas um passo para validação de dados, economizando tempo de execução. + +**Arquivos Alterados:** `AddressEntityMapper.java`, `AddressMapper.java`, `DonationEntityMapper.java`, `DonationMapper.java`, `ShelterEntityMapper.java`, `ShelterMapper.java`, `UserEntityMapper.java`, `UserMapper.java`, `ShelterRepository.java`, `Shelter.java` + +**Alterações:** + +- O método de validação foi substituído em todos os arquivos alterados, substituindo `checkNotNullAndNotEmptyOrThrowException` por `validateNotNullOrEmpty`. + +**Nota:** A principal ênfase deste commit é simplificar o processo de validação de dados, unindo a verificação de nulidade e vazio em um único método e tornando o código mais legível e conciso. + +--- + +**Commit** 70d2f448e7e970aeaea60c32f2713f781d669dae: + +Este commit adiciona a funcionalidade de pesquisa de usuário por e-mail. Isso inclui a criação de um novo endpoint para recuperar os detalhes de um usuário com base em seu e-mail, bem como a criação de novas classes de DTO para mapear a entidade do usuário e a criação de um novo serviço para executar a pesquisa do usuário. Além disso, foram adicionados testes unitários para garantir que o novo endpoint funcione conforme esperado. + +**Arquivos Adicionados:** `UserEntityDTO.java`, `UserRepository.java`, `UserEntityService.java`, `UserEntityServiceImpl.java`, `UserRepositoryTest.java` + +**Alterações:** + +- `UserEntityDTO.java`: Classe modelo DTO para um usuário. Contém informações básicas sobre um usuário, incluindo o id do usuário, o nome do usuário, o e-mail e o tipo de perfil do usuário. +- `UserRepository.java`: Adicionada uma nova funcionalidade para recuperar um usuário do repositório pelo e-mail. +- `UserEntityService.java`: Interface do serviço de entidade de usuário criada para definir a operação de busca de usuário pelo e-mail. +- `UserEntityServiceImpl.java`: Implementação da interface de serviço de entidade de usuário. A nova implementação inclui um método para recuperar usuário pelo e-mail. +- `UserRepositoryTest.java`: Testes unitários para a funcionalidade de busca de usuário pelo e-mail. + +**Nota:** Este commit foca na adição de uma nova funcionalidade que permite a busca de um usuário por e-mail. Esta implementação envolve não apenas a criação do endpoint de busca, mas também a implementação dos métodos de serviço correspondentes e a execução de testes para garantir que a funcionalidade esteja funcionando conforme esperado. + +--- + +**Commit** 39b658255cf4391c1e5b414cfab78d3d56732a2b: + +Este commit inclui novos DTOs para endereço e criação de abrigos, além de repositórios para endereços e doações. Também foram criadas classes para lidar com a resposta à criação de um abrigo e a solicitação de criação de um abrigo. + +**Arquivos Adicionados:** `AddressDTO.java`, `AddressRepository.java`, `DonationRepository.java`, `ShelterCreationRequest.java`, `ShelterCreatedResponse.java` + +**Alterações:** + +- `AddressDTO.java`: DTO criado para representar um endereço, contém informações básicas de endereço, como rua, número, bairro, cidade, estado e CEP. +- `AddressRepository.java`: Repositório criado para lidar com operações de banco de dados para o DTO de endereço. +- `DonationRepository.java`: Repositório criado para lidar com operações de banco de dados para a entidade de doação. +- `ShelterCreationRequest.java`: Classe de solicitação criada para lidar com a solicitação de criação de um abrigo. Contém informações essenciais para a criação de um abrigo, incluindo o nome do abrigo, um AddressDTO representando o endereço do abrigo, e o e-mail do usuário responsável pelo abrigo. +- `ShelterCreatedResponse.java`: Classe de resposta criada para lidar com a resposta da criação de um abrigo. Contém informações sobre a resposta da criação de um abrigo, incluindo o id do novo abrigo, o nome do abrigo, o endereço do abrigo, e o usuário responsável pela criação do abrigo. + +**Nota:** Este commit foca na preparação dos componentes necessários para a criação e resposta de abrigos. Isso inclui a adição de novos DTOs, repositórios para lidar com as operações do banco de dados e as classes de solicitação e resposta necessárias. + +--- + +**Commit** 6ac28958a25f110a54442557630fad78a0efaaca: + +Este commit adiciona a funcionalidade de criação de um novo abrigo no sistema, através das classes `ShelterEntityService` e `ShelterEntityServiceImpl`. Essa implementação também inclui testes para essa funcionalidade na classe `ShelterEntityServiceImplTest`. + +**Arquivos Adicionados:** `ShelterEntityService.java`, `ShelterEntityServiceImpl.java`, `ShelterEntityServiceImplTest.java` + +**Alterações:** + +- `ShelterEntityService.java`: Interface de serviço criada para definir a operação de criação de abrigos. +- `ShelterEntityServiceImpl.java`: Implementa a interface `ShelterEntityService` e inclui a lógica para criar um abrigo no sistema. Ele busca um usuário responsável, cria um endereço e, finalmente, cria um abrigo. O abrigo criado é persistido no repositório de abrigos. +- `ShelterEntityServiceImplTest.java`: Testes para a funcionalidade de criação de abrigos. Ele verifica se a criação de um abrigo está funcionando como esperado e faz asserções para verificar a integridade dos dados do abrigo criado. + +**Nota:** Este commit enfoca a implementação da lógica necessária para criar um abrigo e persisti-lo no banco de dados. Com isso, os usuários agora podem criar novos abrigos no sistema. + +--- + +**Commit** 6dc20873197bc7684422c477a9cbf4aeabfb8039: + +Esse commit substitui a entidade User pela entidade UserContract nos mappers. Agora, as classes `UserMapper` e `UserEntityMapper` operam com `UserContract` em vez de `User`. Alterações correspondentes também foram refletidas nos respectivos testes para garantir que eles funcionem com a nova configuração. + +**Arquivos Alterados:** `UserEntityMapper.java`, `UserMapper.java`, `UserEntityMapperTest.java`, `UserMapperTest.java` + +**Alterações:** + +- `UserEntityMapper.java`: A entidade 'User' foi substituída por 'UserContract' nos métodos do mapper. +- `UserMapper.java`: A entidade 'User' foi substituída por 'UserContract' nos métodos do mapper. +- `UserEntityMapperTest.java`: Testes foram atualizados para refletir as alterações no 'UserEntityMapper'. +- `UserMapperTest.java`: Testes foram atualizados para refletir as alterações no 'UserMapper'. + +**Nota:** A principal mudança desse commit é a substituição da entidade `User` pela `UserContract` nos mappers. Isso proporciona maior flexibilidade e abstração na transformação de dados entre as camadas da aplicação. + +--- + +**Commit** 28c1baa345cb68cb7aa17b1cfbcb528481bdb0c4: + +Este commit atualiza o uso da classe `Shelter` para a classe `ShelterContract` para manter a consistência em todo o código. + +**Arquivos Alterados:** `ShelterEntityMapper.java`, `ShelterMapper.java` + +**Alterações:** + +- `ShelterEntityMapper.java`: `Shelter` foi substituído por `ShelterContract` nos métodos do mapper. Isso inclui mudanças nos comentários do método para refletir essa mudança. +- `ShelterMapper.java`: `Shelter` foi substituído por `ShelterContract` nos métodos do mapper. Isso inclui mudanças nos comentários do método, o método `mappedDonationsToShelter` para refletir essa mudança. + +**Nota:** Este commit refatora o código para usar a interface `ShelterContract` ao invés da classe `Shelter` a fim de manter a consistência ao longo do código. Isso facilita a leitura e a manutenção do código, tornando-o mais eficiente. + +--- + +**Commit** d0804574b881ba87391feee765a1fd94c7db51af: + +Este commit aprimora a funcionalidade de mapeamento de objetos em `BuilderMapper`, tornando a função mais genérica e mais segura ao lançar exceções quando os parâmetros fornecidos são nulos. + +**Arquivos Alterados:** `ExceptionDetails.java`, `BuilderMapper.java`, `UserEntityServiceImpl.java`, `UserEntityMapperTest.java` + +**Alterações:** + +- `ExceptionDetails.java`: Altera a mensagem de erro para `CLASS_MAPPING_FAILURE`. +- `BuilderMapper.java`: Atualiza a função `mapTo` para ser mais genérica e lançar exceções quando o objeto de origem ou a estratégia de mapeamento são nulos. +- `UserEntityServiceImpl.java`: Atualiza a chamada para a função `mapTo` em `searchUserByEmail`. +- `UserEntityMapperTest.java`: Atualiza os testes para refletir as alterações no `BuilderMapper`. + +**Nota:** Este commit aprimora a funcionalidade de mapeamento de objetos em `BuilderMapper`, tornando o método mais robusto e seguro ao lidar com possíveis entradas nulas. Isso melhora a qualidade do código e o torna mais resistente a possíveis erros de execução. + +--- + +**Commit** aa23f62db86eaf66eedb6a40a2284798776c360c: + +Este commit inclui uma refatoração extensa no serviço `ShelterEntity` e testes relacionados. A lógica complexa foi reestruturada em métodos mais gerenciáveis e foram adicionados vários casos de teste para aumentar a cobertura e garantir a robustez do código. + +**Arquivos Alterados:** `ShelterRepository.java`, `ShelterEntityServiceImpl.java`, `ShelterEntityMapperTest.java`, `ShelterEntityServiceImplTest.java` + +**Alterações:** + +- `ShelterRepository.java`: Atualiza o método `persist` para utilizar a classe `BuilderMapper` para mapeamento de entidades. +- `ShelterEntityServiceImpl.java`: Faz várias mudanças para melhoria da qualidade do código. A lógica de criação do abrigo e endereço e persistência dessas entidades foram movidas para métodos separados para melhor legibilidade. As mensagens de erro também foram melhoradas. +- `ShelterEntityMapperTest.java`, `ShelterEntityServiceImplTest.java`: Os testes foram atualizados para refletir as alterações no serviço `ShelterEntity`. + +**Nota:** Este commit realiza uma refatoração extensa no serviço `ShelterEntity` e seus testes correspondentes para melhorar a qualidade do código e a cobertura dos testes. Isso aumenta a robustez do código e a facilidade de manutenção. + +--- + +**Commit** a5e09f8a1fc54957d9dee7602381a7cd3254893a: + +Esse commit adiciona documentação Javadoc detalhada para todas as classes de serviço e repositório, fornecendo descrições abrangentes de suas funções, métodos, autores e versões. A documentação é crucial para entender e manter corretamente o código no futuro. + +**Arquivos Alterados:** + +Classe de Repositório: + +- `AddressRepository.java` +- `DonationRepository.java` +- `UserRepository.java` + +Classe de Serviço: + +- `ShelterEntityService.java` +- `UserEntityService.java` +- `ShelterEntityServiceImpl.java` + +**Alterações:** + +Nesse commit, cada classe teve alterações substancias em seus comentários, incrementando a documentação dos métodos, classes e suas funcionalidades de maneira detalhada. Como exemplo, temos a documentação dos métodos da classe `ShelterEntityService`, que descreve o propósito, parâmetros, retornos e possíveis exceções de cada método. + +**Nota:** Este commit aumenta significativamente a legibilidade e a compreensibilidade do código por meio de comentários Javadoc detalhados. Isso é essencial para o entendimento correto do funcionamento do código e facilita a manutenção e futuras atualizações. + +--- + +**Commit** 9372e7a263787d278e9792c2ef06682a62e83fa1: + +Este commit atualiza o README.md para incluir um link direto para a documentação Swagger do projeto e modifica algumas tags em OpenApiConfig.java para refletir melhor as funcionalidades do sistema. Além disso, algumas importações não utilizadas foram removidas do arquivo ShelterEntityServiceImplTest.java para limpar o código. + +**Arquivos Alterados:** `README.md`, `OpenApiConfig.java`, `ShelterEntityServiceImplTest.java` + +**Alterações:** + +- No `README.md`, foi adicionada a seção Swagger, que contém um link direto para a documentação Swagger do projeto. +- As tags em `OpenApiConfig.java` foram modificado de "Doadores" e "Receptores" para "Usuários" e "Abrigos" para refletir melhor as funcionalidades do sistema. +- No `ShelterEntityServiceImplTest.java`, foram removidas as importações não utilizadas `ShelterEntityMapper` e `lombok.SneakyThrows`. + +**Nota:** A principal ênfase deste commit é atualizar a documentação e limpar o código para melhor manutenção e legibilidade. Ele visa aperfeiçoar a documentação do Swagger e refletir melhor as funcionalidades do sistema nas tags da API. Além disso, também se esforça para manter o código limpo, removendo importações não utilizadas. + +--- + +**Commit** fca44bf9cfc282adf59ead2686be64dd1eb36ae1: + +Este commit adiciona um manipulador global de exceções para gerenciar de maneira eficaz as respostas de erro durante o processamento das solicitações. Foi criada uma classe ExceptionDTO para armazenar e transferir detalhes das exceções lançadas. + +**Arquivos Adicionados:** `ControllerExceptionHandler.java`, `ExceptionDTO.java` + +**Alterações:** + +- Implementada a classe `ControllerExceptionHandler.java`, que é um manipulador global de exceções para controladores. Esta classe tem vários métodos anotados com `@ExceptionHandler` para tratar diferentes tipos de exceções que podem ocorrer durante o processamento das solicitações e gera respostas de erro apropriadas. +- Criada a classe `ExceptionDTO` para representar um objeto de transferência de dados para transportar informações de exceção. Ela contém a mensagem e o código de status da exceção. + +**Nota:** A principal ênfase deste commit é melhorar a manipulação de erros, o que contribui para a robustez do sistema. Foi usada a estratégia de manipulação de exceções global para lidar com exceções lançadas por qualquer classe de controlador e fornecer detalhes apropriados do erro na resposta. + +--- + +**Commit** 723e0e1247c062a54a7f2a4ab62fe30a94f54c1b: + +Este commit implementa os controladores `ShelterController` e `ShelterControllerImpl` para gerenciar as operações de abrigos. `ShelterController` define a interface de operações, enquanto `ShelterControllerImpl` é a implementação concreta onde os serviços são chamados. Além disso, os testes correspondentes também foram adicionados para `ShelterControllerImpl`. + +**Arquivos Adicionados:** `ShelterController.java`, `ShelterControllerImpl.java`, `ShelterControllerImplTest.java` + +**Alterações:** + +- O arquivo `ShelterController.java` foi adicionado. Este arquivo é uma interface que define as operações de gerenciamento de abrigos. +- O arquivo `ShelterControllerImpl.java` foi adicionado. Este arquivo é a implementação concreta de `ShelterController` onde os serviços são chamados. +- O arquivo `ShelterControllerImplTest.java` foi adicionado. Este arquivo contém os testes para a implementação do controlador. + +**Nota:** A principal ênfase deste commit é adicionar a criação dos abrigos e os testes correspondentes para a implementação. + +--- + +**Commit** ff973370661a9720fa06f95f77e0edcea5243770 + +Este commit adicionou arquivos com a documentação do projeto. + +**Arquivos Adicionados:** varios `html` + +**Alterações:** + +- Foram adicionados arquivos `html` na diretório `docs/javaDoc`. Este arquivo é a documentação gerada pelo Javadoc para a API `ConectarDoacoesApplication`. + +**Nota:** A principal ênfase deste commit é adicionar a documentação Javadoc referente a API `ConectarDoacoesApplication`, proporcionando um maior entendimento sobre as classes e seus métodos. + +--- + +**Commit**: a1a9a415349e9350779d91911ccdcee73a811152: + +Neste commit, a mensagem de erro para quando um usuário não é encontrado foi modificada nos arquivos `ShelterEntityServiceImpl.java` e `ShelterEntityServiceImplTest.java`. Anteriormente, a mensagem era apenas "Usuário não encontrado". Agora, a mensagem foi alterada para indicar que o email do usuário responsável não foi encontrado para fornecer mais clareza. + +**Arquivos Alterados:** `ShelterEntityServiceImpl.java`, `ShelterEntityServiceImplTest.java` + +**Alterações:** + +- No arquivo `ShelterEntityServiceImpl.java`, a constante `USER_NOT_FOUND` foi substituída por `USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR`. A nova constante possui a mensagem alterada "Ops! Não conseguimos encontrar o e-mail do usuário responsável. Por gentileza, tente novamente.". +- A nova mensagem de erro é utilizada ao lançar a exceção `ShelterEntityFailuresException` na situação em que o usuário responsável não é encontrado. +- Nos dois testes do arquivo `ShelterEntityServiceImplTest.java`, também foi alterada a mensagem de erro esperada. + + +**Nota:** A principal ênfase deste commit é aprimorar a clareza das mensagens de erro, indicando com precisão a falha encontrada ao buscar o usuário responsável por email. + +--- + +**Commit**: e4b26cf1c4f4f3aebabbb2f1b9ae5df670085bac: + +Este commit adiciona documentação à classe `UserEntity`. A documentação fornece uma explicação detalhada do propósito desta classe, as anotações usadas e os atributos da classe. Isso inclui informações sobre a representação dos usuários no sistema, os detalhes das anotações do JPA e Lombok, e uma descrição dos atributos do usuário. + +**Arquivo Alterado:** `UserEntity.java` + +**Alterações:** + +- A documentação foi adicionada para explicar o propósito da classe `UserEntity`. +- Detalhes das anotações usadas na classe são explicados – `@Entity`, `@Table`, `@AllArgsConstructor`, `@NoArgsConstructor`, `@Builder`, `@Getter`, `@Setter`. +- Os atributos da classe são descritos – `userId`, `userName`, `email`, `userProfile`, `userPassword`. + +**Nota:** A principal ênfase desta atualização foi a adição de documentação à classe `UserEntity`, aumentando assim a compreensão do código e facilitando a manutenção. + +--- + +**Commit** e6a6e737e3b4e80a98df6555bdebbd1d0341aa99: + +Este commit otimiza o método `mapEntityList` no `ShelterRepository`. Agora, retorna-se uma lista vazia imutável das Java Collections em vez de instanciar um novo ArrayList. Além disso, a criação de uma lista intermediária durante o mapeamento de entidades foi eliminada. + +**Arquivo Alterado:** `ShelterRepository.java` + +**Alterações:** + +- Foi substituída a instância de um novo ArrayList por uma lista vazia imutável das Java Collections quando as entidades são nulas ou vazias em `mapEntityList`. +- A criação de uma lista intermediária durante o mapeamento de entidades foi eliminada. Agora, realiza-se diretamente a stream das entidades para a lista de retorno. + +**Nota:** A ênfase desta commit é na melhoria da eficiência do método `mapEntityList` no `ShelterRepository`, otimizando a construção da lista de retorno. + +--- + +**Commit** 1c6d58ba5c1711a905c1d944845a4169c8e3afb3: + +Este commit adiciona melhorias ao repositório de usuário `UserRepository`, adicionando validações e expandindo as funcionalidades de busca, persistência e deleção de usuários. Além disso, testes unitários correspondentes foram adicionados a `UserRepositoryTest.java` para garantir o funcionamento adequado dos novos métodos. + +**Arquivos Alterados:** `UserRepository.java`, `UserRepositoryTest.java` + +**Alterações:** + +- Novos métodos no `UserRepository.java` foram implementados para melhorar a funcionalidade de busca, persistência e deleção de usuários. +- Validadores foram adicionados para garantir a integridade dos dados no `UserRepository.java`. +- Novos testes unitários foram adicionados a `UserRepositoryTest.java` para garantir que os novos métodos estejam funcionando corretamente. + +**Nota:** A ênfase deste commit é expandir a funcionalidade do repositório de usuário, garantindo a integridade dos dados através da implementação de validações. + +--- + +**Commit** b0b4a3b592edc64541f0d7e7a2ed5820becf058d: + +Este commit adiciona uma nova funcionalidade de criação de usuários ao sistema. Novas classes de Request e Response foram adicionadas, novos métodos de serviço foram implementados para a criação de usuários e os testes correspondentes foram criados. Além disso, estratégias para tratar erros durante a criação de usuários, como tentativas de registrar um endereço de e-mail já existente, foram adicionadas. + +**Arquivos Alterados:** `UserEntityCreationRequest.java`, `UserEntityCreatedResponse.java`, `UserEntityService.java`, `UserEntityServiceImpl.java` + +**Alterações:** + +- Implementação da classe `UserEntityCreationRequest` que coleta os dados fornecidos pelo usuário durante a solicitação de criação de um perfil. +- Implementação da classe `UserEntityCreatedResponse` que é retornada após a criação de uma nova entidade de usuário, contendo informações pertinentes sobre o usuário. +- Novos métodos foram adicionados na interface `UserEntityService` e implementados em `UserEntityServiceImpl`, para a criação do usuário. +- Tratamento de erros foi adicionado em `UserEntityServiceImpl` para lidar com cenários onde o endereço de e-mail fornecido pelo usuário já existe no banco de dados. + +**Nota:** Esta commit adiciona funcionalidades significativas ao sistema, possibilitando a criação de novos usuários. Testes correspondentes para essas funcionalidades também foram adicionados. + +--- + +**Commit** 669f1809eb4e13ba7113c2362a458c5a6b26f51f: + +Este commit adicionou a interface `UserController` e sua implementação na classe `UserControllerImpl`. O foco principal dos novos arquivos é lidar com operações relacionadas aos usuários, principalmente na criação de novos usuários, configurando as respectivas requisições e respostas para esses endpoints. + +**Arquivos Criados:** `UserController.java`, `UserControllerImpl.java` + +**Alterações:** + +- Adicionada a Interface `UserController`, que define o método para criação de um novo usuário. +- Implementação da classe `UserControllerImpl`, que implementa o método definido pela interface `UserController`. A classe se utiliza dos serviços definidos em `UserEntityService` para criar novos usuários e retorna uma resposta formatada de acordo com a classe `UserEntityCreatedResponse`. +- Documentação completa, incluindo as anotações para a documentação da API. + +**Nota:** A ênfase deste commit é adicionar a funcionalidade de criação de usuário, gerenciando as requisições HTTP e as respostas correspondentes, facilitando a interação de clientes com a criação de novos usuários. + +--- diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html new file mode 100644 index 0000000..242972d --- /dev/null +++ b/docs/allclasses-index.html @@ -0,0 +1,373 @@ + + + + +All Classes and Interfaces + + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes and Interfaces

+
+
+
+
+
+
Class
+
Description
+ +
+
Classe Address representa um endereço físico.
+
+ +
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+ +
+
Classe modelo DTO para o endereço.
+
+ +
+
Objeto de entidade AddressEntity que representa um objeto endereço no banco de dados mapeado para a tabela "address".
+
+ +
+
A classe AddressEntityFailuresException é uma subclasse da classe RuntimeException.
+
+ +
+
Implementação da interface MapperStrategy para mapear um objeto Address para sua correspondente entidade AddressEntity.
+
+ +
+
Fábrica estática para a criação de instâncias da classe Address.
+
+ +
+
A classe AddressMapper implementa a interface de estratégia de Mapeamento MapperStrategy + para converter objetos AddressEntity em objetos Address.
+
+ +
+
Java Persistence API (JPA) Repository para AddressEntity.
+
+ +
+
A classe BuilderMapper fornece métodos para mapear os campos de um objeto fonte + para os campos de uma classe destino.
+
+ +
 
+ +
+
Exceção personalizada que é lançada quando não é definido um construtor padrão.
+
+ +
+
A classe ControllerExceptionHandler é um manipulador de exceções global para controladores.
+
+ +
+
Classe de configuração para habilitar o compartilhamento de recursos de origem cruzada (CORS).
+
+ +
+
Entidade que representa uma doação.
+
+ +
+
Objeto de entidade DonationEntity que representa um objeto doação no banco de dados mapeado para a tabela "donations".
+
+ +
+
Classe responsável por implementar a estratégia de mapeamento para objetos Donation + para objetos DonationEntity.
+
+ +
+
Classe utilitária para fornecer funções de fábrica para a criação de instâncias Donation.
+
+ +
+
Esta classe implementa a interface MapperStrategy para mapear a entidade DonationEntity para o objeto de domínio Donation.
+
+ +
+
Classe de exceção personalizada para falhas no registro de doações.
+
+ +
+
Definição da interface do repositório para a entidade de doação DonationEntity.
+
+ +
+
A classe ExceptionDetails é uma enumeração que define várias mensagens de exceções.
+
+ +
+
Este é um Enum que contém detalhes de várias exceções relacionadas ao processo de criação de várias entidades, como Usuário, Donação, Abrigo e Endereço.
+
+ +
+
A classe ExceptionDTO representa um objeto de transferência de dados + para transportar informações de exceção.
+
+ +
+
MapperFailureException é uma classe de exceção personalizada.
+
+ +
+
A interface MapperStrategy define uma estratégia para executar operações de mapeamento de objetos.
+
+ +
+
Classe de configuração para a documentação da API aberta (OpenAPI).
+
+ +
+
Esta é uma interface de contrato de repositório genérica que define operações CRUD básicas.
+
+ +
+
Implementação da interface ShelterContract, que representa um abrigo na aplicação.
+
+ +
+
Interface ShelterContract define os métodos que representam os principais comportamentos e a divulgação de informações de uma entidade Shelter.
+
+ +
+
A interface ShelterContractRepository herda da interface RepositoryContract.
+
+ +
+
Interface que define as operações de gerenciamento de abrigos.
+
+ +
+
A classe ShelterControllerImpl implementa a interface ShelterController e serve como + o ponto de entrada da API para o gerenciamento dos abrigos.
+
+ +
+
Classe modelo DTO para a resposta de criação de um abrigo.
+
+ +
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+ +
+
Classe modelo para o Pedido de Criação do Abrigo ShelterCreationRequest.
+
+ +
+
Objeto de entidade ShelterEntity que representa um objeto abrigo no banco de dados mapeado para a tabela "shelters".
+
+ +
+
A classe ShelterEntityFailuresException representa uma exceção específica que será lançada + quando ocorrer uma falha em uma operação relacionada ao ShelterEntity.
+
+ +
+
Classe ShelterEntityMapper que implementa a interface MapperStrategy para executar operações de mapeamento entre a classe ShelterContract e a classe ShelterEntity.
+
+ +
+
Interface para a criação de um novo abrigo no sistema.
+
+ +
+
Esta classe é responsável pela implementação dos métodos necessários para gerenciar abrigos no sistema.
+
+ +
+
Classe ShelterFactory responsável por fornecer métodos para criar instâncias da classe Shelter.
+
+ +
+
Implementação da interface MapperStrategy para a conversão entre a entidade ShelterEntity e a classe de domínio ShelterContract.
+
+ +
+
Este repositório é responsável pela persistência de dados relacionados a abrigos (Shelter).
+
+ +
+
A classe de serviço ShelterService é responsável pelas operações de negócios relacionadas a abrigos.
+
+ +
+
Interface ShelterServiceContract define vários métodos que manipulam um objeto Shelter.
+
+ +
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+ +
+
Representa um usuário dentro do sistema.
+
+ +
+
A interface UserContract define o contrato para o gerenciamento de um usuário no sistema.
+
+ +
+
A interface UserContractRepository herda de RepositoryContract que é parametrizada com UserContract.
+
+ +
+
A interface UserController age como um controlador REST referente a usuários dentro deste sistema.
+
+ +
+
Esta é a classe UserControllerImpl que implementa a interface UserController.
+
+ +
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+ +
+
Representa um usuário no sistema.
+
+ +
+
Esta classe representa a resposta após a criação de uma entidade de usuário no sistema.
+
+ +
+
Esta classe representa um objeto de solicitação para a criação de uma nova entidade de usuário.
+
+ +
+
Classe modelo DTO para um usuário.
+
+ +
+
A classe UserEntityFailuresException representa uma exceção específica que será lançada + quando ocorrer uma falha em uma operação relacionada ao UserEntity.
+
+ +
+
A classe UserEntityMapper implementa a interface MapperStrategy e é usada para mapear um objeto do tipo User para um objeto de entidade UserEntity.
+
+ +
+
Definição da interface para o serviço que lida com operações relacionadas à entidade do usuário.
+
+ +
+
A classe UserEntityServiceImpl implementa a interface UserEntityService e + lida com a lógica de negócios das operações de usuário.
+
+ +
+
Classe de utilidade para a criação de usuário.
+
+ +
+
Implementação da interface MapperStrategy para a conversão entre a entidade UserEntity e a classe de domínio User.
+
+ +
+
A enumeração UserProfile fornece os tipos de perfis disponíveis para um usuário.
+
+ +
+
A enumeração UserProfileType fornece os tipos de perfis disponíveis para um usuário.
+
+ +
+
A interface do repositório de usuário, UserRepository, estende as interfaces UserContractRepository e CrudRepository.
+
+ +
+
A classe UserService implementa um contratato do serviço do usuário UserServiceContract.
+
+ +
+
Interface para o contrato de serviço do usuário.
+
+ +
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+ +
+
Classe de utilidade para lidar com operações relacionadas ao UUID.
+
+ +
+
Esta é uma classe de exceção personalizada que estende a classe RuntimeException.
+
+ +
+
A classe ValidationUtils é um utilitário que fornece métodos para validar dados de entrada.
+
+ +
+
Esta é uma classe de exceção personalizada que estende a classe RuntimeException.
+
+ +
+
A classe WebSecurityConfig tem a responsabilidade de definir as configurações de segurança web desta aplicação.
+
+
+
+
+
+
+
+ + diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html new file mode 100644 index 0000000..2cd6072 --- /dev/null +++ b/docs/allpackages-index.html @@ -0,0 +1,119 @@ + + + + +All Packages + + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
Package Summary
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+
+
+
+
+ + diff --git a/docs/constant-values.html b/docs/constant-values.html new file mode 100644 index 0000000..641c722 --- /dev/null +++ b/docs/constant-values.html @@ -0,0 +1,317 @@ + + + + +Constant Field Values + + + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+

Contents

+ +
+
+
+

diegosneves.github.*

+
    +
  • +
    diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
    +
    +
    Modifier and Type
    +
    Constant Field
    +
    Value
    +
    public static final String
    + +
    "O objeto que est\u00e1 sendo mapeado n\u00e3o deve ser nulo. Verifique se o objeto foi corretamente inicializado."
    +
    public static final String
    + +
    "O objeto MapperStrategy n\u00e3o pode ser nulo"
    +
    +
  • +
+
    +
  • +
    diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository
    +
    +
    Modifier and Type
    +
    Constant Field
    +
    Value
    +
    public static final String
    + +
    "Deve ser fornecido um ID v\u00e1lido!"
    +
    public static final String
    + +
    "Um objeto Abrigo v\u00e1lido deve ser fornecido para persist\u00eancia!"
    +
    +
  • +
  • +
    diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
    +
    +
    Modifier and Type
    +
    Constant Field
    +
    Value
    +
    public static final String
    + +
    "Um usu\u00e1rio v\u00e1lido \u00e9 requerido para efetuar a persist\u00eancia."
    +
    public static final String
    + +
    "Opera\u00e7\u00e3o n\u00e3o realizada. Um ID de usu\u00e1rio v\u00e1lido deve ser fornecido."
    +
    +
  • +
+ + + + + +
    +
  • +
    diegosneves.github.conectardoacoes.core.utils.UuidUtils
    +
    +
    Modifier and Type
    +
    Constant Field
    +
    Value
    +
    public static final String
    + +
    "UUID deve ser informado"
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/ConectarDoacoesApplication.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/ConectarDoacoesApplication.html new file mode 100644 index 0000000..2755b4a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/ConectarDoacoesApplication.html @@ -0,0 +1,160 @@ + + + + +ConectarDoacoesApplication + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ConectarDoacoesApplication

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.ConectarDoacoesApplication
+
+
+
+
@SpringBootApplication +public class ConectarDoacoesApplication +extends Object
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ConectarDoacoesApplication

      +
      public ConectarDoacoesApplication()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      main

      +
      public static void main(String[] args)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/class-use/ConectarDoacoesApplication.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/class-use/ConectarDoacoesApplication.html new file mode 100644 index 0000000..2241f75 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/class-use/ConectarDoacoesApplication.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.ConectarDoacoesApplication + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.ConectarDoacoesApplication

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.ConectarDoacoesApplication
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/ControllerExceptionHandler.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/ControllerExceptionHandler.html new file mode 100644 index 0000000..79361ce --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/ControllerExceptionHandler.html @@ -0,0 +1,325 @@ + + + + +ControllerExceptionHandler + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ControllerExceptionHandler

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
+
+
@RestControllerAdvice +public class ControllerExceptionHandler +extends Object
+
A classe ControllerExceptionHandler é um manipulador de exceções global para controladores. + Ela lida com as exceções lançadas durante o processamento de solicitações e gera respostas de erro apropriadas. + A classe é anotada com RestControllerAdvice para aplicar o tratamento de exceção globalmente + a todas as classes de controlador.
+
+
Author:
+
diegosneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ControllerExceptionHandler

      +
      public ControllerExceptionHandler()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      handleFailures

      +
      @ExceptionHandler(java.lang.Exception.class) +public org.springframework.http.ResponseEntity<ExceptionDTO> handleFailures(Exception exception)
      +
      Manipula exceções gerais e retorna uma resposta de erro apropriada.
      +
      +
      Parameters:
      +
      exception - A exceção que ocorreu.
      +
      Returns:
      +
      Uma ResponseEntity contendo um ExceptionDTO com a mensagem da exceção e um código de status HTTP
      +
      +
      +
    • +
    • +
      +

      handleMapperFailures

      +
      @ExceptionHandler(ConstructorDefaultUndefinedException.class) +public org.springframework.http.ResponseEntity<ExceptionDTO> handleMapperFailures(ConstructorDefaultUndefinedException exception)
      +
      Método que manipula as exceções específicas da ConstructorDefaultUndefinedException + que podem ocorrer ao instanciar objetos sem um construtor padrão. Quando essa exceção + é lançada, este método a capturará e retornará uma resposta HTTP adequada usando + o ExceptionDTO para transmitir as informações da exceção. +

      + Este método é anotado com @ExceptionHandler, que é uma anotação Springer, + significando que o Springer invocará automaticamente este método para tratar as exceções do + tipo ConstructorDefaultUndefinedException lançadas por qualquer método do controlador + respectivo.

      +
      +
      Parameters:
      +
      exception - A exceção específica do ConstructorDefaultUndefinedException que ocorreu.
      +
      Returns:
      +
      Uma resposta HTTP encapsulada em uma ResponseEntity que contém o DTO da exceção, + composto pela mensagem da exceção e um código de status HTTP. O status HTTP da resposta é + o mesmo que o status HTTP da exceção.
      +
      +
      +
    • +
    • +
      +

      handleShelterEntityFailures

      +
      @ExceptionHandler(ShelterEntityFailuresException.class) +public org.springframework.http.ResponseEntity<ExceptionDTO> handleShelterEntityFailures(ShelterEntityFailuresException exception)
      +
      Manipula as exceções específicas de ShelterEntityFailuresException que + podem ocorrer durante a manipulação dos dados da entidade de abrigo. Quando uma dessas exceções + é lançada, este método irá capturá-la e retornar uma resposta adequada usando o ExceptionDTO + para transportar as informações de exceção. +

      + O método é anotado com @ExceptionHandler, o que significa que será invocado automaticamente + pelo Spring para tratar exceções do tipo ShelterEntityFailuresException lançadas + por qualquer método do respectivo controlador.

      +
      +
      Parameters:
      +
      exception - A exceção específica do ShelterEntityFailuresException que ocorreu.
      +
      Returns:
      +
      Uma resposta HTTP representada como ResponseEntity contendo o DTO de exceção + que contém a mensagem da exceção e um código de status HTTP. O status HTTP da resposta será + o mesmo que o status HTTP da exceção.
      +
      +
      +
    • +
    • +
      +

      handleAddressEntityFailures

      +
      @ExceptionHandler(AddressEntityFailuresException.class) +public org.springframework.http.ResponseEntity<ExceptionDTO> handleAddressEntityFailures(AddressEntityFailuresException exception)
      +
      Manipula as exceções específicas de AddressEntityFailuresException que + podem ocorrer durante a manipulação dos dados da entidade de endereço. Quando uma dessas exceções + é lançada, esse método irá capturá-la e retornar uma resposta adequada usando o ExceptionDTO + para transportar as informações de exceção. +

      + O método é anotado com @ExceptionHandler, o que significa que será invocado automaticamente + pelo Spring para tratar exceções do tipo AddressEntityFailuresException lançadas + por qualquer método do respectivo controlador.

      +
      +
      Parameters:
      +
      exception - A exceção específica do AddressEntityFailuresException que ocorreu.
      +
      Returns:
      +
      Uma resposta HTTP representada como ResponseEntity contendo o DTO de exceção + que contém a mensagem da exceção e um código de status HTTP. + O status HTTP da resposta será o mesmo que o status HTTP da exceção.
      +
      +
      +
    • +
    • +
      +

      handleMapperFailures

      +
      @ExceptionHandler(MapperFailureException.class) +public org.springframework.http.ResponseEntity<ExceptionDTO> handleMapperFailures(MapperFailureException exception)
      +
      Manipula a exceção MapperFailureException e retorna uma resposta de erro adequada. +

      + Este método é usado para tratar as exceções específicas do MapperFailureException + que podem ocorrer durante a operação de mapeamento de classes. Quando uma dessas exceções é lançada, + esse método irá capturá-la e retornar uma resposta adequada usando o ExceptionDTO para + transportar as informações de exceção. +

      + O método é anotado com @ExceptionHandler, o que significa que será invocado automaticamente + pelo Spring para tratar exceções do tipo MapperFailureException lançadas por qualquer + método do controlador.

      +
      +
      Parameters:
      +
      exception - A exceção específica do MapperFailureException que ocorreu.
      +
      Returns:
      +
      Uma resposta HTTP representada como ResponseEntity contendo o DTO de exceção que + contém a mensagem da exceção e um código de status HTTP. O status HTTP da resposta será + o mesmo que o status HTTP da exceção.
      +
      +
      +
    • +
    • +
      +

      handleUserEntityFailures

      +
      @ExceptionHandler(UserEntityFailuresException.class) +public org.springframework.http.ResponseEntity<ExceptionDTO> handleUserEntityFailures(UserEntityFailuresException exception)
      +
      Este método é usado para manipular as exceções específicas de UserEntityFailuresException + que podem ocorrer durante a manipulação dos dados do UserEntity. Quando uma dessas exceções é lançada, + esse método irá capturá-la e retornar uma resposta adequada usando o ExceptionDTO + para transportar as informações de exceção. +

      + O método é anotado com @ExceptionHandler, o que significa que será invocado automaticamente + pelo Spring para tratar exceções do tipo UserEntityFailuresException lançadas por qualquer + método do controlador.

      +
      +
      Parameters:
      +
      exception - A exceção específica do UserEntityFailuresException que ocorreu.
      +
      Returns:
      +
      Uma resposta HTTP representada como ResponseEntity contendo o DTO de exceção que contém a + mensagem da exceção e um código de status HTTP. O status HTTP da resposta será o mesmo que + o status HTTP da exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/class-use/ControllerExceptionHandler.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/class-use/ControllerExceptionHandler.html new file mode 100644 index 0000000..0bd683c --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/class-use/ControllerExceptionHandler.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-summary.html new file mode 100644 index 0000000..852080e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-summary.html @@ -0,0 +1,85 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.config.handler + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.config.handler

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.config.handler
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-tree.html new file mode 100644 index 0000000..102d8f0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-tree.html @@ -0,0 +1,72 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.config.handler Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.config.handler

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-use.html new file mode 100644 index 0000000..d062c4b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/handler/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.config.handler + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.config.handler

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.config.handler
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/CorsConfig.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/CorsConfig.html new file mode 100644 index 0000000..c6761f1 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/CorsConfig.html @@ -0,0 +1,217 @@ + + + + +CorsConfig + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.config.web.CorsConfig
+
+
+
+
@Configuration +public class CorsConfig +extends Object
+
Classe de configuração para habilitar o compartilhamento de recursos de origem cruzada (CORS). +

+ Esta classe fornece um bean para CorsFilter, que é usado para interceptar e + tratar requisições CORS. Ela permite requisições de qualquer origem, com quaisquer cabeçalhos e + qualquer método. +

+ A configuração CORS é ajustada para permitir credenciais, o que significa que cookies e + tokens de autenticação podem ser incluídos nas requisições. +

+ Exemplo de uso: + +

+     
+ @Configuration
+ public class AppConfig {
+
+   @Bean
+   public CorsFilter corsFilter() {
+     UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+     CorsConfiguration config = new CorsConfiguration();
+     config.setAllowCredentials(true);
+     config.addAllowedOrigin("*");
+     config.addAllowedHeader("*");
+     config.addAllowedMethod("*");
+     source.registerCorsConfiguration("/**", config);
+     return new CorsFilter(source);
+   }
+
+ }
+ 
+ 
+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
+
+
+
    + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    org.springframework.web.filter.CorsFilter
    + +
    +
    Este método inicializa e define as regras para o filtro CORS (Cross Origin Resource Sharing).
    +
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      CorsConfig

      +
      public CorsConfig()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      corsFilter

      +
      @Bean +public org.springframework.web.filter.CorsFilter corsFilter()
      +
      Este método inicializa e define as regras para o filtro CORS (Cross Origin Resource Sharing). + Primeiramente, é criada uma instância da classe `UrlBasedCorsConfigurationSource`, responsável por fornecer + um objeto de configuração baseado em URL para o filtro CORS. +

      + Em seguida, é criada uma instância da classe `CorsConfiguration`, onde as regras CORS são configuradas. + A configuração específica permite qualquer origem, cabeçalho e método HTTP. +

      + No final, este objeto de configuração é registrado (o caminho é definido usando o padrão `/**`) + com o objeto `UrlBasedCorsConfigurationSource`. +

      + Por fim, o método retorna uma nova instância de `CorsFilter` inicializada com o objeto `UrlBasedCorsConfigurationSource`.

      +
      +
      Returns:
      +
      Um objeto `CorsFilter` inicializado com as regras CORS configuradas. +

      + Nota: Esta documentação assume que você já incluiu as dependências necessárias e que sua API foi corretamente configurado para usar Spring Framework.

      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/OpenApiConfig.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/OpenApiConfig.html new file mode 100644 index 0000000..449d9de --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/OpenApiConfig.html @@ -0,0 +1,182 @@ + + + + +OpenApiConfig + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.config.web.OpenApiConfig
+
+
+
+
@Configuration +public class OpenApiConfig +extends Object
+
Classe de configuração para a documentação da API aberta (OpenAPI). +

+ Esta classe configura as informações detalhadas e as tags que são exibidas na documentação do Swagger/OpenAPI. +

+ Isso inclui meta-informações como a versão da API, título, descrição, detalhes de contato e tags usadas para agrupar endpoints relacionados. +

+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      OpenApiConfig

      +
      public OpenApiConfig()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      customOpenAPI

      +
      @Bean +public io.swagger.v3.oas.models.OpenAPI customOpenAPI()
      +
      Retorna uma instância personalizada do OpenAPI. +

      + Este método configura informações detalhadas e tags que serão exibidas na documentação Swagger/OpenAPI.

      +
      +
      Returns:
      +
      a instância personalizada do OpenAPI
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/WebSecurityConfig.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/WebSecurityConfig.html new file mode 100644 index 0000000..de4a350 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/WebSecurityConfig.html @@ -0,0 +1,181 @@ + + + + +WebSecurityConfig + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.config.web.WebSecurityConfig
+
+
+
+
@Configuration +@EnableWebSecurity +public class WebSecurityConfig +extends Object
+
A classe WebSecurityConfig tem a responsabilidade de definir as configurações de segurança web desta aplicação.
+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
+
+
+
    + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    org.springframework.security.web.SecurityFilterChain
    +
    securityFilterChain(org.springframework.security.config.annotation.web.builders.HttpSecurity http)
    +
    +
    Cria uma cadeia de filtros de segurança (SecurityFilterChain) para a instância HttpSecurity fornecida.
    +
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      WebSecurityConfig

      +
      public WebSecurityConfig()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      securityFilterChain

      +
      @Bean +public org.springframework.security.web.SecurityFilterChain securityFilterChain(org.springframework.security.config.annotation.web.builders.HttpSecurity http) + throws Exception
      +
      Cria uma cadeia de filtros de segurança (SecurityFilterChain) para a instância HttpSecurity fornecida.
      +
      +
      Parameters:
      +
      http - a instância de HttpSecurity que será configurada
      +
      Returns:
      +
      a cadeia de filtros de segurança criada (SecurityFilterChain)
      +
      Throws:
      +
      Exception - se ocorrer um erro durante a configuração
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/CorsConfig.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/CorsConfig.html new file mode 100644 index 0000000..530fb35 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/CorsConfig.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.config.web.CorsConfig + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.config.web.CorsConfig

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.config.web.CorsConfig
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/OpenApiConfig.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/OpenApiConfig.html new file mode 100644 index 0000000..159d9f7 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/OpenApiConfig.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.config.web.OpenApiConfig + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.config.web.OpenApiConfig

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.config.web.OpenApiConfig
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/WebSecurityConfig.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/WebSecurityConfig.html new file mode 100644 index 0000000..35a2127 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/class-use/WebSecurityConfig.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.config.web.WebSecurityConfig + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.config.web.WebSecurityConfig

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.config.web.WebSecurityConfig
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-summary.html new file mode 100644 index 0000000..1cabb6c --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-summary.html @@ -0,0 +1,93 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.config.web + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.config.web

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.config.web
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    Classe de configuração para habilitar o compartilhamento de recursos de origem cruzada (CORS).
    +
    + +
    +
    Classe de configuração para a documentação da API aberta (OpenAPI).
    +
    + +
    +
    A classe WebSecurityConfig tem a responsabilidade de definir as configurações de segurança web desta aplicação.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-tree.html new file mode 100644 index 0000000..3998a3a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-tree.html @@ -0,0 +1,74 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.config.web Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.config.web

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.adapters.rest.config.web.CorsConfig
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.config.web.OpenApiConfig
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.config.web.WebSecurityConfig
    • +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-use.html new file mode 100644 index 0000000..ad41573 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/config/web/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.config.web + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.config.web

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.config.web
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/ShelterController.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/ShelterController.html new file mode 100644 index 0000000..400614f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/ShelterController.html @@ -0,0 +1,185 @@ + + + + +ShelterController + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface ShelterController

+
+
+
+
All Known Implementing Classes:
+
ShelterControllerImpl
+
+
+
public interface ShelterController
+
Interface que define as operações de gerenciamento de abrigos. +

+ Esta interface representa o controlador que manipula todas as operações relacionadas aos abrigos + em nosso sistema. Define como o cliente (geralmente um front-end da web) + deve interfacear com os serviços de back-end para criar e administrar abrigos. +

+ As operações principais que ela define incluem a criação de novos abrigos, + através de solicitações HTTP POST para a rota "/ create". + A especificação completa dessas rotas e do códigos de status HTTP que eles podem retornar, + encontra-se nos Javadoc dos métodos individuais.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+
    + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    org.springframework.http.ResponseEntity<ShelterCreatedResponse>
    + +
    +
    Método POST para a criação de um Abrigo.
    +
    +
    +
    +
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createShelter

      +
      @PostMapping(value="/create", + consumes="application/json", + produces="application/json") +org.springframework.http.ResponseEntity<ShelterCreatedResponse> createShelter(@RequestBody + ShelterCreationRequest request)
      +
      Método POST para a criação de um Abrigo. +

      + Este método recebe um objeto JSON que representa uma solicitação de criação de abrigo, + a criação do abrigo é realizada no back-end, e retorna uma resposta que inclui os + detalhes do abrigo criado. +

      + O objeto de solicitação deve ser fornecido no corpo da solicitação, com os seguintes campos: +

        +
      • shelterName: Nome do abrigo a ser criado.
      • +
      • address: Um objeto que representa o endereço do abrigo. Deve incluir rua, número, bairro, + cidade, estado e CEP.
      • +
      • responsibleUserEmail: O e-mail do usuário responsável pelo abrigo.
      • +
      +

      + O método retornará um objeto JSON com os seguintes campos: +

        +
      • id: O ID gerado para o novo abrigo criado.
      • +
      • shelterName: O nome do abrigo criado.
      • +
      • address: Um objeto representando o endereço do abrigo criado.
      • +
      • responsibleUser: Um objeto representando o usuário responsável pelo abrigo.
      • +
      +
      +
      Parameters:
      +
      request - objeto ShelterCreationRequest que representa a solicitação de criação de + um abrigo que é mapeada do corpo da solicitação JSON.
      +
      Returns:
      +
      Retorna um ResponseEntity que encapsula a resposta da criação do abrigo. Esta + resposta inclui o status HTTP da operação, bem como um corpo que é uma representação JSON + do abrigo criado.
      +
      Throws:
      +
      org.springframework.web.server.ResponseStatusException - será lançada se a criação do abrigo falhar devido a + problemas de validação ou problemas no servidor. A mensagem de erro será incluída na + exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/UserController.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/UserController.html new file mode 100644 index 0000000..8dd6c9d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/UserController.html @@ -0,0 +1,178 @@ + + + + +UserController + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
All Known Implementing Classes:
+
UserControllerImpl
+
+
+
public interface UserController
+
A interface UserController age como um controlador REST referente a usuários dentro deste sistema. + Seu propósito é fornecer endpoints que lidam com todas as operações relativas aos usuários (como, por exemplo, criação de novo usuário), realizando a ligação entre as requisições HTTP dos clientes e a camada de serviço do sistema. + +

+ Dentro desta interface, são definidos métodos para lidar com uma série de operações de usuário, como a criação de um usuário novo. + Cada método está atrelado a um endpoint específico e é responsável por manipular uma operação distinta. + Um exemplo é o método createUser(UserEntityCreationRequest), que está mapeado para o endpoint "create" e é responsável pela criação de um novo usuário no sistema. + +

+ Como uma interface de controlador REST, processa-se input no formato JSON e devolve-se dados também no formato JSON. + A conversão entre este formato de dados e os objetos do domínio do sistema se dá através de classes de solicitação e resposta (como UserEntityCreationRequest e UserEntityCreatedResponse), que atuam como DTOs (Data Transfer Objects) que facilitam a serialização e deserialização de dados e validam a estrutura desses dados.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createUser

      +
      @PostMapping(value="create", + consumes="application/json", + produces="application/json") +org.springframework.http.ResponseEntity<UserEntityCreatedResponse> createUser(@RequestBody + UserEntityCreationRequest request)
      +
      Este endpoint pertence à aplicação "Usuários". + Responsável por registrar novos usuários no sistema. + Aceita uma requisição POST com o objeto UserEntityCreationRequest no corpo que contém as informações do usuário a ser registrado. + +

      + Após a criação bem-sucedida do usuário, retorna um objeto ResponseEntity que encapsula os detalhes da criação do usuário na forma de UserEntityCreatedResponse. +

      + O objeto UserEntityCreatedResponse é um DTO que contém os detalhes relevantes sobre o usuário que foi criado. + Isso inclui o ID de usuário único gerado pelo sistema, o nome de usuário escolhido, o endereço de e-mail fornecido e o tipo de perfil associado a este usuário. + +

      + Em qualquer caso de violação das validações de integridade do modelo da entidade, um erro HTTP apropriado é retornado junto com os detalhes do erro.

      +
      +
      Parameters:
      +
      request - um objeto UserEntityCreationRequest encapsulando os detalhes do novo usuário a ser registrado. + Este parâmetro deve estar presente no corpo da solicitação POST e é deserializado para o tipo UserEntityCreationRequest.
      +
      Returns:
      +
      ResponseEntity que encapsula o UserEntityCreatedResponse se o usuário for criado com sucesso.
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/class-use/ShelterController.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/class-use/ShelterController.html new file mode 100644 index 0000000..c6f98aa --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/class-use/ShelterController.html @@ -0,0 +1,86 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.controller.ShelterController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.controller.ShelterController

+
+
Packages that use ShelterController
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/class-use/UserController.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/class-use/UserController.html new file mode 100644 index 0000000..a51c2ef --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/class-use/UserController.html @@ -0,0 +1,85 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.controller.UserController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.controller.UserController

+
+
Packages that use UserController
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImpl.html new file mode 100644 index 0000000..e02979a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImpl.html @@ -0,0 +1,222 @@ + + + + +ShelterControllerImpl + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterControllerImpl

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.controller.imp.ShelterControllerImpl
+
+
+
+
All Implemented Interfaces:
+
ShelterController
+
+
+
@RestController +@RequestMapping("/shelter") +public class ShelterControllerImpl +extends Object +implements ShelterController
+
A classe ShelterControllerImpl implementa a interface ShelterController e serve como + o ponto de entrada da API para o gerenciamento dos abrigos. +

+ Esta classe é decorada com as anotações @RestController e @RequestMapping("/shelter"), + indicando que é um controlador REST e que irá responder a requisições feitas para /shelter.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ShelterControllerImpl

      +
      public ShelterControllerImpl(ShelterEntityService shelterEntityService)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createShelter

      +
      public org.springframework.http.ResponseEntity<ShelterCreatedResponse> createShelter(ShelterCreationRequest request)
      +
      Description copied from interface: ShelterController
      +
      Método POST para a criação de um Abrigo. +

      + Este método recebe um objeto JSON que representa uma solicitação de criação de abrigo, + a criação do abrigo é realizada no back-end, e retorna uma resposta que inclui os + detalhes do abrigo criado. +

      + O objeto de solicitação deve ser fornecido no corpo da solicitação, com os seguintes campos: +

        +
      • shelterName: Nome do abrigo a ser criado.
      • +
      • address: Um objeto que representa o endereço do abrigo. Deve incluir rua, número, bairro, + cidade, estado e CEP.
      • +
      • responsibleUserEmail: O e-mail do usuário responsável pelo abrigo.
      • +
      +

      + O método retornará um objeto JSON com os seguintes campos: +

        +
      • id: O ID gerado para o novo abrigo criado.
      • +
      • shelterName: O nome do abrigo criado.
      • +
      • address: Um objeto representando o endereço do abrigo criado.
      • +
      • responsibleUser: Um objeto representando o usuário responsável pelo abrigo.
      • +
      +
      +
      Specified by:
      +
      createShelter in interface ShelterController
      +
      Parameters:
      +
      request - objeto ShelterCreationRequest que representa a solicitação de criação de + um abrigo que é mapeada do corpo da solicitação JSON.
      +
      Returns:
      +
      Retorna um ResponseEntity que encapsula a resposta da criação do abrigo. Esta + resposta inclui o status HTTP da operação, bem como um corpo que é uma representação JSON + do abrigo criado.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/UserControllerImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/UserControllerImpl.html new file mode 100644 index 0000000..7f7ff06 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/UserControllerImpl.html @@ -0,0 +1,211 @@ + + + + +UserControllerImpl + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.controller.imp.UserControllerImpl
+
+
+
+
All Implemented Interfaces:
+
UserController
+
+
+
@RestController +@RequestMapping("/user") +public class UserControllerImpl +extends Object +implements UserController
+
Esta é a classe UserControllerImpl que implementa a interface UserController. + É anotada com RestController, o que significa que é um controlador de serviço web em que + cada método retorna um objeto de domínio (Entity) ao invés de uma view. + É responsável por lidar com todas as requisições HTTP que são enviadas para a URL "/user". +

+ Possui uma instância da classe de serviço UserEntityService, que é usada para implementar + a lógica de negócios relacionada aos usuários.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserControllerImpl

      +
      @Autowired +public UserControllerImpl(UserEntityService service)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createUser

      +
      public org.springframework.http.ResponseEntity<UserEntityCreatedResponse> createUser(UserEntityCreationRequest request)
      +
      Description copied from interface: UserController
      +
      Este endpoint pertence à aplicação "Usuários". + Responsável por registrar novos usuários no sistema. + Aceita uma requisição POST com o objeto UserEntityCreationRequest no corpo que contém as informações do usuário a ser registrado. + +

      + Após a criação bem-sucedida do usuário, retorna um objeto ResponseEntity que encapsula os detalhes da criação do usuário na forma de UserEntityCreatedResponse. +

      + O objeto UserEntityCreatedResponse é um DTO que contém os detalhes relevantes sobre o usuário que foi criado. + Isso inclui o ID de usuário único gerado pelo sistema, o nome de usuário escolhido, o endereço de e-mail fornecido e o tipo de perfil associado a este usuário. + +

      + Em qualquer caso de violação das validações de integridade do modelo da entidade, um erro HTTP apropriado é retornado junto com os detalhes do erro.

      +
      +
      Specified by:
      +
      createUser in interface UserController
      +
      Parameters:
      +
      request - um objeto UserEntityCreationRequest encapsulando os detalhes do novo usuário a ser registrado. + Este parâmetro deve estar presente no corpo da solicitação POST e é deserializado para o tipo UserEntityCreationRequest.
      +
      Returns:
      +
      ResponseEntity que encapsula o UserEntityCreatedResponse se o usuário for criado com sucesso.
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/class-use/ShelterControllerImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/class-use/ShelterControllerImpl.html new file mode 100644 index 0000000..df23a87 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/class-use/ShelterControllerImpl.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.controller.imp.ShelterControllerImpl + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.controller.imp.ShelterControllerImpl

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.controller.imp.ShelterControllerImpl
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/class-use/UserControllerImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/class-use/UserControllerImpl.html new file mode 100644 index 0000000..e002559 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/class-use/UserControllerImpl.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.controller.imp.UserControllerImpl + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.controller.imp.UserControllerImpl

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.controller.imp.UserControllerImpl
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-summary.html new file mode 100644 index 0000000..f53fa5f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-summary.html @@ -0,0 +1,101 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.controller.imp + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.controller.imp

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.controller.imp
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-tree.html new file mode 100644 index 0000000..5333941 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-tree.html @@ -0,0 +1,73 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.controller.imp Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.controller.imp

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-use.html new file mode 100644 index 0000000..d3a254b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.controller.imp + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.controller.imp

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.controller.imp
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-summary.html new file mode 100644 index 0000000..cf64dc5 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-summary.html @@ -0,0 +1,102 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.controller + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.controller

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.controller
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-tree.html new file mode 100644 index 0000000..1efc59e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-tree.html @@ -0,0 +1,69 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.controller Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.controller

+Package Hierarchies: + +
+
+

Interface Hierarchy

+
    +
  • diegosneves.github.conectardoacoes.adapters.rest.controller.ShelterController
  • +
  • diegosneves.github.conectardoacoes.adapters.rest.controller.UserController
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-use.html new file mode 100644 index 0000000..53f665b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/controller/package-use.html @@ -0,0 +1,86 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.controller + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.controller

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/AddressDTO.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/AddressDTO.html new file mode 100644 index 0000000..49e6b6c --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/AddressDTO.html @@ -0,0 +1,150 @@ + + + + +AddressDTO + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO
+
+
+
+
public class AddressDTO +extends Object
+
Classe modelo DTO para o endereço. Contém informações básicas de endereço, como rua, número, bairro, + cidade, estado e CEP. +

+ Uso: +

+     
+     AddressDTO address = AddressDTO.builder()
+     .street("Main St")
+     .number("42")
+     .neighborhood("Centro")
+     .city("Rio de Janeiro")
+     .state("RJ")
+     .zip("20031-040")
+     .build();
+ 
+ 
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AddressDTO

      +
      public AddressDTO()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/ExceptionDTO.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/ExceptionDTO.html new file mode 100644 index 0000000..a2b3c40 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/ExceptionDTO.html @@ -0,0 +1,259 @@ + + + + +ExceptionDTO + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Record Class ExceptionDTO

+
+
java.lang.Object +
java.lang.Record +
diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
+
+
+
+
+
public record ExceptionDTO(String message, int statusCode) +extends Record
+
A classe ExceptionDTO representa um objeto de transferência de dados + para transportar informações de exceção. + Ela contém a mensagem e o código de status da exceção.
+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
+
+
+
    + +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    +
    ExceptionDTO(String message, + int statusCode)
    +
    +
    Creates an instance of a ExceptionDTO record class.
    +
    +
    +
    +
  • + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    final boolean
    + +
    +
    Indicates whether some other object is "equal to" this one.
    +
    +
    final int
    + +
    +
    Returns a hash code value for this object.
    +
    + + +
    +
    Returns the value of the message record component.
    +
    +
    int
    + +
    +
    Returns the value of the statusCode record component.
    +
    +
    final String
    + +
    +
    Returns a string representation of this record class.
    +
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ExceptionDTO

      +
      public ExceptionDTO(String message, + int statusCode)
      +
      Creates an instance of a ExceptionDTO record class.
      +
      +
      Parameters:
      +
      message - the value for the message record component
      +
      statusCode - the value for the statusCode record component
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      toString

      +
      public final String toString()
      +
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      +
      +
      Specified by:
      +
      toString in class Record
      +
      Returns:
      +
      a string representation of this object
      +
      +
      +
    • +
    • +
      +

      hashCode

      +
      public final int hashCode()
      +
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      +
      +
      Specified by:
      +
      hashCode in class Record
      +
      Returns:
      +
      a hash code value for this object
      +
      +
      +
    • +
    • +
      +

      equals

      +
      public final boolean equals(Object o)
      +
      Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. Reference components are compared with Objects::equals(Object,Object); primitive components are compared with '=='.
      +
      +
      Specified by:
      +
      equals in class Record
      +
      Parameters:
      +
      o - the object with which to compare
      +
      Returns:
      +
      true if this object is the same as the o argument; false otherwise.
      +
      +
      +
    • +
    • +
      +

      message

      +
      public String message()
      +
      Returns the value of the message record component.
      +
      +
      Returns:
      +
      the value of the message record component
      +
      +
      +
    • +
    • +
      +

      statusCode

      +
      public int statusCode()
      +
      Returns the value of the statusCode record component.
      +
      +
      Returns:
      +
      the value of the statusCode record component
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/UserEntityDTO.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/UserEntityDTO.html new file mode 100644 index 0000000..51bcee4 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/UserEntityDTO.html @@ -0,0 +1,158 @@ + + + + +UserEntityDTO + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO
+
+
+
+
public class UserEntityDTO +extends Object
+
Classe modelo DTO para um usuário. Contém informações básicas sobre um usuário, + incluindo o id do usuário, o nome do usuário, o e-mail e o + tipo de perfil do usuário. +

+ Os tipos de perfil de usuário são definidos na enumeração UserProfileType. Os tipos atuais de perfil + suportados são 'Doador' e 'Beneficiário'. +
+ Por exemplo, para criar uma instância de UserEntityDTO, você pode usar: +

+     
+     UserEntityDTO user = UserEntityDTO.builder()
+         .id("3f2f8ab2-e9ee-41fa-af8a-b2e9ee91fac7")
+         .userName("John Doe")
+         .email("john.doe@example.com")
+         .userProfile(UserProfileType.DONOR) // pode ser DONOR ou BENEFICIARY
+         .build();
+ 
+ 
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserEntityDTO

      +
      public UserEntityDTO()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/AddressDTO.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/AddressDTO.html new file mode 100644 index 0000000..0476f3b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/AddressDTO.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/ExceptionDTO.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/ExceptionDTO.html new file mode 100644 index 0000000..f6c931a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/ExceptionDTO.html @@ -0,0 +1,114 @@ + + + + +Uses of Record Class diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Record Class
diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO

+
+
Packages that use ExceptionDTO
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/UserEntityDTO.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/UserEntityDTO.html new file mode 100644 index 0000000..d29cab1 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/class-use/UserEntityDTO.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-summary.html new file mode 100644 index 0000000..388fe5a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-summary.html @@ -0,0 +1,111 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.dto + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.dto

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.dto
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-tree.html new file mode 100644 index 0000000..4168ba9 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-tree.html @@ -0,0 +1,78 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.dto Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.dto

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO
    • +
    • java.lang.Record +
        +
      • diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
      • +
      +
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO
    • +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-use.html new file mode 100644 index 0000000..6818b4c --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/dto/package-use.html @@ -0,0 +1,83 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.dto + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.dto

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/ExceptionDetails.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/ExceptionDetails.html new file mode 100644 index 0000000..9acd025 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/ExceptionDetails.html @@ -0,0 +1,309 @@ + + + + +ExceptionDetails + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Enum Class ExceptionDetails

+
+
java.lang.Object +
java.lang.Enum<ExceptionDetails> +
diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
+
+
+
+
All Implemented Interfaces:
+
Serializable, Comparable<ExceptionDetails>, Constable
+
+
+
public enum ExceptionDetails +extends Enum<ExceptionDetails>
+
A classe ExceptionDetails é uma enumeração que define várias mensagens de exceções. + Cada mensagem corresponde a uma condição específica de validação ou erro + que pode ocorrer durante as operações.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Enum Constant Details

    +
      +
    • +
      +

      CONSTRUCTOR_DEFAULT_UNDEFINED

      +
      public static final ExceptionDetails CONSTRUCTOR_DEFAULT_UNDEFINED
      +
      +
    • +
    • +
      +

      CLASS_MAPPING_FAILURE

      +
      public static final ExceptionDetails CLASS_MAPPING_FAILURE
      +
      +
    • +
    • +
      +

      SHELTER_OPERATION_FAILURE

      +
      public static final ExceptionDetails SHELTER_OPERATION_FAILURE
      +
      +
    • +
    • +
      +

      ADDRESS_OPERATION_FAILURE

      +
      public static final ExceptionDetails ADDRESS_OPERATION_FAILURE
      +
      +
    • +
    • +
      +

      USER_OPERATION_FAILURE

      +
      public static final ExceptionDetails USER_OPERATION_FAILURE
      +
      +
    • +
    • +
      +

      INVALID_UUID_FORMAT_MESSAGE

      +
      public static final ExceptionDetails INVALID_UUID_FORMAT_MESSAGE
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      values

      +
      public static ExceptionDetails[] values()
      +
      Returns an array containing the constants of this enum class, in +the order they are declared.
      +
      +
      Returns:
      +
      an array containing the constants of this enum class, in the order they are declared
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static ExceptionDetails valueOf(String name)
      +
      Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
      +
      +
      Parameters:
      +
      name - the name of the enum constant to be returned.
      +
      Returns:
      +
      the enum constant with the specified name
      +
      Throws:
      +
      IllegalArgumentException - if this enum class has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
      +
      +
    • +
    • +
      +

      formatErrorMessage

      +
      public String formatErrorMessage(String message)
      +
      Formata uma mensagem com a entrada fornecida e retorna a mensagem formatada.
      +
      +
      Parameters:
      +
      message - A mensagem de entrada que será formatada.
      +
      Returns:
      +
      A mensagem após a formatação.
      +
      +
      +
    • +
    • +
      +

      getStatusCodeValue

      +
      public int getStatusCodeValue()
      +
      Retorna o código de status HTTP associado ao erro.
      +
      +
      Returns:
      +
      O código numérico do status HTTP relacionado com o erro.
      +
      +
      +
    • +
    • +
      +

      getHttpStatusCode

      +
      public org.springframework.http.HttpStatus getHttpStatusCode()
      +
      Obtém o status HTTP associado ao erro.
      +
      +
      Returns:
      +
      O código de status HTTP relacionado ao erro.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/UserProfileType.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/UserProfileType.html new file mode 100644 index 0000000..ad5bb01 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/UserProfileType.html @@ -0,0 +1,226 @@ + + + + +UserProfileType + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Enum Class UserProfileType

+
+
java.lang.Object +
java.lang.Enum<UserProfileType> +
diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType
+
+
+
+
+
All Implemented Interfaces:
+
Serializable, Comparable<UserProfileType>, Constable
+
+
+
public enum UserProfileType +extends Enum<UserProfileType>
+
A enumeração UserProfileType fornece os tipos de perfis disponíveis para um usuário. + Os perfis disponíveis são 'Doador' e 'Beneficiário'.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Enum Constant Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      values

      +
      public static UserProfileType[] values()
      +
      Returns an array containing the constants of this enum class, in +the order they are declared.
      +
      +
      Returns:
      +
      an array containing the constants of this enum class, in the order they are declared
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static UserProfileType valueOf(String name)
      +
      Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
      +
      +
      Parameters:
      +
      name - the name of the enum constant to be returned.
      +
      Returns:
      +
      the enum constant with the specified name
      +
      Throws:
      +
      IllegalArgumentException - if this enum class has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/class-use/ExceptionDetails.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/class-use/ExceptionDetails.html new file mode 100644 index 0000000..c51c65d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/class-use/ExceptionDetails.html @@ -0,0 +1,119 @@ + + + + +Uses of Enum Class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Enum Class
diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails

+
+
Packages that use ExceptionDetails
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/class-use/UserProfileType.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/class-use/UserProfileType.html new file mode 100644 index 0000000..6774537 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/class-use/UserProfileType.html @@ -0,0 +1,91 @@ + + + + +Uses of Enum Class diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Enum Class
diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType

+
+
Packages that use UserProfileType
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-summary.html new file mode 100644 index 0000000..985bc3f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-summary.html @@ -0,0 +1,100 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.enums + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.enums

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.enums
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-tree.html new file mode 100644 index 0000000..4adae4b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-tree.html @@ -0,0 +1,77 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.enums Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.enums

+Package Hierarchies: + +
+
+

Enum Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-use.html new file mode 100644 index 0000000..9b28161 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/enums/package-use.html @@ -0,0 +1,101 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.enums + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.enums

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/AddressEntityFailuresException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/AddressEntityFailuresException.html new file mode 100644 index 0000000..321917d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/AddressEntityFailuresException.html @@ -0,0 +1,235 @@ + + + + +AddressEntityFailuresException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class AddressEntityFailuresException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class AddressEntityFailuresException +extends RuntimeException
+
A classe AddressEntityFailuresException é uma subclasse da classe RuntimeException. + Esta é uma exceção personalizada que é lançada quando ocorre um erro durante a execução de uma operação + relacionada a uma entidade de endereço, como mapeamento ou validação. +

+ As mensagens de erro personalizadas para esta exceção são definidas através das constantes na enumeração + ExceptionDetails. A mensagem de erro específica usada neste caso é a + ExceptionDetails.ADDRESS_OPERATION_FAILURE. +

+ Sendo uma RuntimeException, não é obrigatório que seja declarada na cláusula `throws` dos métodos + que a lançam, e ela não precisa ser capturada explicitamente. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AddressEntityFailuresException

      +
      public AddressEntityFailuresException(String message)
      +
      Este construtor para a classe AddressEntityFailuresException recebe uma string + que representa uma mensagem personalizada de erro. A mensagem fornecida é então formatada + por meio do método ERROR.formatErrorMessage(message), onde ERROR é uma + constante da enumeração ExceptionDetails, especificamente + ExceptionDetails.ADDRESS_OPERATION_FAILURE, que guarda detalhes para uma operação + de endereço que falhou. +

      + A mensagem formatada é então passada para o construtor da superclasse RuntimeException + através da chamada super(). +

      +
      +
      Parameters:
      +
      message - A mensagem personalizada de erro que será formatada e passada + para a superclasse RuntimeException.
      +
      Throws:
      +
      NullPointerException - se a mensagem fornecida for null.
      +
      +
      +
    • +
    • +
      +

      AddressEntityFailuresException

      +
      public AddressEntityFailuresException(String message, + Throwable cause)
      +
      Construtor que recebe uma mensagem de erro e uma exceção causal. Invoca o construtor de sua classe + mãe RuntimeException passando uma mensagem de erro formatada e a exceção causal. + A mensagem de erro é formatada usando o método ERROR.formatErrorMessage(message), onde ERROR + é a constante ExceptionDetails especificada para operações de endereço que falham.
      +
      +
      Parameters:
      +
      message - A mensagem de erro personalizada.
      +
      cause - A exceção causal.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/ConstructorDefaultUndefinedException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/ConstructorDefaultUndefinedException.html new file mode 100644 index 0000000..299662b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/ConstructorDefaultUndefinedException.html @@ -0,0 +1,209 @@ + + + + +ConstructorDefaultUndefinedException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ConstructorDefaultUndefinedException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class ConstructorDefaultUndefinedException +extends RuntimeException
+
Exceção personalizada que é lançada quando não é definido um construtor padrão.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ConstructorDefaultUndefinedException

      +
      public ConstructorDefaultUndefinedException(String message)
      +
      Construtor da exceção ConstructorDefaultUndefinedException.
      +
      +
      Parameters:
      +
      message - a mensagem de detalhe da exceção.
      +
      +
      +
    • +
    • +
      +

      ConstructorDefaultUndefinedException

      +
      public ConstructorDefaultUndefinedException(String message, + Throwable e)
      +
      Construtor da exceção ConstructorDefaultUndefinedException.
      +
      +
      Parameters:
      +
      message - a mensagem de detalhe da exceção.
      +
      e - a causa da exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/MapperFailureException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/MapperFailureException.html new file mode 100644 index 0000000..1750bf0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/MapperFailureException.html @@ -0,0 +1,199 @@ + + + + +MapperFailureException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class MapperFailureException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class MapperFailureException +extends RuntimeException
+
MapperFailureException é uma classe de exceção personalizada. Ela tem como finalidade gerenciar + falhas ocorridas durante o processo de mapeamento, e proporcionar mensagens de erro mais detalhadas. + Herdando de RuntimeException, ela representa exceções em tempo de execução que podem ser lançadas + durante a operação normal da JVM.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      MapperFailureException

      +
      public MapperFailureException(String message, + Throwable e)
      +
      Esta é uma classe de exceção personalizada usada para gerenciar e fornecer mensagens mais + informativas quando uma falha ocorre durante o mapeamento.
      +
      +
      Parameters:
      +
      message - A mensagem específica da exceção.
      +
      e - A exceção generica causada durante o mapeamento.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/ShelterEntityFailuresException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/ShelterEntityFailuresException.html new file mode 100644 index 0000000..443f34f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/ShelterEntityFailuresException.html @@ -0,0 +1,213 @@ + + + + +ShelterEntityFailuresException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterEntityFailuresException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class ShelterEntityFailuresException +extends RuntimeException
+
A classe ShelterEntityFailuresException representa uma exceção específica que será lançada + quando ocorrer uma falha em uma operação relacionada ao ShelterEntity. + Herda de RuntimeException e adiciona mensagens de erro detalhadas para os erros que podem ocorrer + durante as operações de manipulação dos dados da entidade Shelter.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ShelterEntityFailuresException

      +
      public ShelterEntityFailuresException(String message)
      +
      Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao ShelterEntity. + A exceção contém uma mensagem de erro detalhada.
      +
      +
      Parameters:
      +
      message - A mensagem específica da exceção.
      +
      +
      +
    • +
    • +
      +

      ShelterEntityFailuresException

      +
      public ShelterEntityFailuresException(String message, + Throwable cause)
      +
      Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao ShelterEntity. + A exceção contém uma mensagem de erro detalhada e a causa original do erro.
      +
      +
      Parameters:
      +
      message - A mensagem específica da exceção.
      +
      cause - A causa original do erro.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/UserEntityFailuresException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/UserEntityFailuresException.html new file mode 100644 index 0000000..4628570 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/UserEntityFailuresException.html @@ -0,0 +1,213 @@ + + + + +UserEntityFailuresException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserEntityFailuresException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class UserEntityFailuresException +extends RuntimeException
+
A classe UserEntityFailuresException representa uma exceção específica que será lançada + quando ocorrer uma falha em uma operação relacionada ao UserEntity. + Herda de RuntimeException e adiciona mensagens de erro detalhadas para os erros que podem ocorrer + durante as operações de manipulação dos dados da entidade User.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserEntityFailuresException

      +
      public UserEntityFailuresException(String message)
      +
      Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao UserEntity. + A exceção contém uma mensagem de erro detalhada.
      +
      +
      Parameters:
      +
      message - A mensagem específica da exceção.
      +
      +
      +
    • +
    • +
      +

      UserEntityFailuresException

      +
      public UserEntityFailuresException(String message, + Throwable cause)
      +
      Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao UserEntity. + A exceção contém uma mensagem de erro detalhada e a causa original do erro.
      +
      +
      Parameters:
      +
      message - A mensagem específica da exceção.
      +
      cause - A causa original do erro.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/AddressEntityFailuresException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/AddressEntityFailuresException.html new file mode 100644 index 0000000..1efb363 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/AddressEntityFailuresException.html @@ -0,0 +1,86 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/ConstructorDefaultUndefinedException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/ConstructorDefaultUndefinedException.html new file mode 100644 index 0000000..9186625 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/ConstructorDefaultUndefinedException.html @@ -0,0 +1,105 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/MapperFailureException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/MapperFailureException.html new file mode 100644 index 0000000..6835760 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/MapperFailureException.html @@ -0,0 +1,104 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException

+
+
Packages that use MapperFailureException
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/ShelterEntityFailuresException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/ShelterEntityFailuresException.html new file mode 100644 index 0000000..98e50d8 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/ShelterEntityFailuresException.html @@ -0,0 +1,86 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/UserEntityFailuresException.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/UserEntityFailuresException.html new file mode 100644 index 0000000..4472a5f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/class-use/UserEntityFailuresException.html @@ -0,0 +1,128 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException

+
+
Packages that use UserEntityFailuresException
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-summary.html new file mode 100644 index 0000000..4d06633 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-summary.html @@ -0,0 +1,114 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.exception + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.exception

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.exception
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-tree.html new file mode 100644 index 0000000..94e1aea --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-tree.html @@ -0,0 +1,88 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.exception Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.exception

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-use.html new file mode 100644 index 0000000..e370205 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/exception/package-use.html @@ -0,0 +1,151 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.exception + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.exception

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapper.html new file mode 100644 index 0000000..6a31f26 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapper.html @@ -0,0 +1,222 @@ + + + + +AddressEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class AddressEntityMapper

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<AddressEntity,Address>
+
+
+
public class AddressEntityMapper +extends Object +implements MapperStrategy<AddressEntity,Address>
+
Implementação da interface MapperStrategy para mapear um objeto Address para sua correspondente entidade AddressEntity. + Esta classe é utilizada para converter um objeto Address, que representa um endereço no sistema, em um objeto AddressEntity + que pode ser armazenado no banco de dados na tabela "address". +

+ Enquanto essa classe é específica para o mapeamento de objetos de endereço, ela implementa a interface MapperStrategy, + permitindo que seja usada em um contexto mais amplo de mapeamento de objetos.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      ADDRESS_CLASS

      +
      public static final Class<Address> ADDRESS_CLASS
      +
      O Class do objeto de endereço, usado para formatar as mensagens de erro.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AddressEntityMapper

      +
      public AddressEntityMapper()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    + +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapper.html new file mode 100644 index 0000000..8a273fe --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapper.html @@ -0,0 +1,227 @@ + + + + +AddressMapper + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<Address,AddressEntity>
+
+
+
public class AddressMapper +extends Object +implements MapperStrategy<Address,AddressEntity>
+
A classe AddressMapper implementa a interface de estratégia de Mapeamento MapperStrategy + para converter objetos AddressEntity em objetos Address. +

+ Esta classe é responsável por mapear uma entidade AddressEntity que representa um registro de endereço + no banco de dados para um objeto Address usado no nível de aplicativo. +

+ Esta classe também valida os dados da AddressEntity e lança uma exceção + AddressEntityFailuresException caso seja fornecida uma AddressEntity inválida. +

+ Contém uma mensgem erro predefinida para entidades de endereço inválidas: "Deve ser fornecida uma entidade de Endereço que seja válida."

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/BuilderMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/BuilderMapper.html new file mode 100644 index 0000000..00e1ac7 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/BuilderMapper.html @@ -0,0 +1,258 @@ + + + + +BuilderMapper + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
+
+
+
+
public class BuilderMapper +extends Object
+
A classe BuilderMapper fornece métodos para mapear os campos de um objeto fonte + para os campos de uma classe destino.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      SOURCE_OBJECT_NULL_ERROR_MESSAGE

      +
      public static final String SOURCE_OBJECT_NULL_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      STRATEGY_CANNOT_BE_NULL

      +
      public static final String STRATEGY_CANNOT_BE_NULL
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      mapTo

      +
      public static <T> T mapTo(Class<T> destinationClass, + Object source) + throws ConstructorDefaultUndefinedException, +MapperFailureException
      +
      Mapeia os campos do objeto de origem para os campos da classe de destino.
      +
      +
      Type Parameters:
      +
      T - o tipo da classe de destino
      +
      Parameters:
      +
      destinationClass - a classe a ser mapeada
      +
      source - o objeto de origem que será convertido no objeto de destino
      +
      Returns:
      +
      uma instância da classe de destino com seus campos preenchidos
      +
      Throws:
      +
      ConstructorDefaultUndefinedException - se a classe de destino não tiver um construtor padrão
      +
      MapperFailureException - se ocorrer um erro ao mapear os campos
      +
      +
      +
    • +
    • +
      +

      mapTo

      +
      public static <T, +E> T mapTo(MapperStrategy<T,E> strategy, + E source)
      +
      Esta é uma função auxiliar genérica para converter (mapear) um objeto de origem em um destino desejado, + usando uma estratégia de mapeamento fornecida. Ele fornece utilidade na redução de código duplicado ao + lidar com conversões de objetos em projetos. A função utiliza Generics para manter a flexibilidade, + permitindo que qualquer objeto seja mapeado para qualquer outro. +

      + Esta função verifica primeiro se a estratégia fornecida e o objeto de origem não são nulos. + Se algum deles for nulo, a função lançará uma exceção IllegalArgumentException. +

      + O propósito deste método é fornecer um mapeamento eficaz de objetos e garantir a validade dos dados a serem mapeados.

      +
      +
      Type Parameters:
      +
      T - O tipo do objeto de destino, para o qual o objeto de origem será mapeado.
      +
      E - O tipo do objeto de origem que será mapeado para o objeto de destino.
      +
      Parameters:
      +
      strategy - A estratégia de mapeamento que define a lógica de como o objeto de origem deve ser mapeado para o objeto de destino. + Os detalhes sobre como implementar a estratégia são responsabilidade do desenvolvedor.
      +
      source - O objeto de origem a ser mapeado. A estrutura desse objeto depende do objeto definido durante a invocação.
      +
      Returns:
      +
      Retorna um novo objeto do tipo de destino (T) com seus campos mapeados do objeto de origem.
      +
      Throws:
      +
      IllegalArgumentException - será lançada se a estratégia de mapeamento ou o objeto de origem for null.
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapper.html new file mode 100644 index 0000000..1739a8f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapper.html @@ -0,0 +1,220 @@ + + + + +DonationEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class DonationEntityMapper

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<DonationEntity,Donation>
+
+
+
public class DonationEntityMapper +extends Object +implements MapperStrategy<DonationEntity,Donation>
+
Classe responsável por implementar a estratégia de mapeamento para objetos Donation + para objetos DonationEntity. + Essa classe permite a conversão de instâncias de Donation em objetos DonationEntity, que + podem ser persistidos no banco de dados.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapper.html new file mode 100644 index 0000000..cb06e4b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapper.html @@ -0,0 +1,211 @@ + + + + +DonationMapper + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<Donation,DonationEntity>
+
+
+
public class DonationMapper +extends Object +implements MapperStrategy<Donation,DonationEntity>
+
Esta classe implementa a interface MapperStrategy para mapear a entidade DonationEntity para o objeto de domínio Donation. + É confiável para a conversão de uma entidade do banco de dados para o objeto do domínio. + +

A classe usa a estratégia definida pela interface MapperStrategy + para converter um DonationEntity para um objeto de domínio doação.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      DonationMapper

      +
      public DonationMapper()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      mapFrom

      +
      public Donation mapFrom(DonationEntity source)
      +
      Mapeia a entidade de doação do banco de dados para uma instância do objeto de domínio doação. + +

      O método aceita uma entidade DonationEntity como input e cria uma nova instância do domínio de doação com base nesse input. + O mapeamento é feito da seguinte maneira:

      + +

      A entidade passada é primeiramente validada para verificar se não é nula. Se a entidade for nula, uma exceção + ShelterEntityFailuresException é lançada com uma mensagem de erro formatada.

      + +

      Em seguida, uma tentativa é feita para criar uma nova instância do domínio de doação, usando os valores retornados + pelos métodos getId(), getDescription() e getAmount() da entidade DonationEntity.

      + +

      Se a tentativa falhar por algum motivo (por exemplo, se os valores retornados não passarem nas verificações de + validação no construtor do domínio de doação), uma DonationRegisterFailureException é capturada e uma ShelterEntityFailuresException + é lançada com uma mensagem de erro formatada e a exceção original anexada.

      + +

      Se a criação da nova instância de Doação for bem-sucedida, essa instância é retornada.

      +
      +
      Specified by:
      +
      mapFrom in interface MapperStrategy<Donation,DonationEntity>
      +
      Parameters:
      +
      source - o objeto DonationEntity que será mapeado para o objeto de domínio doação. Não deve ser nulo.
      +
      Returns:
      +
      uma nova instância do domínio doação, mapeada dos campos de uma entidade DonationEntity.
      +
      Throws:
      +
      ShelterEntityFailuresException - se a entidade de entrada for nula ou se houver uma falha durante a criação da nova instância de Doação.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/MapperStrategy.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/MapperStrategy.html new file mode 100644 index 0000000..e63c43e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/MapperStrategy.html @@ -0,0 +1,150 @@ + + + + +MapperStrategy + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface MapperStrategy<T,E>

+
+
+
+
Type Parameters:
+
T - o tipo da classe de destino
+
E - o tipo do objeto de origem
+
+
+
All Known Implementing Classes:
+
AddressEntityMapper, AddressMapper, DonationEntityMapper, DonationMapper, ShelterEntityMapper, ShelterMapper, UserEntityMapper, UserMapper
+
+
+
public interface MapperStrategy<T,E>
+
A interface MapperStrategy define uma estratégia para executar operações de mapeamento de objetos.
+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
+
+
+
    + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    + +
    mapFrom(E source)
    +
    +
    Executa a estratégia para realizar uma operação de mapeamento entre objetos.
    +
    +
    +
    +
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      mapFrom

      +
      T mapFrom(E source)
      +
      Executa a estratégia para realizar uma operação de mapeamento entre objetos.
      +
      +
      Parameters:
      +
      source - o objeto de source que será convertido no objeto de destino
      +
      Returns:
      +
      uma instância da classe de destino com seus campos preenchidos
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapper.html new file mode 100644 index 0000000..b5e2fff --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapper.html @@ -0,0 +1,225 @@ + + + + +ShelterEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterEntityMapper

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<ShelterEntity,ShelterContract>
+
+
+
public class ShelterEntityMapper +extends Object +implements MapperStrategy<ShelterEntity,ShelterContract>
+
Classe ShelterEntityMapper que implementa a interface MapperStrategy para executar operações de mapeamento entre a classe ShelterContract e a classe ShelterEntity. +

+ Esta classe contém métodos que realizam o mapeamento de um objeto ShelterContract para um objeto ShelterEntity. +

+ Esta classe usa a classes AddressEntityMapper, UserEntityMapper e DonationEntityMapper para mapear respectivas partes do objeto ShelterContract. +

+ Também contém um método auxiliar para mapear uma lista de objetos Donation.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapper.html new file mode 100644 index 0000000..1359350 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapper.html @@ -0,0 +1,244 @@ + + + + +ShelterMapper + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<ShelterContract,ShelterEntity>
+
+
+
public class ShelterMapper +extends Object +implements MapperStrategy<ShelterContract,ShelterEntity>
+
Implementação da interface MapperStrategy para a conversão entre a entidade ShelterEntity e a classe de domínio ShelterContract. + Fornece funcionalidades para mapear um objeto ShelterEntity em um objeto ShelterContract. + Utiliza a classe UserMapper para mapear o usuário responsável (UserEntity) para um objeto User.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapper.html new file mode 100644 index 0000000..5b8f222 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapper.html @@ -0,0 +1,229 @@ + + + + +UserEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserEntityMapper

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<UserEntity,UserContract>
+
+
+
public class UserEntityMapper +extends Object +implements MapperStrategy<UserEntity,UserContract>
+
A classe UserEntityMapper implementa a interface MapperStrategy e é usada para mapear um objeto do tipo User para um objeto de entidade UserEntity. +

+ Essa classe é essencial para a camada de persistência do aplicativo, pois permite uma conversão eficiente entre objetos do domínio do problema e entidades que podem ser persistidas em um banco de dados. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserEntityMapper

      +
      public UserEntityMapper()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      mapFrom

      +
      public UserEntity mapFrom(UserContract source)
      +
      Este método é usado para mapear um objeto de origem do tipo User para um objeto de entidade UserEntity. +

      + Primeiro, realiza uma verificação de not-null-or-empty do objeto de origem utilizando a utilidade ValidationUtils. + Se o objeto de origem for nulo ou vazio, um UserEntityFailuresException será lançado com a mensagem de erro gerada por MapperFailureException.ERROR. +

      +

      + Em seguida, tenta mapear o objeto de origem para a classe UserEntity usando a utilidade BuilderMapper. + Após o mapeamento bem-sucedido, ele então tenta configurar o perfil do usuário no objeto de entidade mapeado. O perfil do usuário é obtido a partir do perfil do usuário do objeto de origem e convertido para uma enumeração de UserProfileType. +

      +

      + Se um RuntimeException é lançado durante o mapeamento ou a configuração do perfil do usuário, um novo UserEntityFailuresException é lançado com a mensagem de erro gerada por MapperFailureException.ERROR e a exceção original anexada para fins de rastreamento. +

      + O objeto UserEntity mapeado, ou nulo se não foi possível realizar o mapeamento, é retornado ao chamador.
      +
      +
      Specified by:
      +
      mapFrom in interface MapperStrategy<UserEntity,UserContract>
      +
      Parameters:
      +
      source - o objeto do tipo User que é usado como base para criar um objeto de entidade UserEntity.
      +
      Returns:
      +
      um objeto UserEntity mapeado a partir do objeto de origem do tipo User, + ou nulo se o mapeamento não foi possível devido a exceções durante o mapeamento ou a configuração do perfil do usuário da entidade.
      +
      Throws:
      +
      UserEntityFailuresException - se o objeto de origem é nulo ou vazio, ou se um erro ocorrer durante o mapeamento ou a configuração do perfil do usuário.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapper.html new file mode 100644 index 0000000..d6d8686 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapper.html @@ -0,0 +1,228 @@ + + + + +UserMapper + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper
+
+
+
+
All Implemented Interfaces:
+
MapperStrategy<UserContract,UserEntity>
+
+
+
public class UserMapper +extends Object +implements MapperStrategy<UserContract,UserEntity>
+
Implementação da interface MapperStrategy para a conversão entre a entidade UserEntity e a classe de domínio User. + Fornece funcionalidades para mapear um objeto UserEntity em um objeto User. +

+ A classe UserMapper tem a função de converter os dados de um objeto UserEntity, que são compatíveis com o modelo de + dados do banco, para um objeto User, que é o modelo de negócio do sistema. +

+ Como é uma implementação da interface MapperStrategy, a classe UserMapper é obrigada a implementar o método mapFrom.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      USER_ENTITY_CLASS

      +
      public static final Class<UserEntity> USER_ENTITY_CLASS
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserMapper

      +
      public UserMapper()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      mapFrom

      +
      public UserContract mapFrom(UserEntity source)
      +
      Mapeia uma entidade de usuário (UserEntity) para um objeto de usuário de domínio (User). + Realiza a conversão de uma entidade persistida de um usuário para uma representação de usuário de domínio. +

      + O mapeamento é realizado atribuindo cada campo do objeto User com os valores correspondentes do objeto UserEntity. + Além disso, o perfil do usuário é obtido utilizando o método valueOf da classe Enum, que retornará o perfil + correspondente de acordo com o nome do perfil informado.

      +
      +
      Specified by:
      +
      mapFrom in interface MapperStrategy<UserContract,UserEntity>
      +
      Parameters:
      +
      source - a entidade de origem que representa um usuário no banco de dados
      +
      Returns:
      +
      uma instância da classe de domínio User, com seus campos preenchidos com os valores correspondentes da entidade de origem
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/AddressEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/AddressEntityMapper.html new file mode 100644 index 0000000..b845768 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/AddressEntityMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/AddressMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/AddressMapper.html new file mode 100644 index 0000000..7b09ca5 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/AddressMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/BuilderMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/BuilderMapper.html new file mode 100644 index 0000000..f234a4d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/BuilderMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/DonationEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/DonationEntityMapper.html new file mode 100644 index 0000000..1e22ae3 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/DonationEntityMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/DonationMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/DonationMapper.html new file mode 100644 index 0000000..7803d82 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/DonationMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/MapperStrategy.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/MapperStrategy.html new file mode 100644 index 0000000..4b99352 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/MapperStrategy.html @@ -0,0 +1,136 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy

+
+
Packages that use MapperStrategy
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/ShelterEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/ShelterEntityMapper.html new file mode 100644 index 0000000..bebd87a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/ShelterEntityMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/ShelterMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/ShelterMapper.html new file mode 100644 index 0000000..2303197 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/ShelterMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/UserEntityMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/UserEntityMapper.html new file mode 100644 index 0000000..ad4c64b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/UserEntityMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/UserMapper.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/UserMapper.html new file mode 100644 index 0000000..34128aa --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/class-use/UserMapper.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-summary.html new file mode 100644 index 0000000..f6c147f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-summary.html @@ -0,0 +1,141 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.mapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.mapper

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-tree.html new file mode 100644 index 0000000..3a4e78b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-tree.html @@ -0,0 +1,86 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.mapper Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.mapper

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper (implements diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>)
    • +
    +
  • +
+
+
+

Interface Hierarchy

+
    +
  • diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-use.html new file mode 100644 index 0000000..9c89b19 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/mapper/package-use.html @@ -0,0 +1,82 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.mapper + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.mapper

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/AddressEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/AddressEntity.html new file mode 100644 index 0000000..d58b365 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/AddressEntity.html @@ -0,0 +1,140 @@ + + + + +AddressEntity + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity
+
+
+
+
@Entity +public class AddressEntity +extends Object
+
Objeto de entidade AddressEntity que representa um objeto endereço no banco de dados mapeado para a tabela "address". +

+ Esta classe é uma entidade do JPA que representa a tabela "address". +

+ Anotado com Lombok, o que significa que os construtores, getters e setters são gerados automaticamente.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AddressEntity

      +
      public AddressEntity()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/DonationEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/DonationEntity.html new file mode 100644 index 0000000..6b02f5f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/DonationEntity.html @@ -0,0 +1,140 @@ + + + + +DonationEntity + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity
+
+
+
+
@Entity +public class DonationEntity +extends Object
+
Objeto de entidade DonationEntity que representa um objeto doação no banco de dados mapeado para a tabela "donations". +

+ Esta classe é uma entidade do JPA que representa a tabela "donations". +

+ Anotado com Lombok, o que significa que os construtores, getters e setters são gerados automaticamente.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      DonationEntity

      +
      public DonationEntity()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/ShelterEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/ShelterEntity.html new file mode 100644 index 0000000..91cc561 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/ShelterEntity.html @@ -0,0 +1,140 @@ + + + + +ShelterEntity + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity
+
+
+
+
@Entity +public class ShelterEntity +extends Object
+
Objeto de entidade ShelterEntity que representa um objeto abrigo no banco de dados mapeado para a tabela "shelters". +

+ Esta classe é uma entidade do JPA que representa a tabela "shelters". +

+ Anotado com Lombok, o que significa que os construtores, getters e setters são gerados automaticamente.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ShelterEntity

      +
      public ShelterEntity()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/UserEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/UserEntity.html new file mode 100644 index 0000000..eebc9b3 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/UserEntity.html @@ -0,0 +1,157 @@ + + + + +UserEntity + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity
+
+
+
+
@Entity +public class UserEntity +extends Object
+
Representa um usuário no sistema. Cada usuário tem um identificador único, nome de usuário, + endereço de e-mail, perfil de usuário e senha. + +

Anotações usadas na classe:

+
    +
  • @Entity - Anotação do JPA que denota que esta é uma classe de entidade.
  • +
  • @Table - Anotação do JPA usada para especificar detalhes da tabela de banco de dados correspondente.
  • +
  • @AllArgsConstructor - Anotação do Lombok para gerar um construtor com um parâmetro para cada campo.
  • +
  • @NoArgsConstructor - Anotação do Lombok para gerar um construtor sem parâmetros.
  • +
  • @Builder - Anotação do Lombok para suportar o padrão Builder de design para a construção de objetos.
  • +
  • @Getter - Anotação do Lombok para gerar getters para todos os campos.
  • +
  • @Setter - Anotação do Lombok para gerar setters para todos os campos.
  • +
+ +

Os atributos da classe incluem:

+
    +
  • userId - O identificador único do usuário. Chave primária para a tabela do banco de dados.
  • +
  • userName - O nome de usuário escolhido pelo usuário. Deve ser único.
  • +
  • email - O endereço de email do usuário. Usado para comunicação e notificações.
  • +
  • userProfile - O perfil do usuário que determina suas permissões e acessos.
  • +
  • userPassword - A senha escolhida pelo usuário para acesso seguro ao sistema.
  • +
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserEntity

      +
      public UserEntity()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/AddressEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/AddressEntity.html new file mode 100644 index 0000000..b001c72 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/AddressEntity.html @@ -0,0 +1,123 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity

+
+
Packages that use AddressEntity
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/DonationEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/DonationEntity.html new file mode 100644 index 0000000..ec7ab57 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/DonationEntity.html @@ -0,0 +1,114 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity

+
+
Packages that use DonationEntity
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/ShelterEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/ShelterEntity.html new file mode 100644 index 0000000..deef7ee --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/ShelterEntity.html @@ -0,0 +1,105 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity

+
+
Packages that use ShelterEntity
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/UserEntity.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/UserEntity.html new file mode 100644 index 0000000..6052c8a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/class-use/UserEntity.html @@ -0,0 +1,123 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity

+
+
Packages that use UserEntity
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-summary.html new file mode 100644 index 0000000..303039a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-summary.html @@ -0,0 +1,108 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.model + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.model

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.model
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-tree.html new file mode 100644 index 0000000..5b2af98 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-tree.html @@ -0,0 +1,75 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.model Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.model

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity
    • +
    • diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity
    • +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-use.html new file mode 100644 index 0000000..cfb300e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/model/package-use.html @@ -0,0 +1,117 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.model + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.model

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/package-summary.html new file mode 100644 index 0000000..c474c4b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/package-summary.html @@ -0,0 +1,112 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/package-tree.html new file mode 100644 index 0000000..728bb2a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/package-tree.html @@ -0,0 +1,72 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/package-use.html new file mode 100644 index 0000000..0973520 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/AddressRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/AddressRepository.html new file mode 100644 index 0000000..7347346 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/AddressRepository.html @@ -0,0 +1,156 @@ + + + + +AddressRepository + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface AddressRepository

+
+
+
+
All Superinterfaces:
+
org.springframework.data.repository.CrudRepository<AddressEntity,String>, org.springframework.data.repository.Repository<AddressEntity,String>
+
+
+
@Repository +public interface AddressRepository +extends org.springframework.data.repository.CrudRepository<AddressEntity,String>
+
Java Persistence API (JPA) Repository para AddressEntity. + Esta interface estende CrudRepository, que fornece métodos como save(…), findOne(…), findAll(), count(), delete(…) etc. +

+ Aciona consultas de banco de dados relacionadas a AddressEntity.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+
    + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    + + +
    +
    Retorna um conteiner Optional encapsulando o AddressEntity encontrado pelo Id.
    +
    +
    +
    +
    +
    +

    Methods inherited from interface org.springframework.data.repository.CrudRepository

    +count, delete, deleteAll, deleteAll, deleteAllById, deleteById, existsById, findAll, findAllById, save, saveAll
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      findById

      +
      Optional<AddressEntity> findById(String id)
      +
      Retorna um conteiner Optional encapsulando o AddressEntity encontrado pelo Id.
      +
      +
      Specified by:
      +
      findById in interface org.springframework.data.repository.CrudRepository<AddressEntity,String>
      +
      Parameters:
      +
      id - String, identificador da entidade de endereço a ser procurada. Deve ser não nulo.
      +
      Returns:
      +
      um Optional de AddressEntity. Este Optional será não nulo, mas pode estar vazio se nenhum AddressEntity + com o ID fornecido for encontrado.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/DonationRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/DonationRepository.html new file mode 100644 index 0000000..b61df0b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/DonationRepository.html @@ -0,0 +1,171 @@ + + + + +DonationRepository + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface DonationRepository

+
+
+
+
All Superinterfaces:
+
org.springframework.data.repository.CrudRepository<DonationEntity,String>, org.springframework.data.repository.Repository<DonationEntity,String>
+
+
+
@Repository +public interface DonationRepository +extends org.springframework.data.repository.CrudRepository<DonationEntity,String>
+
Definição da interface do repositório para a entidade de doação DonationEntity. + Esta interface estende a interface CrudRepository do Spring Data JPA, + o que torna disponível metódos básicos de CRUD (Create, Read, Update, Delete). +

+ Esta interface define um método personalizado para buscar uma entidade de doação com base no ID.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+
    +
  • CrudRepository
  • +
+
+
+
+
+
    + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    + + +
    +
    Este método é usado para encontrar uma entidade de doação com base no ID.
    +
    +
    +
    +
    +
    +

    Methods inherited from interface org.springframework.data.repository.CrudRepository

    +count, delete, deleteAll, deleteAll, deleteAllById, deleteById, existsById, findAll, findAllById, save, saveAll
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      findById

      + +
      Este método é usado para encontrar uma entidade de doação com base no ID.
      +
      +
      Specified by:
      +
      findById in interface org.springframework.data.repository.CrudRepository<DonationEntity,String>
      +
      Parameters:
      +
      id - - O ID da entidade de doação que está sendo procurada. + Este parâmetro é usado para identificar a entidade de doação a ser buscada.
      +
      Returns:
      +
      Retorna um Optional que pode ou não conter uma entidade de doação, dependendo se um + correspondente foi encontrado ou não. + Optional é usado aqui para forçar o programador a pensar + sobre o caso em que a entidade de doação pode não ser encontrada. + Isso reduz o risco de lançar um NullPointerException não intencional. + Se uma entidade de doação correspondente for encontrada, ela será retornada, caso contrário, + um Optional vazio será retornado.
      +
      Throws:
      +
      org.springframework.dao.DataAccessException - - em caso de falha na persistência.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepository.html new file mode 100644 index 0000000..72a6378 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepository.html @@ -0,0 +1,324 @@ + + + + +ShelterRepository + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface ShelterRepository

+
+
+
+
All Superinterfaces:
+
org.springframework.data.repository.CrudRepository<ShelterEntity,String>, org.springframework.data.repository.Repository<ShelterEntity,String>, RepositoryContract<ShelterContract>, ShelterContractRepository
+
+
+
@Repository +public interface ShelterRepository +extends ShelterContractRepository, org.springframework.data.repository.CrudRepository<ShelterEntity,String>
+
Este repositório é responsável pela persistência de dados relacionados a abrigos (Shelter). +

+ Faz uso de interfaces do Spring Data JPA para implementação do CRUD (Criação, Leitura, Atualização e Deleção) padrão, além de + herdar de um contrato específico do Shelter para implementar suas próprias operações básicas (Encontrar por ID, Buscar todas, + Persistir e Deletar por ID). +

+ Mecanismos de mapeamento são usados para desacoplar a conversão entre entidades JPA e objetos de domínio.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      findEntityById

      +
      default ShelterContract findEntityById(String id)
      +
      Este método é usado para encontrar e retornar uma entidade ShelterEntity pelo ID. +

      + Primeiro, é executada a função findById do Repositório do Spring, que retorna um Optional de ShelterEntity. + Então verifica-se se o Optional está vazio. Se estiver vazio, significa que nenhuma entidade foi encontrada com o ID fornecido, e o método retorna null. + Se o Optional não estiver vazio, o método tenta mapear a ShelterEntity encontrada para uma instância de ShelterContract. +

      + Uma ShelterCreationFailureException pode ser lançada durante o mapeamento. Se isso acontecer, o método lança uma nova ShelterEntityFailuresException com uma mensagem de erro adequada.

      +
      +
      Specified by:
      +
      findEntityById in interface RepositoryContract<ShelterContract>
      +
      Parameters:
      +
      id - A String que representa o ID único da entidade ShelterEntity a ser encontrada. Deve ser um valor não nulo e não vazio.
      +
      Returns:
      +
      Uma instância de ShelterContract que representa a entidade Shelter mapeada da ShelterEntity encontrada. Se nenhuma entidade for encontrada com o id fornecido, o método retornará null.
      +
      Throws:
      +
      ShelterEntityFailuresException - se ocorrer uma exceção ShelterCreationFailureException durante o mapeamento da entidade ShelterEntity para a instância de ShelterContract.
      +
      +
      +
    • +
    • +
      +

      retrieveAll

      +
      default List<ShelterContract> retrieveAll()
      +
      Recupera todos os abrigos do banco de dados. +

      + Esse método recupera todas as entidades de ShelterEntity presentes no banco de dados, usando o método findAll da interface CrudRepository. + Em seguida, realiza o mapeamento dessas entidades para o contrato de abrigo ShelterContract, usando a função mapEntityList. + Portanto, este método é responsável por converter as entidades de abrigo representadas no banco de dados em contratos de abrigo que podem ser usados na lógica de negócios da aplicação. +

      +
      +
      Specified by:
      +
      retrieveAll in interface RepositoryContract<ShelterContract>
      +
      Returns:
      +
      Uma lista de contratos de abrigo ShelterContract. Se não houver entidades de abrigo no banco de dados, retorna uma lista vazia.
      +
      +
      +
    • +
    • +
      +

      persist

      +
      default ShelterContract persist(ShelterContract entity)
      +
      Persiste uma instância de ShelterContract na representação do banco de dados. +

      + Primeiro, o método mapeia a instância de ShelterContract fornecida para seu equivalente ShelterEntity. + A conversão é feita usando uma instância de ShelterEntityMapper. +

      + O ShelterEntity resultante é então passado para o método save da interface CrudRepository. + Este método salva a entidade no banco de dados e retorna a entidade persistida. +

      + Finalmente, a ShelterEntity persistida é mapeada de volta para um ShelterContract usando uma instância de ShelterMapper. + Este ShelterContract mapeado é então retornado. +

      + Este método é uma implementação direta da operação padrão de persistência fornecida pela interface CrudRepository.

      +
      +
      Specified by:
      +
      persist in interface RepositoryContract<ShelterContract>
      +
      Parameters:
      +
      entity - A instância de ShelterContract que será persistida. Deve ser um valor não nulo.
      +
      Returns:
      +
      uma instância de ShelterContract que representa a entidade persistida.
      +
      Throws:
      +
      ShelterEntityFailuresException - se a entidade fornecida for nula.
      +
      See Also:
      +
      +
        +
      • CrudRepository
      • +
      +
      +
      +
      +
    • +
    • +
      +

      deleteEntityById

      +
      default void deleteEntityById(String id)
      +
      Este método é usado para excluir uma entidade ShelterEntity pelo ID. +

      + Primeiramente, o método tenta recuperar a entidade ShelterEntity correspondente ao ID fornecido por meio + do método getShelterEntityById(String id). Se o método não conseguir encontrar qualquer entidade ShelterEntity + correspondente ao ID fornecido, o método termina e não realiza nenhuma ação. +

      + Se o método getShelterEntityById(String id) retornar uma entidade válida, essa entidade é passada para o método + delete(ShelterEntity targetEntity), que se encarrega de excluir a entidade do banco de dados. +

      + Este método é uma extensão direta do método delete(ID id) da interface CrudRepository.

      +
      +
      Specified by:
      +
      deleteEntityById in interface RepositoryContract<ShelterContract>
      +
      Parameters:
      +
      id - A String que representa o ID único da entidade ShelterEntity a ser excluída. + Deve ser um valor não nulo e não vazio.
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepository.html new file mode 100644 index 0000000..3b97b20 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepository.html @@ -0,0 +1,294 @@ + + + + +UserRepository + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
All Superinterfaces:
+
org.springframework.data.repository.CrudRepository<UserEntity,String>, org.springframework.data.repository.Repository<UserEntity,String>, RepositoryContract<UserContract>, UserContractRepository
+
+
+
@Repository +public interface UserRepository +extends UserContractRepository, org.springframework.data.repository.CrudRepository<UserEntity,String>
+
A interface do repositório de usuário, UserRepository, estende as interfaces UserContractRepository e CrudRepository. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      findByEmail

      +
      Optional<UserEntity> findByEmail(String email)
      +
      Este método busca um usuário pelo email fornecido e retorna um Optional de UserEntity. + Se nenhum usuário for encontrado com o email fornecido, + este método retornará um Optional vazio.
      +
      +
      Parameters:
      +
      email - O email do usuário a ser buscado.
      +
      Returns:
      +
      um Optional de UserEntity.
      +
      +
      +
    • +
    • +
      +

      findEntityById

      +
      default UserContract findEntityById(String id)
      +
      Description copied from interface: RepositoryContract
      +
      Encontra uma entidade pelo seu identificador.
      +
      +
      Specified by:
      +
      findEntityById in interface RepositoryContract<UserContract>
      +
      Parameters:
      +
      id - o identificador único da entidade que deve ser procurada.
      +
      Returns:
      +
      a entidade encontrada ou null se nenhuma entidade com o identificador especificado pôde ser encontrada.
      +
      +
      +
    • +
    • +
      +

      retrieveAll

      +
      default List<UserContract> retrieveAll()
      +
      Description copied from interface: RepositoryContract
      +
      Encontra todas as entidades de um determinado tipo.
      +
      +
      Specified by:
      +
      retrieveAll in interface RepositoryContract<UserContract>
      +
      Returns:
      +
      uma lista contendo todas as entidades ou uma lista vazia se não houver entidades.
      +
      +
      +
    • +
    • +
      +

      persist

      +
      default UserContract persist(UserContract entity)
      +
      Description copied from interface: RepositoryContract
      +
      Salva uma entidade.
      +
      +
      Specified by:
      +
      persist in interface RepositoryContract<UserContract>
      +
      Parameters:
      +
      entity - a entidade que deve ser salva.
      +
      Returns:
      +
      a entidade salva.
      +
      +
      +
    • +
    • +
      +

      deleteEntityById

      +
      default void deleteEntityById(String id)
      +
      Description copied from interface: RepositoryContract
      +
      Deleta uma entidade pelo seu identificador.
      +
      +
      Specified by:
      +
      deleteEntityById in interface RepositoryContract<UserContract>
      +
      Parameters:
      +
      id - o identificador único da entidade que deve ser deletada.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/AddressRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/AddressRepository.html new file mode 100644 index 0000000..43b4526 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/AddressRepository.html @@ -0,0 +1,86 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.repository.AddressRepository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.repository.AddressRepository

+
+
Packages that use AddressRepository
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/DonationRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/DonationRepository.html new file mode 100644 index 0000000..e278071 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/DonationRepository.html @@ -0,0 +1,86 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.repository.DonationRepository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.repository.DonationRepository

+
+
Packages that use DonationRepository
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/ShelterRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/ShelterRepository.html new file mode 100644 index 0000000..4bbc2be --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/ShelterRepository.html @@ -0,0 +1,86 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository

+
+
Packages that use ShelterRepository
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/UserRepository.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/UserRepository.html new file mode 100644 index 0000000..f3627b6 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/class-use/UserRepository.html @@ -0,0 +1,83 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository

+
+
Packages that use UserRepository
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-summary.html new file mode 100644 index 0000000..d0be3b2 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-summary.html @@ -0,0 +1,108 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.repository

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.repository
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-tree.html new file mode 100644 index 0000000..6d2120f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-tree.html @@ -0,0 +1,93 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.repository Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.repository

+Package Hierarchies: + +
+
+

Interface Hierarchy

+
    +
  • org.springframework.data.repository.Repository<T,ID> +
      +
    • org.springframework.data.repository.CrudRepository<T,ID> + +
    • +
    +
  • +
  • diegosneves.github.conectardoacoes.core.repository.RepositoryContract<T> +
      +
    • diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository +
        +
      • diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository (also extends org.springframework.data.repository.CrudRepository<T,ID>)
      • +
      +
    • +
    • diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository +
        +
      • diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository (also extends org.springframework.data.repository.CrudRepository<T,ID>)
      • +
      +
    • +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-use.html new file mode 100644 index 0000000..4d6e182 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/repository/package-use.html @@ -0,0 +1,94 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.repository

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/request/ShelterCreationRequest.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/ShelterCreationRequest.html new file mode 100644 index 0000000..7e30cb2 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/ShelterCreationRequest.html @@ -0,0 +1,154 @@ + + + + +ShelterCreationRequest + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterCreationRequest

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest
+
+
+
+
public class ShelterCreationRequest +extends Object
+
Classe modelo para o Pedido de Criação do Abrigo ShelterCreationRequest. Esta classe é usada para a criação de um novo abrigo. + Contém informações essenciais para a criação de um abrigo, incluindo o nome do abrigo, + um AddressDTO representando o endereço do abrigo, e o e-mail do usuário responsável pelo abrigo. + +

Exemplo de uso: +

+     
+     ShelterCreatedRequest shelterRequest = ShelterCreatedRequest.builder()
+     .shelterName("Little Paws")
+     .addressDTO(address)
+     .responsibleUserEmail("admin@littlepaws.com")
+     .build();
+     
+ 
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ShelterCreationRequest

      +
      public ShelterCreationRequest()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/request/UserEntityCreationRequest.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/UserEntityCreationRequest.html new file mode 100644 index 0000000..cf8e926 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/UserEntityCreationRequest.html @@ -0,0 +1,154 @@ + + + + +UserEntityCreationRequest + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserEntityCreationRequest

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest
+
+
+
+
public class UserEntityCreationRequest +extends Object
+
Esta classe representa um objeto de solicitação para a criação de uma nova entidade de usuário. + Ela é usada principalmente para coletar detalhes sobre o novo usuário para criar um registro correspondente no banco de dados. +

+ Os detalhes a serem coletados incluem: +

    +
  • userName: o nome de usuário escolhido pelo novo usuário.
  • +
  • email: o endereço de e-mail do novo usuário.
  • +
  • userProfile: o tipo de perfil do usuário que classifica o novo usuário em uma de várias categorias possíveis (por exemplo, administrador, usuário regular, etc.).
  • +
  • userPassword: a senha escolhida pelo novo usuário.
  • +
+

+ Os atributos da classe estão sujeitos a alterações conforme o processamento prossegue. +

+ Atenção: Esta classe faz uso das anotações Lombok para reduzir a verbosidade do código Java.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserEntityCreationRequest

      +
      public UserEntityCreationRequest()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/request/class-use/ShelterCreationRequest.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/class-use/ShelterCreationRequest.html new file mode 100644 index 0000000..e28bc24 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/class-use/ShelterCreationRequest.html @@ -0,0 +1,137 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest

+
+
Packages that use ShelterCreationRequest
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/request/class-use/UserEntityCreationRequest.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/class-use/UserEntityCreationRequest.html new file mode 100644 index 0000000..4fa024e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/class-use/UserEntityCreationRequest.html @@ -0,0 +1,135 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest

+
+
Packages that use UserEntityCreationRequest
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-summary.html new file mode 100644 index 0000000..add85ba --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-summary.html @@ -0,0 +1,100 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.request + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.request

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.request
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-tree.html new file mode 100644 index 0000000..4f1d35c --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-tree.html @@ -0,0 +1,73 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.request Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.request

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-use.html new file mode 100644 index 0000000..211b851 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/request/package-use.html @@ -0,0 +1,143 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.request + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.request

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/response/ShelterCreatedResponse.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/ShelterCreatedResponse.html new file mode 100644 index 0000000..082e2eb --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/ShelterCreatedResponse.html @@ -0,0 +1,146 @@ + + + + +ShelterCreatedResponse + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterCreatedResponse

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse
+
+
+
+
public class ShelterCreatedResponse +extends Object
+
Classe modelo DTO para a resposta de criação de um abrigo. +

+ Esta classe contém informações sobre a resposta da criação de um abrigo, incluindo o id do novo abrigo, + o nome do abrigo, o endereço do abrigo, e o usuário responsável pela criação do abrigo. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ShelterCreatedResponse

      +
      public ShelterCreatedResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/response/UserEntityCreatedResponse.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/UserEntityCreatedResponse.html new file mode 100644 index 0000000..aedfa1d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/UserEntityCreatedResponse.html @@ -0,0 +1,153 @@ + + + + +UserEntityCreatedResponse + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserEntityCreatedResponse

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse
+
+
+
+
public class UserEntityCreatedResponse +extends Object
+
Esta classe representa a resposta após a criação de uma entidade de usuário no sistema. + Ela contém informações relevantes sobre o usuário que foi criado, servindo como um objeto de transferência de dados (DTO). +

+ Atributos: +

    +
  • id: Um identificador único para o usuário criado
  • +
  • userName: O nome de usuário escolhido pelo usuário
  • +
  • email: O endereço de e-mail fornecido pelo usuário
  • +
  • userProfile: O tipo de perfil associado a este usuário (por exemplo, administrador, usuário, etc.)
  • +
+

+ Essa classe é construída usando o padrão de design Builder para facilitar a criação de instâncias e é adotada + a biblioteca Lombok para evitar a verbosidade no código.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserEntityCreatedResponse

      +
      public UserEntityCreatedResponse()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/response/class-use/ShelterCreatedResponse.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/class-use/ShelterCreatedResponse.html new file mode 100644 index 0000000..0878c02 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/class-use/ShelterCreatedResponse.html @@ -0,0 +1,137 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse

+
+
Packages that use ShelterCreatedResponse
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/response/class-use/UserEntityCreatedResponse.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/class-use/UserEntityCreatedResponse.html new file mode 100644 index 0000000..cff0cc0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/class-use/UserEntityCreatedResponse.html @@ -0,0 +1,135 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse

+
+
Packages that use UserEntityCreatedResponse
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-summary.html new file mode 100644 index 0000000..02ded42 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-summary.html @@ -0,0 +1,100 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.response + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.response

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.response
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-tree.html new file mode 100644 index 0000000..5988048 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-tree.html @@ -0,0 +1,73 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.response Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.response

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-use.html new file mode 100644 index 0000000..da08f8e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/response/package-use.html @@ -0,0 +1,143 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.response + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.response

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/ShelterEntityService.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/ShelterEntityService.html new file mode 100644 index 0000000..40a9829 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/ShelterEntityService.html @@ -0,0 +1,154 @@ + + + + +ShelterEntityService + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface ShelterEntityService

+
+
+
+
All Known Implementing Classes:
+
ShelterEntityServiceImpl
+
+
+
public interface ShelterEntityService
+
Interface para a criação de um novo abrigo no sistema. +

+ Esta interface fornece um contrato para a implementação de um serviço responsável por + criar abrigos no sistema.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createShelter

      + +
      Este método é responsável por criar um novo abrigo no sistema. + Ele recebe um objeto ShelterCreationRequest, que contém as informações necessárias para criar o abrigo, + como o nome do abrigo, o endereço e o e-mail do usuário responsável por criar o abrigo.
      +
      +
      Parameters:
      +
      request - um objeto ShelterCreationRequest contendo as informações necessárias para criar um novo abrigo.
      +
      Returns:
      +
      um objeto ShelterCreatedResponse contendo as informações do abrigo criado.
      +
      Throws:
      +
      ShelterEntityFailuresException - se ocorrer algum erro durante a criação do abrigo. Isso pode acontecer + se o usuário responsável não for encontrado, se houver um erro na criação do endereço ou + se houver um erro na criação do abrigo em si.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/UserEntityService.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/UserEntityService.html new file mode 100644 index 0000000..b68c919 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/UserEntityService.html @@ -0,0 +1,187 @@ + + + + +UserEntityService + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface UserEntityService

+
+
+
+
All Known Implementing Classes:
+
UserEntityServiceImpl
+
+
+
public interface UserEntityService
+
Definição da interface para o serviço que lida com operações relacionadas à entidade do usuário.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      searchUserByEmail

      +
      UserContract searchUserByEmail(String email) + throws UserEntityFailuresException
      +
      Este método é usado para obter uma entidade de usuário pelo seu email. + Primeiramente, o método verifica se o valor do parâmetro de email não é nulo ou vazio. + Se o valor do email for nulo ou vazio, uma exceção UserEntityFailuresException é lançada ao usuário + com uma mensagem de erro relevante. +

      + Se o email for válido, o método tentará encontrar uma entidade de usuário que corresponda ao email + usando a interface UserRepository. + Se não for encontrada uma entidade de usuário para o email fornecido, + o método lançará uma exceção UserEntityFailuresException com uma mensagem de erro apropriada. +

      +
      +
      Parameters:
      +
      email - A string que representa o email do usuário que será procurado no repositório.
      +
      Returns:
      +
      A entidade do usuário correspondente ao email fornecido.
      +
      Throws:
      +
      UserEntityFailuresException - Se nenhuma entidade de usuário puder ser encontrada para o email fornecido + ou o valor do email for nulo ou vazio.
      +
      +
      +
    • +
    • +
      +

      createUserEntity

      + +
      Método para criar uma nova entidade do usuário. Primeiramente, verifica se a solicitação enviada está completa + e se os valores de seus atributos estão de acordo com a regra de negócio da aplicação. Caso contrário, + uma exceção UserEntityFailuresException é disparada com uma mensagem de erro detalhada. +

      + Se os dados fornecidos estiverem corretos, o método criará um novo registro de usuário no banco de dados + usando a interface UserRepository. Ao final, um objeto UserEntityCreatedResponse é retornado + contendo todos os dados do novo usuário criado. +

      +
      +
      Parameters:
      +
      request - O objeto UserEntityCreationRequest que contém os dados necessários para a criação do novo usuário.
      +
      Returns:
      +
      Um objeto UserEntityCreatedResponse contendo os dados do novo usuário criado.
      +
      Throws:
      +
      UserEntityFailuresException - Se os dados fornecidos na solicitação estão incompletos ou inconsistentes + ou se ocorrer algum problema durante a criação do novo usuário no banco de dados.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/class-use/ShelterEntityService.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/class-use/ShelterEntityService.html new file mode 100644 index 0000000..955547a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/class-use/ShelterEntityService.html @@ -0,0 +1,101 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService

+
+
Packages that use ShelterEntityService
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/class-use/UserEntityService.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/class-use/UserEntityService.html new file mode 100644 index 0000000..b8b6511 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/class-use/UserEntityService.html @@ -0,0 +1,114 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService

+
+
Packages that use UserEntityService
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImpl.html new file mode 100644 index 0000000..2058230 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImpl.html @@ -0,0 +1,299 @@ + + + + +ShelterEntityServiceImpl + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterEntityServiceImpl

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
+
+
+
All Implemented Interfaces:
+
ShelterEntityService
+
+
+
@Service +public class ShelterEntityServiceImpl +extends Object +implements ShelterEntityService
+
Esta classe é responsável pela implementação dos métodos necessários para gerenciar abrigos no sistema.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      SHELTER_CREATION_ERROR_MESSAGE

      +
      public static final String SHELTER_CREATION_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      ADDRESS_CREATION_ERROR

      +
      public static final String ADDRESS_CREATION_ERROR
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      ERROR_MAPPING_ADDRESS

      +
      public static final String ERROR_MAPPING_ADDRESS
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR

      +
      public static final String USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createShelter

      +
      public ShelterCreatedResponse createShelter(ShelterCreationRequest request)
      +
      Este método é responsável por criar um novo abrigo no sistema. + Ele recebe um objeto ShelterCreationRequest, que contém as informações necessárias para criar o abrigo, + como o nome do abrigo, o endereço e o e-mail do usuário responsável por criar o abrigo. +

      + Internamente, este método realiza as seguintes operações: +

        +
      1. Cria uma nova instância de ShelterContract através do método createAndReturnShelterInstance, + utilizando as informações do objeto ShelterCreationRequest fornecido.
      2. +
      3. Mapeia o objeto ShelterContract criado para um objeto ShelterEntity e o salva no repositório + do sistema utilizando o método mapShelterAndSaveToRepository.
      4. +
      5. Constrói uma resposta para a criação do abrigo utilizando o objeto ShelterEntity salvo e o retorna.
      6. +
      +
      +
      Specified by:
      +
      createShelter in interface ShelterEntityService
      +
      Parameters:
      +
      request - um objeto ShelterCreationRequest contendo as informações necessárias para criar um novo abrigo.
      +
      Returns:
      +
      um objeto ShelterCreatedResponse contendo as informações do abrigo criado.
      +
      Throws:
      +
      ShelterEntityFailuresException - se ocorrer algum erro durante a criação do abrigo. Isso pode acontecer + se o usuário responsável não for encontrado, se houver um erro na criação do endereço ou + se houver um erro na criação do abrigo em si.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImpl.html new file mode 100644 index 0000000..fc5e257 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImpl.html @@ -0,0 +1,366 @@ + + + + +UserEntityServiceImpl + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserEntityServiceImpl

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
+
+
+
All Implemented Interfaces:
+
UserEntityService
+
+
+
@Service +public class UserEntityServiceImpl +extends Object +implements UserEntityService
+
A classe UserEntityServiceImpl implementa a interface UserEntityService e + lida com a lógica de negócios das operações de usuário. + A classe é marcada como um componente do Spring com a anotação Service, + o que permite ao Spring detectar e gerenciar as instâncias dessa classe. +

+ Além disso, a classe lida com cenários de erros e exceções, lançando uma exceção personalizada + chamada UserEntityFailuresException quando um problema ocorre.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      INVALID_EMAIL_ERROR_MESSAGE

      +
      public static final String INVALID_EMAIL_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      EMAIL_NOT_FOUND_ERROR_MESSAGE

      +
      public static final String EMAIL_NOT_FOUND_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      EMAIL_ALREADY_IN_USE

      +
      public static final String EMAIL_ALREADY_IN_USE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      USER_CREATION_FAILURE_MESSAGE

      +
      public static final String USER_CREATION_FAILURE_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      USER_PROFILE_VALIDATION_FAILURE

      +
      public static final String USER_PROFILE_VALIDATION_FAILURE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE

      +
      public static final String MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserEntityServiceImpl

      +
      @Autowired +public UserEntityServiceImpl(UserRepository userRepository)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      searchUserByEmail

      +
      public UserContract searchUserByEmail(String email) + throws UserEntityFailuresException
      +
      Description copied from interface: UserEntityService
      +
      Este método é usado para obter uma entidade de usuário pelo seu email. + Primeiramente, o método verifica se o valor do parâmetro de email não é nulo ou vazio. + Se o valor do email for nulo ou vazio, uma exceção UserEntityFailuresException é lançada ao usuário + com uma mensagem de erro relevante. +

      + Se o email for válido, o método tentará encontrar uma entidade de usuário que corresponda ao email + usando a interface UserRepository. + Se não for encontrada uma entidade de usuário para o email fornecido, + o método lançará uma exceção UserEntityFailuresException com uma mensagem de erro apropriada. +

      +
      +
      Specified by:
      +
      searchUserByEmail in interface UserEntityService
      +
      Parameters:
      +
      email - A string que representa o email do usuário que será procurado no repositório.
      +
      Returns:
      +
      A entidade do usuário correspondente ao email fornecido.
      +
      Throws:
      +
      UserEntityFailuresException - Se nenhuma entidade de usuário puder ser encontrada para o email fornecido + ou o valor do email for nulo ou vazio.
      +
      +
      +
    • +
    • +
      +

      createUserEntity

      + +
      Description copied from interface: UserEntityService
      +
      Método para criar uma nova entidade do usuário. Primeiramente, verifica se a solicitação enviada está completa + e se os valores de seus atributos estão de acordo com a regra de negócio da aplicação. Caso contrário, + uma exceção UserEntityFailuresException é disparada com uma mensagem de erro detalhada. +

      + Se os dados fornecidos estiverem corretos, o método criará um novo registro de usuário no banco de dados + usando a interface UserRepository. Ao final, um objeto UserEntityCreatedResponse é retornado + contendo todos os dados do novo usuário criado. +

      +
      +
      Specified by:
      +
      createUserEntity in interface UserEntityService
      +
      Parameters:
      +
      request - O objeto UserEntityCreationRequest que contém os dados necessários para a criação do novo usuário.
      +
      Returns:
      +
      Um objeto UserEntityCreatedResponse contendo os dados do novo usuário criado.
      +
      Throws:
      +
      UserEntityFailuresException - Se os dados fornecidos na solicitação estão incompletos ou inconsistentes + ou se ocorrer algum problema durante a criação do novo usuário no banco de dados.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/class-use/ShelterEntityServiceImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/class-use/ShelterEntityServiceImpl.html new file mode 100644 index 0000000..b2d549b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/class-use/ShelterEntityServiceImpl.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/class-use/UserEntityServiceImpl.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/class-use/UserEntityServiceImpl.html new file mode 100644 index 0000000..771f49f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/class-use/UserEntityServiceImpl.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-summary.html new file mode 100644 index 0000000..9388b37 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-summary.html @@ -0,0 +1,101 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.service.impl + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.service.impl

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.service.impl
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-tree.html new file mode 100644 index 0000000..b531dfe --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-tree.html @@ -0,0 +1,73 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.service.impl Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.service.impl

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-use.html new file mode 100644 index 0000000..702e9a9 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/impl/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.service.impl + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.service.impl

+
+No usage of diegosneves.github.conectardoacoes.adapters.rest.service.impl
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-summary.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-summary.html new file mode 100644 index 0000000..7fcc83f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-summary.html @@ -0,0 +1,102 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.service + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.adapters.rest.service

+
+
+
package diegosneves.github.conectardoacoes.adapters.rest.service
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-tree.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-tree.html new file mode 100644 index 0000000..87eb25d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-tree.html @@ -0,0 +1,69 @@ + + + + +diegosneves.github.conectardoacoes.adapters.rest.service Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.adapters.rest.service

+Package Hierarchies: + +
+
+

Interface Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-use.html b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-use.html new file mode 100644 index 0000000..f5cf6fd --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/adapters/rest/service/package-use.html @@ -0,0 +1,105 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.adapters.rest.service + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.adapters.rest.service

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/Shelter.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/Shelter.html new file mode 100644 index 0000000..6b9158b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/Shelter.html @@ -0,0 +1,474 @@ + + + + +Shelter + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
+
+
+
All Implemented Interfaces:
+
ShelterContract
+
+
+
public class Shelter +extends Object +implements ShelterContract
+
Implementação da interface ShelterContract, que representa um abrigo na aplicação. + Uma instância desta classe representa um abrigo com uma identificação, um nome de referência, um endereço, um usuário responsável, e uma lista de doações.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      ID_VALIDATION_FAILURE

      +
      public static final String ID_VALIDATION_FAILURE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      ADDRESS_REQUIRED_ERROR

      +
      public static final String ADDRESS_REQUIRED_ERROR
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      DONATION_REQUIRED_ERROR

      +
      public static final String DONATION_REQUIRED_ERROR
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      RESPONSIBLE_REQUIRED_ERROR

      +
      public static final String RESPONSIBLE_REQUIRED_ERROR
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      SHELTER_NAME_REQUIRED_ERROR

      +
      public static final String SHELTER_NAME_REQUIRED_ERROR
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Shelter

      +
      public Shelter(String id, + String shelterName, + Address address, + UserContract responsibleUser)
      +
      Construtor da classe Shelter que inicializa a classe com valores fornecidos e valida o conjunto de dados presentes.
      +
      +
      Parameters:
      +
      id - A identificação do abrigo, que é obrigatório.
      +
      shelterName - O nome de referência do abrigo, que é obrigatório.
      +
      address - O endereço do abrigo, que é obrigatório.
      +
      responsibleUser - O usuário responsável pelo abrigo, que é obrigatório.
      +
      Throws:
      +
      ShelterCreationFailureException - se os dados fornecidos forem inválidos.
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getId

      +
      public String getId()
      +
      Description copied from interface: ShelterContract
      +
      Retorna a identificação do refúgio na forma de uma String.
      +
      +
      Specified by:
      +
      getId in interface ShelterContract
      +
      Returns:
      +
      uma String que representa a identificação única do refúgio
      +
      +
      +
    • +
    • +
      +

      getShelterName

      +
      public String getShelterName()
      +
      Description copied from interface: ShelterContract
      +
      Retorna o nome do refúgio na forma de uma String.
      +
      +
      Specified by:
      +
      getShelterName in interface ShelterContract
      +
      Returns:
      +
      uma String que representa o nome do refúgio.
      +
      +
      +
    • +
    • +
      +

      getAddress

      +
      public Address getAddress()
      +
      Description copied from interface: ShelterContract
      +
      Retorna o endereço do refúgio na forma de um objeto Address.
      +
      +
      Specified by:
      +
      getAddress in interface ShelterContract
      +
      Returns:
      +
      um objeto Address que representa o endereço do refúgio.
      +
      +
      +
    • +
    • +
      +

      getUser

      +
      public UserContract getUser()
      +
      Description copied from interface: ShelterContract
      +
      Retorna o usuário associado ao refúgio na forma de um objeto UserContract.
      +
      +
      Specified by:
      +
      getUser in interface ShelterContract
      +
      Returns:
      +
      um objeto UserContract que representa o usuário responsável pelo refúgio.
      +
      +
      +
    • +
    • +
      +

      getDonations

      +
      public List<Donation> getDonations()
      +
      Description copied from interface: ShelterContract
      +
      Retorna uma lista de todas as doações associadas ao Abrigo. +

      + Cada item na lista é um objeto Donation, que representa uma + doação feita ao Abrigo. A doação contém informações sobre a descrição + e a quantidade da doação. +

      + Este método não recebe nenhum parâmetro.

      +
      +
      Specified by:
      +
      getDonations in interface ShelterContract
      +
      Returns:
      +
      Uma lista de objetos Donation que representam as + doações feitas ao Abrigo. Se não houver doações, este método retornará + uma lista vazia.
      +
      +
      +
    • +
    • +
      +

      changeShelterName

      +
      public void changeShelterName(String shelterName) + throws ShelterCreationFailureException
      +
      Description copied from interface: ShelterContract
      +
      Altera o nome do abrigo. + Esse método recebe o novo nome do abrigo como parâmetro e substitui o nome atual + armazenado no objeto Shelter pelo novo nome fornecido (não vazio e não nulo). + Antes da atribuição, realiza uma verificação para certificar-se de que o novo + nome do abrigo não é nulo nem vazio. Se essa verificação falhar, + uma exceção ShelterCreationFailureException será lançada.
      +
      +
      Specified by:
      +
      changeShelterName in interface ShelterContract
      +
      Parameters:
      +
      shelterName - O novo nome do abrigo. Este nome deve ser um valor String não nulo e não vazio.
      +
      Throws:
      +
      ShelterCreationFailureException - Se o parâmetro shelterName for nulo ou vazio.
      +
      +
      +
    • +
    • +
      +

      changeAddress

      +
      public void changeAddress(Address address) + throws ShelterCreationFailureException
      +
      Description copied from interface: ShelterContract
      +
      Este método é usado para alterar o endereço do abrigo. +

      + Antes de alterar o endereço, este método verifica se o novo endereço fornecido não é nulo. Se o endereço for nulo, o método lançará uma ShelterCreationFailureException. Isto garante que o endereço do abrigo sempre seja válido. + Se o endereço passar por esta verificação, ele será atribuído como o novo endereço do abrigo, substituindo o endereço antigo.

      +
      +
      Specified by:
      +
      changeAddress in interface ShelterContract
      +
      Parameters:
      +
      address - O novo endereço que deve ser atribuído ao abrigo. + Deve ser uma instância da classe Address, que representa um endereço físico e não pode ser nulo.
      +
      Throws:
      +
      ShelterCreationFailureException - Se o endereço fornecido for nulo.
      +
      +
      +
    • +
    • +
      +

      addDonation

      +
      public void addDonation(Donation donation) + throws ShelterCreationFailureException
      +
      Description copied from interface: ShelterContract
      +
      Adiciona uma doação à lista de doações do abrigo. +

      + Este método primeiramente verifica se a doação não é nula, se for, uma ShelterCreationFailureException será lançada com uma mensagem de erro adequada. + Se a doação passar pela verificação, então ela é adicionada à lista interna de doações do abrigo.

      +
      +
      Specified by:
      +
      addDonation in interface ShelterContract
      +
      Parameters:
      +
      donation - Um objeto da classe Donation que representa a doação que será adicionada ao abrigo. + Se a doação for nula, o método irá lançar uma exceção.
      +
      Throws:
      +
      ShelterCreationFailureException - Se a doação for nula.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/ShelterContract.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/ShelterContract.html new file mode 100644 index 0000000..657994b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/ShelterContract.html @@ -0,0 +1,288 @@ + + + + +ShelterContract + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
All Known Implementing Classes:
+
Shelter
+
+
+
public interface ShelterContract
+
Interface ShelterContract define os métodos que representam os principais comportamentos e a divulgação de informações de uma entidade Shelter. +

+ Essa interface é fundamental para definir os contratos para identificação do Abrigo, gerenciamento e atualização de endereço e nome do abrigo, + além da adição de doações e recuperação de um usuário responsável pelo abrigo.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+
    + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    + +
    +
    Adiciona uma doação à lista de doações do abrigo.
    +
    +
    void
    + +
    +
    Este método é usado para alterar o endereço do abrigo.
    +
    +
    void
    + +
    +
    Altera o nome do abrigo.
    +
    + + +
    +
    Retorna o endereço do refúgio na forma de um objeto Address.
    +
    + + +
    +
    Retorna uma lista de todas as doações associadas ao Abrigo.
    +
    + + +
    +
    Retorna a identificação do refúgio na forma de uma String.
    +
    + + +
    +
    Retorna o nome do refúgio na forma de uma String.
    +
    + + +
    +
    Retorna o usuário associado ao refúgio na forma de um objeto UserContract.
    +
    +
    +
    +
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getId

      +
      String getId()
      +
      Retorna a identificação do refúgio na forma de uma String.
      +
      +
      Returns:
      +
      uma String que representa a identificação única do refúgio
      +
      +
      +
    • +
    • +
      +

      getShelterName

      +
      String getShelterName()
      +
      Retorna o nome do refúgio na forma de uma String.
      +
      +
      Returns:
      +
      uma String que representa o nome do refúgio.
      +
      +
      +
    • +
    • +
      +

      getAddress

      +
      Address getAddress()
      +
      Retorna o endereço do refúgio na forma de um objeto Address.
      +
      +
      Returns:
      +
      um objeto Address que representa o endereço do refúgio.
      +
      +
      +
    • +
    • +
      +

      getDonations

      +
      List<Donation> getDonations()
      +
      Retorna uma lista de todas as doações associadas ao Abrigo. +

      + Cada item na lista é um objeto Donation, que representa uma + doação feita ao Abrigo. A doação contém informações sobre a descrição + e a quantidade da doação. +

      + Este método não recebe nenhum parâmetro.

      +
      +
      Returns:
      +
      Uma lista de objetos Donation que representam as + doações feitas ao Abrigo. Se não houver doações, este método retornará + uma lista vazia.
      +
      +
      +
    • +
    • +
      +

      changeAddress

      +
      void changeAddress(Address address) + throws ShelterCreationFailureException
      +
      Este método é usado para alterar o endereço do abrigo. +

      + Antes de alterar o endereço, este método verifica se o novo endereço fornecido não é nulo. Se o endereço for nulo, o método lançará uma ShelterCreationFailureException. Isto garante que o endereço do abrigo sempre seja válido. + Se o endereço passar por esta verificação, ele será atribuído como o novo endereço do abrigo, substituindo o endereço antigo.

      +
      +
      Parameters:
      +
      address - O novo endereço que deve ser atribuído ao abrigo. + Deve ser uma instância da classe Address, que representa um endereço físico e não pode ser nulo.
      +
      Throws:
      +
      ShelterCreationFailureException - Se o endereço fornecido for nulo.
      +
      +
      +
    • +
    • +
      +

      changeShelterName

      +
      void changeShelterName(String shelterName) + throws ShelterCreationFailureException
      +
      Altera o nome do abrigo. + Esse método recebe o novo nome do abrigo como parâmetro e substitui o nome atual + armazenado no objeto Shelter pelo novo nome fornecido (não vazio e não nulo). + Antes da atribuição, realiza uma verificação para certificar-se de que o novo + nome do abrigo não é nulo nem vazio. Se essa verificação falhar, + uma exceção ShelterCreationFailureException será lançada.
      +
      +
      Parameters:
      +
      shelterName - O novo nome do abrigo. Este nome deve ser um valor String não nulo e não vazio.
      +
      Throws:
      +
      ShelterCreationFailureException - Se o parâmetro shelterName for nulo ou vazio.
      +
      +
      +
    • +
    • +
      +

      addDonation

      +
      void addDonation(Donation donation) + throws ShelterCreationFailureException
      +
      Adiciona uma doação à lista de doações do abrigo. +

      + Este método primeiramente verifica se a doação não é nula, se for, uma ShelterCreationFailureException será lançada com uma mensagem de erro adequada. + Se a doação passar pela verificação, então ela é adicionada à lista interna de doações do abrigo.

      +
      +
      Parameters:
      +
      donation - Um objeto da classe Donation que representa a doação que será adicionada ao abrigo. + Se a doação for nula, o método irá lançar uma exceção.
      +
      Throws:
      +
      ShelterCreationFailureException - Se a doação for nula.
      +
      +
      +
    • +
    • +
      +

      getUser

      +
      UserContract getUser()
      +
      Retorna o usuário associado ao refúgio na forma de um objeto UserContract.
      +
      +
      Returns:
      +
      um objeto UserContract que representa o usuário responsável pelo refúgio.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/class-use/Shelter.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/class-use/Shelter.html new file mode 100644 index 0000000..85eb9af --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/class-use/Shelter.html @@ -0,0 +1,87 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter

+
+
Packages that use Shelter
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/class-use/ShelterContract.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/class-use/ShelterContract.html new file mode 100644 index 0000000..76ef371 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/class-use/ShelterContract.html @@ -0,0 +1,205 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract

+
+
Packages that use ShelterContract
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-summary.html new file mode 100644 index 0000000..24ef6f1 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-summary.html @@ -0,0 +1,106 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.entity + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.shelter.entity

+
+
+
package diegosneves.github.conectardoacoes.core.domain.shelter.entity
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-tree.html new file mode 100644 index 0000000..f4d72ad --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-tree.html @@ -0,0 +1,78 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.entity Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.shelter.entity

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter (implements diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract)
    • +
    +
  • +
+
+
+

Interface Hierarchy

+
    +
  • diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-use.html new file mode 100644 index 0000000..0d9e388 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/package-use.html @@ -0,0 +1,142 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.shelter.entity + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.shelter.entity

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Address.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Address.html new file mode 100644 index 0000000..93f28d0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Address.html @@ -0,0 +1,311 @@ + + + + +Address + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
+
+
+
public class Address +extends Object
+
Classe Address representa um endereço físico. +

+ Um endereço é composto pelo id, rua, número, bairro, cidade, estado e CEP (código postal). + Cada um destes campos é uma string e é validado no momento da criação de um objeto Address. + Se um destes campos estiver faltando ou em branco, uma exceção AddressCreationFailureException será lançada. +

+ Este classe é utilizada na criação de entidades tais como Shelter, que precisam de uma representação de endereço.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      STREET_NAME_ERROR_MESSAGE

      +
      public static final String STREET_NAME_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      RESIDENCE_NUMBER_ERROR_MESSAGE

      +
      public static final String RESIDENCE_NUMBER_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      NEIGHBORHOOD_NAME_ERROR_MESSAGE

      +
      public static final String NEIGHBORHOOD_NAME_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      CITY_NAME_ERROR_MESSAGE

      +
      public static final String CITY_NAME_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      STATE_NAME_ERROR_MESSAGE

      +
      public static final String STATE_NAME_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      CEP_ERROR_MESSAGE

      +
      public static final String CEP_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      INVALID_ID_MESSAGE

      +
      public static final String INVALID_ID_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Address

      +
      public Address(String id, + String street, + String number, + String neighborhood, + String city, + String state, + String zip)
      +
      Construtor para a classe Address. Cada um dos parâmetros é usado para definir os detalhes de um endereço.
      +
      +
      Parameters:
      +
      id - A string que representa o UUID do endereço.
      +
      street - A string que representa a rua do endereço.
      +
      number - A string que representa o número da residência no endereço.
      +
      neighborhood - A string que representa o bairro do endereço.
      +
      city - A string que representa a cidade do endereço.
      +
      state - A string que representa o estado do endereço.
      +
      zip - A string que representa o código postal do endereço.
      +
      Throws:
      +
      AddressCreationFailureException - Se qualquer um dos parâmetros estiver nulo ou em branco. +

      + Utiliza o método validateData() para garantir que cada campo fornecido é válido. + Isso é feito através da verificação de que cada campo não seja nulo nem em branco. + Se algum campo for inválido, será lançada uma exceção AddressCreationFailureException específica para aquele campo.

      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Donation.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Donation.html new file mode 100644 index 0000000..d4dbd96 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Donation.html @@ -0,0 +1,245 @@ + + + + +Donation + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation
+
+
+
+
public class Donation +extends Object
+
Entidade que representa uma doação. + Uma doação é caracterizada pela sua descrição e quantidade.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      INVALID_DESCRIPTION_ERROR

      +
      public static final String INVALID_DESCRIPTION_ERROR
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      INVALID_QUANTITY

      +
      public static final String INVALID_QUANTITY
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      DEFAULT_DONATION_AMOUNT

      +
      public static final int DEFAULT_DONATION_AMOUNT
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      INVALID_ID_MESSAGE

      +
      public static final String INVALID_ID_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      Donation

      +
      public Donation(String id, + String description, + Integer amount)
      +
      Construtor para criar uma nova instância de doação. + +

      + Esse construtor aceita três argumentos que representam o id, a descrição e a quantidade da doação. + Ele valida os argumentos fornecidos e pode lançar uma DonationRegisterFailureException + se a descrição ou a quantidade fornecida forem inválidas. +

      +
      +
      Parameters:
      +
      id - O identificador único para a doação.
      +
      description - Descrição detalhada da doação.
      +
      amount - Quantidade de doação.
      +
      Throws:
      +
      DonationRegisterFailureException - Se a descrição é nula ou vazia, ou se a quantidade é nula.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/class-use/Address.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/class-use/Address.html new file mode 100644 index 0000000..623444a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/class-use/Address.html @@ -0,0 +1,231 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address

+
+
Packages that use Address
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/class-use/Donation.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/class-use/Donation.html new file mode 100644 index 0000000..5c2d437 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/class-use/Donation.html @@ -0,0 +1,200 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation

+
+
Packages that use Donation
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-summary.html new file mode 100644 index 0000000..ca11cb4 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-summary.html @@ -0,0 +1,100 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.entity.value + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.shelter.entity.value

+
+
+
package diegosneves.github.conectardoacoes.core.domain.shelter.entity.value
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-tree.html new file mode 100644 index 0000000..ce9aa56 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-tree.html @@ -0,0 +1,73 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.entity.value Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.shelter.entity.value

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
    • +
    • diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation
    • +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-use.html new file mode 100644 index 0000000..3857317 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/package-use.html @@ -0,0 +1,143 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.shelter.entity.value + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.shelter.entity.value

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/AddressFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/AddressFactory.html new file mode 100644 index 0000000..c43a3e9 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/AddressFactory.html @@ -0,0 +1,181 @@ + + + + +AddressFactory + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.shelter.factory.AddressFactory
+
+
+
+
public class AddressFactory +extends Object
+
Fábrica estática para a criação de instâncias da classe Address. +

+ Esta fábrica oculta a lógica de criação de um endereço, incluindo a geração de um UUID único para cada endereço criado. + Ao encapsular o processo de criação de endereços dentro desta fábrica, o código externo é simplificado e a responsabilidade do controle de versões é mantida dentro da classe AddressFactory em vez de ser espalhada por várias partes do programa. +

+ Nota: Esta classe foi projetada para ser usada apenas para a criação de endereços. Não deve ser sub-classificada ou usada como referência. Para criar um novo endereço, use o método create(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) desta classe.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      create

      +
      public static Address create(String street, + String number, + String neighborhood, + String city, + String state, + String zip) + throws AddressCreationFailureException
      +
      Método estático para criação de uma nova instância de Address. +

      + Este método é responsável por criar uma nova instância de Address, que representa um endereço físico, utilizando + os parâmetros fornecidos e gerando um UUID para o novo Endereço.

      +
      +
      Parameters:
      +
      street - A string que representa a rua do endereço.
      +
      number - A string que representa o número da residência no endereço.
      +
      neighborhood - A string que representa o bairro do endereço.
      +
      city - A string que representa a cidade do endereço.
      +
      state - A string que representa o estado do endereço.
      +
      zip - A string que representa o código postal do endereço.
      +
      Returns:
      +
      Uma nova instância da classe Address com os parâmetros fornecidos.
      +
      Throws:
      +
      AddressCreationFailureException - Se algum dos parâmetros fornecidos estiver nulo ou em branco, + conforme validado pela classe Address.
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/DonationFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/DonationFactory.html new file mode 100644 index 0000000..f6885c1 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/DonationFactory.html @@ -0,0 +1,163 @@ + + + + +DonationFactory + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.shelter.factory.DonationFactory
+
+
+
+
public class DonationFactory +extends Object
+
Classe utilitária para fornecer funções de fábrica para a criação de instâncias Donation. + +

+ Essa classe é usada para isolar a lógica de criação de uma instância de doação, garantindo que sempre seja adequada + para uso assim que for criada. +

+ +

+ Essa classe é uma classe de utilitário e não pode ser instanciada. Ela só fornece um método estático. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      created

      +
      public static Donation created(String description, + Integer amount)
      +
      Cria e retorna uma nova instância de doação.
      +
      +
      Parameters:
      +
      description - Descrição da doação a ser criada.
      +
      amount - A quantidade da doação a ser criada.
      +
      Returns:
      +
      Uma nova instância de doação.
      +
      Throws:
      +
      DonationRegisterFailureException - Se as regras de validação da doação falharem.
      +
      UuidUtilsException - Se a geração do UUID falhar.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/ShelterFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/ShelterFactory.html new file mode 100644 index 0000000..a636d52 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/ShelterFactory.html @@ -0,0 +1,171 @@ + + + + +ShelterFactory + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory
+
+
+
+
public class ShelterFactory +extends Object
+
Classe ShelterFactory responsável por fornecer métodos para criar instâncias da classe Shelter. +

+ Esta classe é um exemplo de aplicação do padrão de projeto Factory, que fornece um método estático para a criação de instâncias de Shelter. + Neste caso, a criação do objeto Shelter é abstraída para a esta classe. +

+ Esta classe destaca a declaração de um método público estático create, responsável pela criação de uma instance de Shelter.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      create

      +
      public static Shelter create(String shelterName, + Address address, + UserContract responsibleUser)
      +
      Construtor estático para a classe Shelter. +

      + Este método é responsável por criar uma nova instancia de Shelter com um UUID gerado dinamicamente, juntamente com os detalhes fornecidos. +

      + Este método utiliza o método UuidUtils.generateUuid() para gerar um UUID único para o novo objeto Shelter.

      +
      +
      Parameters:
      +
      shelterName - A string que representa o nome do abrigo.
      +
      address - A instância de Address que representa o endereço do abrigo.
      +
      responsibleUser - A instância de UserContract quem representa o usuário responsável pelo abrigo.
      +
      Returns:
      +
      Shelter A nova instância de Shelter com os detalhes fornecidos.
      +
      Throws:
      +
      ShelterCreationFailureException - se qualquer informação do Abrigo fornecida for inválida.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/AddressFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/AddressFactory.html new file mode 100644 index 0000000..c823f99 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/AddressFactory.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.shelter.factory.AddressFactory + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.shelter.factory.AddressFactory

+
+No usage of diegosneves.github.conectardoacoes.core.domain.shelter.factory.AddressFactory
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/DonationFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/DonationFactory.html new file mode 100644 index 0000000..4bcdf15 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/DonationFactory.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.shelter.factory.DonationFactory + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.shelter.factory.DonationFactory

+
+No usage of diegosneves.github.conectardoacoes.core.domain.shelter.factory.DonationFactory
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/ShelterFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/ShelterFactory.html new file mode 100644 index 0000000..4b86f7f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/class-use/ShelterFactory.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory

+
+No usage of diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-summary.html new file mode 100644 index 0000000..a90da66 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-summary.html @@ -0,0 +1,93 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.factory + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.shelter.factory

+
+
+
package diegosneves.github.conectardoacoes.core.domain.shelter.factory
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-tree.html new file mode 100644 index 0000000..f4a1471 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-tree.html @@ -0,0 +1,74 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.factory Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.shelter.factory

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.core.domain.shelter.factory.AddressFactory
    • +
    • diegosneves.github.conectardoacoes.core.domain.shelter.factory.DonationFactory
    • +
    • diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory
    • +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-use.html new file mode 100644 index 0000000..9d5ff99 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/factory/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.shelter.factory + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.shelter.factory

+
+No usage of diegosneves.github.conectardoacoes.core.domain.shelter.factory
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterContractRepository.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterContractRepository.html new file mode 100644 index 0000000..3b23a9f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterContractRepository.html @@ -0,0 +1,128 @@ + + + + +ShelterContractRepository + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface ShelterContractRepository

+
+
+
+
All Superinterfaces:
+
RepositoryContract<ShelterContract>
+
+
+
All Known Subinterfaces:
+
ShelterRepository
+
+
+
public interface ShelterContractRepository +extends RepositoryContract<ShelterContract>
+
A interface ShelterContractRepository herda da interface RepositoryContract. + Ela define o contrato para um repositório que persiste e recupera as entidades ShelterContract. +

+ Tem as seguintes operações básicas: + - Encontrar uma entidade Shelter pelo seu identificador único + - Encontrar todas as instâncias da entidade Shelter + - Salvar uma instância da entidade Shelter + - Deletar uma entidade Shelter através seu identificador único + +

+ O uso desta interface é específico para operações relacionados com objeto ShelterContract + e as suas implementações devem ser consideradas para trabalhar com dados da entidade Shelter. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/class-use/ShelterContractRepository.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/class-use/ShelterContractRepository.html new file mode 100644 index 0000000..7218b7d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/class-use/ShelterContractRepository.html @@ -0,0 +1,101 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository

+
+
Packages that use ShelterContractRepository
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-summary.html new file mode 100644 index 0000000..e97b869 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-summary.html @@ -0,0 +1,85 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository

+
+
+
package diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-tree.html new file mode 100644 index 0000000..5b922d7 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-tree.html @@ -0,0 +1,72 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository

+Package Hierarchies: + +
+
+

Interface Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-use.html new file mode 100644 index 0000000..d18e577 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/package-use.html @@ -0,0 +1,97 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/User.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/User.html new file mode 100644 index 0000000..c54183e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/User.html @@ -0,0 +1,443 @@ + + + + +User + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
+
+
+
All Implemented Interfaces:
+
UserContract
+
+
+
public class User +extends Object +implements UserContract
+
Representa um usuário dentro do sistema. +

+ Esta classe é responsável por manter as informações de um usuário e valida a criação dos mesmos. + As informações de um usuário incluem seu nome de usuário, perfil de usuário, e-mail e senha. Além disso, + cada usuário também possui um identificador único do tipo UUID. +

+

+ Cada usuário tem a capacidade de alterar a sua própria senha bem como o nome de usuário. +

+

Estrutura de erros

+

+ Caso os dados do usuário falhem na validação, essa classe está preparada para lidar com esses problemas + e gera uma UserCreationFailureException adequada. +

+

Nota sobre a implementação

+

+ Esta classe implementa a interface UserContract, que define o contrato para criação e manuseio dos usuários. + Além disso, faz uso efetivo da classe UserProfile para definir o perfil dos usuários. +

+

+ As mensagens de erro de validação estão definidas como constantes para manter a classe limpa e dry (Don't Repeat Yourself). +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getId

      +
      public String getId()
      +
      Description copied from interface: UserContract
      +
      Este método retorna o ID único do usuário.
      +
      +
      Specified by:
      +
      getId in interface UserContract
      +
      Returns:
      +
      ID do usuário como String.
      +
      +
      +
    • +
    • +
      +

      getUsername

      +
      public String getUsername()
      +
      Description copied from interface: UserContract
      +
      Obtém o nome de usuário do usuário.
      +
      +
      Specified by:
      +
      getUsername in interface UserContract
      +
      Returns:
      +
      nome de usuário como String.
      +
      +
      +
    • +
    • +
      +

      getUserPassword

      +
      public String getUserPassword()
      +
      Description copied from interface: UserContract
      +
      Recupera a senha do usuário. +

      Em uma implementação segura, esse método deve ser manuseado com cuidado para evitar a exposição de dados sensíveis.

      +
      +
      Specified by:
      +
      getUserPassword in interface UserContract
      +
      Returns:
      +
      Senha do usuário como String.
      +
      +
      +
    • +
    • +
      +

      getUserProfile

      +
      public UserProfile getUserProfile()
      +
      Description copied from interface: UserContract
      +
      Retorna o objeto UserProfile associado ao usuário.
      +
      +
      Specified by:
      +
      getUserProfile in interface UserContract
      +
      Returns:
      +
      A instância de UserProfile do usuário.
      +
      +
      +
    • +
    • +
      +

      getEmail

      +
      public String getEmail()
      +
      Description copied from interface: UserContract
      +
      Obtém o email do usuário.
      +
      +
      Specified by:
      +
      getEmail in interface UserContract
      +
      Returns:
      +
      Email do usuário como String.
      +
      +
      +
    • +
    • +
      +

      changeUserPassword

      +
      public void changeUserPassword(String password) + throws UserCreationFailureException
      +
      Description copied from interface: UserContract
      +
      Altera a senha do usuário atual. +

      + Este método é usado para alterar a senha do usuário. Ele verifica se a senha fornecida é nula ou em branco. + Se for esse o caso, ele lançará uma exceção UserCreationFailureException.

      +
      +
      Specified by:
      +
      changeUserPassword in interface UserContract
      +
      Parameters:
      +
      password - Nova senha do usuário como uma String. Ela não pode ser nula ou em branco.
      +
      Throws:
      +
      UserCreationFailureException - se a senha fornecida for nula ou em branco. + Isso indica que uma senha adequada não foi fornecida.
      +
      +
      +
    • +
    • +
      +

      changeUserName

      +
      public void changeUserName(String updatedUsername)
      +
      Description copied from interface: UserContract
      +
      Este método é responsável por alterar o nome de usuário. + +

      Cuidados são tomados para garantir que o nome de usuário não seja uma String vazia ou nula, + caso contrário, seria levantada uma exceção UserCreationFailureException indicando que o nome de usuário é obrigatório.

      + +

      Essa operação é realizada para o perfil de usuário atual associado a este objeto e o valor de 'this.userName' é alterado no final. + O nome de usuário atribuído aqui é usado posteriormente em outras operações relacionadas ao usuário.

      +
      +
      Specified by:
      +
      changeUserName in interface UserContract
      +
      Parameters:
      +
      updatedUsername - uma String que contém o novo nome de usuário.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/UserContract.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/UserContract.html new file mode 100644 index 0000000..b5f77df --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/UserContract.html @@ -0,0 +1,269 @@ + + + + +UserContract + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
All Known Implementing Classes:
+
User
+
+
+
public interface UserContract
+
A interface UserContract define o contrato para o gerenciamento de um usuário no sistema. + Ela especifica os métodos que devemos implementar para manipular os detalhes essenciais do usuário, + como ID, nome de usuário, email, senha e perfil. + +

A implementação desta interface deve garantir a validação adequada dos dados do usuário antes de + prosseguir com qualquer operação, como a mudança de senha ou nome de usuário. Se qualquer dado inválido for + fornecido, como uma senha ou username nulo ou em branco, deverá lançar a exceção + UserCreationFailureException.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getId

      +
      String getId()
      +
      Este método retorna o ID único do usuário.
      +
      +
      Returns:
      +
      ID do usuário como String.
      +
      +
      +
    • +
    • +
      +

      getUsername

      +
      String getUsername()
      +
      Obtém o nome de usuário do usuário.
      +
      +
      Returns:
      +
      nome de usuário como String.
      +
      +
      +
    • +
    • +
      +

      getEmail

      +
      String getEmail()
      +
      Obtém o email do usuário.
      +
      +
      Returns:
      +
      Email do usuário como String.
      +
      +
      +
    • +
    • +
      +

      getUserPassword

      +
      String getUserPassword()
      +
      Recupera a senha do usuário. +

      Em uma implementação segura, esse método deve ser manuseado com cuidado para evitar a exposição de dados sensíveis.

      +
      +
      Returns:
      +
      Senha do usuário como String.
      +
      +
      +
    • +
    • +
      +

      getUserProfile

      +
      UserProfile getUserProfile()
      +
      Retorna o objeto UserProfile associado ao usuário.
      +
      +
      Returns:
      +
      A instância de UserProfile do usuário.
      +
      +
      +
    • +
    • +
      +

      changeUserPassword

      +
      void changeUserPassword(String password) + throws UserCreationFailureException
      +
      Altera a senha do usuário atual. +

      + Este método é usado para alterar a senha do usuário. Ele verifica se a senha fornecida é nula ou em branco. + Se for esse o caso, ele lançará uma exceção UserCreationFailureException.

      +
      +
      Parameters:
      +
      password - Nova senha do usuário como uma String. Ela não pode ser nula ou em branco.
      +
      Throws:
      +
      UserCreationFailureException - se a senha fornecida for nula ou em branco. + Isso indica que uma senha adequada não foi fornecida.
      +
      +
      +
    • +
    • +
      +

      changeUserName

      +
      void changeUserName(String updatedUsername)
      +
      Este método é responsável por alterar o nome de usuário. + +

      Cuidados são tomados para garantir que o nome de usuário não seja uma String vazia ou nula, + caso contrário, seria levantada uma exceção UserCreationFailureException indicando que o nome de usuário é obrigatório.

      + +

      Essa operação é realizada para o perfil de usuário atual associado a este objeto e o valor de 'this.userName' é alterado no final. + O nome de usuário atribuído aqui é usado posteriormente em outras operações relacionadas ao usuário.

      +
      +
      Parameters:
      +
      updatedUsername - uma String que contém o novo nome de usuário.
      +
      Throws:
      +
      UserCreationFailureException - se o parâmetro updatedUsername é nulo ou uma String vazia.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/class-use/User.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/class-use/User.html new file mode 100644 index 0000000..13beb74 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/class-use/User.html @@ -0,0 +1,88 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.user.entity.User + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.user.entity.User

+
+
Packages that use User
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/class-use/UserContract.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/class-use/UserContract.html new file mode 100644 index 0000000..de2fb4b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/class-use/UserContract.html @@ -0,0 +1,308 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract

+
+
Packages that use UserContract
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-summary.html new file mode 100644 index 0000000..a5b8d35 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-summary.html @@ -0,0 +1,106 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.entity + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.user.entity

+
+
+
package diegosneves.github.conectardoacoes.core.domain.user.entity
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-tree.html new file mode 100644 index 0000000..e1c32e6 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-tree.html @@ -0,0 +1,78 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.entity Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.user.entity

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.core.domain.user.entity.User (implements diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract)
    • +
    +
  • +
+
+
+

Interface Hierarchy

+
    +
  • diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-use.html new file mode 100644 index 0000000..1678a9a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/package-use.html @@ -0,0 +1,202 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.user.entity + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.user.entity

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/UserProfile.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/UserProfile.html new file mode 100644 index 0000000..0e5483b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/UserProfile.html @@ -0,0 +1,239 @@ + + + + +UserProfile + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
java.lang.Enum<UserProfile> +
diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile
+
+
+
+
+
All Implemented Interfaces:
+
Serializable, Comparable<UserProfile>, Constable
+
+
+
public enum UserProfile +extends Enum<UserProfile>
+
A enumeração UserProfile fornece os tipos de perfis disponíveis para um usuário. + Os perfis disponíveis são 'Doador' e 'Beneficiário'.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Enum Constant Details

    +
      +
    • +
      +

      DONOR

      +
      public static final UserProfile DONOR
      +
      +
    • +
    • +
      +

      BENEFICIARY

      +
      public static final UserProfile BENEFICIARY
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      values

      +
      public static UserProfile[] values()
      +
      Returns an array containing the constants of this enum class, in +the order they are declared.
      +
      +
      Returns:
      +
      an array containing the constants of this enum class, in the order they are declared
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static UserProfile valueOf(String name)
      +
      Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
      +
      +
      Parameters:
      +
      name - the name of the enum constant to be returned.
      +
      Returns:
      +
      the enum constant with the specified name
      +
      Throws:
      +
      IllegalArgumentException - if this enum class has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
      +
      +
    • +
    • +
      +

      toString

      +
      public String toString()
      +
      +
      Overrides:
      +
      toString in class Enum<UserProfile>
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/class-use/UserProfile.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/class-use/UserProfile.html new file mode 100644 index 0000000..d6bf74c --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/class-use/UserProfile.html @@ -0,0 +1,175 @@ + + + + +Uses of Enum Class diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Enum Class
diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile

+
+
Packages that use UserProfile
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-summary.html new file mode 100644 index 0000000..d6e872e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-summary.html @@ -0,0 +1,96 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.entity.value + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.user.entity.value

+
+
+
package diegosneves.github.conectardoacoes.core.domain.user.entity.value
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-tree.html new file mode 100644 index 0000000..636ad9e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-tree.html @@ -0,0 +1,76 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.entity.value Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.user.entity.value

+Package Hierarchies: + +
+
+

Enum Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-use.html new file mode 100644 index 0000000..d3cc3bb --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/entity/value/package-use.html @@ -0,0 +1,127 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.user.entity.value + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.user.entity.value

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/UserFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/UserFactory.html new file mode 100644 index 0000000..652120e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/UserFactory.html @@ -0,0 +1,179 @@ + + + + +UserFactory + + + + + + + + + + + + + + + +
+ +
+
+ + +
java.lang.Object +
diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory
+
+
+
+
public class UserFactory +extends Object
+
Classe de utilidade para a criação de usuário. +

+ Oferece um método estático para criar um usuário com todas as informações necessárias + como nome de usuário, e-mail, perfil de usuário e senha. + Além disso, gera um identificador UUID para o novo usuário. +

+

+ Esta classe foi projetada para ser usada em todo o código que precisa criar um novo usuário, + permitindo uma abordagem consistente para a criação de usuário. +

+

+ Esta classe não pode ser instanciada. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      create

      +
      public static User create(String username, + String email, + UserProfile userProfile, + String password)
      +
      Cria um novo usuário com todas as informações necessárias e um identificador UUID gerado. +

      + Este método utiliza o método UuidUtils.generateUuid() para gerar um UUID único para o novo objeto User.

      +
      +
      Parameters:
      +
      username - O nome de usuário desejado para o novo usuário. Não deve ser nulo ou vazio.
      +
      email - O e-mail do novo usuário. Não deve ser nulo ou vazio.
      +
      userProfile - O perfil do usuário UserProfile para o novo usuário. Não deve ser nulo.
      +
      password - A senha para o novo usuário. Não deve ser nula ou vazia.
      +
      Returns:
      +
      O usuário criado com todas as informações fornecidas e um identificador UUID.
      +
      Throws:
      +
      UserCreationFailureException - se qualquer informação de usuário fornecida for inválida.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/class-use/UserFactory.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/class-use/UserFactory.html new file mode 100644 index 0000000..7790677 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/class-use/UserFactory.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory

+
+No usage of diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-summary.html new file mode 100644 index 0000000..55e2f18 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-summary.html @@ -0,0 +1,85 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.factory + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.user.factory

+
+
+
package diegosneves.github.conectardoacoes.core.domain.user.factory
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    Classe de utilidade para a criação de usuário.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-tree.html new file mode 100644 index 0000000..8c93b23 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-tree.html @@ -0,0 +1,72 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.factory Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.user.factory

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory
    • +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-use.html new file mode 100644 index 0000000..fc3d543 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/factory/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.user.factory + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.user.factory

+
+No usage of diegosneves.github.conectardoacoes.core.domain.user.factory
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserContractRepository.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserContractRepository.html new file mode 100644 index 0000000..5098531 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserContractRepository.html @@ -0,0 +1,131 @@ + + + + +UserContractRepository + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface UserContractRepository

+
+
+
+
All Superinterfaces:
+
RepositoryContract<UserContract>
+
+
+
All Known Subinterfaces:
+
UserRepository
+
+
+
public interface UserContractRepository +extends RepositoryContract<UserContract>
+
A interface UserContractRepository herda de RepositoryContract que é parametrizada com UserContract. + Ela fornece funcionalidades específicas ao usuário como adicionar, atualizar, deletar e procurar informações de usuários no banco de dados. + +

Os métodos herdados de RepositoryContract devem ser implementados em uma classe de repositório de usuário para fornecer o impacto + adequado para cada ação correspondente no banco de dados. +

Isso inclui encontrar usuário(s) por id, salvar usuário, deletar usuário pelo id e buscar todos os usuários. +

Os detalhes de cada operação são como segue: + +

+ +

Caso as operações de pesquisa não possam encontrar usuário(s) correspondente, eles retornarão um valor nulo ou uma lista vazia.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/class-use/UserContractRepository.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/class-use/UserContractRepository.html new file mode 100644 index 0000000..fff71f7 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/class-use/UserContractRepository.html @@ -0,0 +1,101 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository

+
+
Packages that use UserContractRepository
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-summary.html new file mode 100644 index 0000000..620d812 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-summary.html @@ -0,0 +1,85 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.shared.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.domain.user.shared.repository

+
+
+
package diegosneves.github.conectardoacoes.core.domain.user.shared.repository
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-tree.html new file mode 100644 index 0000000..d81ad45 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-tree.html @@ -0,0 +1,72 @@ + + + + +diegosneves.github.conectardoacoes.core.domain.user.shared.repository Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.domain.user.shared.repository

+Package Hierarchies: + +
+
+

Interface Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-use.html b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-use.html new file mode 100644 index 0000000..4adb02c --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/package-use.html @@ -0,0 +1,97 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.domain.user.shared.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.domain.user.shared.repository

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/enums/ExceptionDetails.html b/docs/diegosneves/github/conectardoacoes/core/enums/ExceptionDetails.html new file mode 100644 index 0000000..842875a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/enums/ExceptionDetails.html @@ -0,0 +1,306 @@ + + + + +ExceptionDetails + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Enum Class ExceptionDetails

+
+
java.lang.Object +
java.lang.Enum<ExceptionDetails> +
diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
+
+
+
+
All Implemented Interfaces:
+
Serializable, Comparable<ExceptionDetails>, Constable
+
+
+
public enum ExceptionDetails +extends Enum<ExceptionDetails>
+
Este é um Enum que contém detalhes de várias exceções relacionadas ao processo de criação de várias entidades, como Usuário, Donação, Abrigo e Endereço. + Cada constante neste Enum representa um cenário específico de erro e contém uma mensagem de erro associada. + Esta mensagem de erro pode ser formatada com um parâmetro adicional que pode ser fornecido durante a construção de uma mensagem de erro. + +

Exemplo de uso: + O código abaixo mostra como você usaria o ExceptionDetails para construir uma mensagem de erro para um erro na criação de um usuário: +

+     
+  public static final ExceptionDetails ERROR = ExceptionDetails.ADDRESS_CREATION_ERROR;
+
+  public AddressCreationFailureException(String message) {
+    super(ERROR.buildMessage(message));
+ }
+ 
+ 
+

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Enum Constant Details

    +
      +
    • +
      +

      USER_CREATION_ERROR

      +
      public static final ExceptionDetails USER_CREATION_ERROR
      +
      +
    • +
    • +
      +

      USER_MANIPULATION_ERROR

      +
      public static final ExceptionDetails USER_MANIPULATION_ERROR
      +
      +
    • +
    • +
      +

      SHELTER_MANIPULATION_ERROR

      +
      public static final ExceptionDetails SHELTER_MANIPULATION_ERROR
      +
      +
    • +
    • +
      +

      DONATION_CREATION_ERROR

      +
      public static final ExceptionDetails DONATION_CREATION_ERROR
      +
      +
    • +
    • +
      +

      SHELTER_CREATION_ERROR

      +
      public static final ExceptionDetails SHELTER_CREATION_ERROR
      +
      +
    • +
    • +
      +

      ADDRESS_CREATION_ERROR

      +
      public static final ExceptionDetails ADDRESS_CREATION_ERROR
      +
      +
    • +
    • +
      +

      INVALID_UUID_FORMAT_MESSAGE

      +
      public static final ExceptionDetails INVALID_UUID_FORMAT_MESSAGE
      +
      +
    • +
    • +
      +

      EXCEPTION_TYPE_NOT_THROWN

      +
      public static final ExceptionDetails EXCEPTION_TYPE_NOT_THROWN
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      values

      +
      public static ExceptionDetails[] values()
      +
      Returns an array containing the constants of this enum class, in +the order they are declared.
      +
      +
      Returns:
      +
      an array containing the constants of this enum class, in the order they are declared
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static ExceptionDetails valueOf(String name)
      +
      Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
      +
      +
      Parameters:
      +
      name - the name of the enum constant to be returned.
      +
      Returns:
      +
      the enum constant with the specified name
      +
      Throws:
      +
      IllegalArgumentException - if this enum class has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
      +
      +
    • +
    • +
      +

      buildMessage

      +
      public String buildMessage(String message)
      +
      Este método constrói e retorna uma mensagem de erro a partir da mensagem de erro associada à constante Enum e do parâmetro fornecido.
      +
      +
      Parameters:
      +
      message - um detalhe de erro específico
      +
      Returns:
      +
      uma mensagem de erro completa e formatada
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/enums/class-use/ExceptionDetails.html b/docs/diegosneves/github/conectardoacoes/core/enums/class-use/ExceptionDetails.html new file mode 100644 index 0000000..84bcc8b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/enums/class-use/ExceptionDetails.html @@ -0,0 +1,128 @@ + + + + +Uses of Enum Class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Enum Class
diegosneves.github.conectardoacoes.core.enums.ExceptionDetails

+
+
Packages that use ExceptionDetails
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/enums/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/enums/package-summary.html new file mode 100644 index 0000000..831cff5 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/enums/package-summary.html @@ -0,0 +1,85 @@ + + + + +diegosneves.github.conectardoacoes.core.enums + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.enums

+
+
+
package diegosneves.github.conectardoacoes.core.enums
+
+
    +
  • +
    +
    Enum Classes
    +
    +
    Class
    +
    Description
    + +
    +
    Este é um Enum que contém detalhes de várias exceções relacionadas ao processo de criação de várias entidades, como Usuário, Donação, Abrigo e Endereço.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/enums/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/enums/package-tree.html new file mode 100644 index 0000000..668077e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/enums/package-tree.html @@ -0,0 +1,76 @@ + + + + +diegosneves.github.conectardoacoes.core.enums Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.enums

+Package Hierarchies: + +
+
+

Enum Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/enums/package-use.html b/docs/diegosneves/github/conectardoacoes/core/enums/package-use.html new file mode 100644 index 0000000..936c926 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/enums/package-use.html @@ -0,0 +1,97 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.enums + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.enums

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/AddressCreationFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/AddressCreationFailureException.html new file mode 100644 index 0000000..3183264 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/AddressCreationFailureException.html @@ -0,0 +1,243 @@ + + + + +AddressCreationFailureException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class AddressCreationFailureException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class AddressCreationFailureException +extends RuntimeException
+
Esta é uma classe de exceção personalizada que estende a RuntimeException. + É usado especialmente para lidar com erros que ocorrem durante a criação de um Endereço. +

+ A classe contém uma constante de ERROR, que define o detalhe da exceção. Esta constante é do tipo ExceptionDetails e + é inicializada com o valor ExceptionDetails.ADDRESS_CREATION_ERROR. +

+ Exemplo de uso: +

+

+     
+ try {
+    // código de criação de um Endereço.
+ } catch (AlgumaExcecao e) {
+    throw new AdressCreationFailureException("Detalhe da falha");
+ }
+ 
+ 
+

+

+

+     
+ try {
+    // código de criação de um Endereço.
+ } catch (AlgumaExcecao e) {
+    throw new AdressCreationFailureException("Detalhe da falha", e);
+ }
+ 
+ 
+

+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      AddressCreationFailureException

      +
      public AddressCreationFailureException(String message)
      +
      Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      +
      +
    • +
    • +
      +

      AddressCreationFailureException

      +
      public AddressCreationFailureException(String message, + Throwable cause)
      +
      Construtor para AddressCreationFailureException. Este construtor aceita uma mensagem e uma causa Throwable. + Ele chama o construtor da superclasse (RuntimeException), passando uma mensagem de erro construída usando o objeto ERROR e a string de mensagem fornecida, + juntamente com a causa Throwable da exceção. + Este construtor é particularmente útil quando uma exceção é capturada no bloco try e precisa ser envolvida em uma AddressCreationFailureException. + A causa Throwable ajuda a manter a cadeia de exceções para uma melhor depuração.
      +
      +
      Parameters:
      +
      message - O detalhe específico desta instância de falha ao criar um Endereço.
      +
      cause - A exceção original que causou a falha.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/DonationRegisterFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/DonationRegisterFailureException.html new file mode 100644 index 0000000..500aa01 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/DonationRegisterFailureException.html @@ -0,0 +1,226 @@ + + + + +DonationRegisterFailureException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class DonationRegisterFailureException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class DonationRegisterFailureException +extends RuntimeException
+
Classe de exceção personalizada para falhas no registro de doações. + +

+ Esta é uma subclasse de RuntimeException, representando os + erros que podem ocorrer durante o processo de registro de uma nova + doação no sistema. Ela é associada a um conjunto predefinido de + detalhes de erros, especificamente: ExceptionDetails.DONATION_CREATION_ERROR. +

+ +

+ O erro específico que desencadeou essa exceção deve ser passado como uma + String para o construtor ao instanciar um novo objeto DonationRegisterFailureException. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      DonationRegisterFailureException

      +
      public DonationRegisterFailureException(String message)
      +
      Construtor que aceita uma mensagem de erro personalizada. + +

      + Cria uma nova instância de DonationRegisterFailureException + com a mensagem de erro fornecida. +

      +
      +
      Parameters:
      +
      message - A mensagem de erro detalhada específica para a exceção ocorrida.
      +
      +
      +
    • +
    • +
      +

      DonationRegisterFailureException

      +
      public DonationRegisterFailureException(String message, + Throwable cause)
      +
      Construtor da classe exceção que aceita uma mensagem de erro e um Throwable como causa da exceção.
      +
      +
      Parameters:
      +
      message - Mensagem de erro específica para a ocorrência da exceção.
      +
      cause - Causa-raíz da exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/ShelterCreationFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/ShelterCreationFailureException.html new file mode 100644 index 0000000..468749d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/ShelterCreationFailureException.html @@ -0,0 +1,245 @@ + + + + +ShelterCreationFailureException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterCreationFailureException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class ShelterCreationFailureException +extends RuntimeException
+
Esta é uma classe de exceção personalizada que estende a RuntimeException. + É usado especialmente para lidar com erros que ocorrem durante a criação de um abrigo. +

+ A classe contém uma constante de ERROR, que define o detalhe da exceção. Esta constante é do tipo ExceptionDetails e + é inicializada com o valor ExceptionDetails.SHELTER_CREATION_ERROR. +

+ Possui dois construtores: +

+ 1. Que aceita apenas uma String como argumento, que serve como mensagem para a exceção. +

+ 2. Que aceita uma String e um Throwable como argumentos. A String serve como mensagem para a exceção e o Throwable é a causa que levou à exceção. + +

+ Exemplo de uso: +

+

+     
+ if (AlgumaValidacaoFalhar) {
+    throw new ShelterCreationFailureException("Detalhe da falha");
+ }
+ // código de criação de um Abrigo
+ 
+ 
+
+     
+ try {
+    // código de criação de um Abrigo
+ } catch (AlgumaExcecao e) {
+    throw new ShelterCreationFailureException("Detalhe da falha", e);
+ }
+ 
+ 
+

+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ShelterCreationFailureException

      +
      public ShelterCreationFailureException(String message)
      +
      Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      +
      +
    • +
    • +
      +

      ShelterCreationFailureException

      +
      public ShelterCreationFailureException(String message, + Throwable cause)
      +
      Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      cause - A causa raiz que levou a esta exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/ShelterServiceFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/ShelterServiceFailureException.html new file mode 100644 index 0000000..c4679e5 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/ShelterServiceFailureException.html @@ -0,0 +1,245 @@ + + + + +ShelterServiceFailureException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterServiceFailureException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.ShelterServiceFailureException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class ShelterServiceFailureException +extends RuntimeException
+
Esta é uma classe de exceção personalizada que estende a RuntimeException. + É usado especialmente para lidar com erros que ocorrem durante a criação de um abrigo. +

+ A classe contém uma constante de ERROR, que define o detalhe da exceção. Esta constante é do tipo ExceptionDetails e + é inicializada com o valor ExceptionDetails.SHELTER_MANIPULATION_ERROR. +

+ Possui dois construtores: +

+ 1. Que aceita apenas uma String como argumento, que serve como mensagem para a exceção. +

+ 2. Que aceita uma String e um Throwable como argumentos. A String serve como mensagem para a exceção e o Throwable é a causa que levou à exceção. + +

+ Exemplo de uso: +

+

+     
+ if (AlgumaValidacaoFalhar) {
+    throw new ShelterServiceFailureException("Detalhe da falha");
+ }
+ // código de criação de um Abrigo
+ 
+ 
+
+     
+ try {
+    // código de criação de um Abrigo
+ } catch (AlgumaExcecao e) {
+    throw new ShelterServiceFailureException("Detalhe da falha", e);
+ }
+ 
+ 
+

+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ShelterServiceFailureException

      +
      public ShelterServiceFailureException(String message)
      +
      Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      +
      +
    • +
    • +
      +

      ShelterServiceFailureException

      +
      public ShelterServiceFailureException(String message, + Throwable cause)
      +
      Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      cause - A causa raiz que levou a esta exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/UserCreationFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/UserCreationFailureException.html new file mode 100644 index 0000000..243eec0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/UserCreationFailureException.html @@ -0,0 +1,236 @@ + + + + +UserCreationFailureException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserCreationFailureException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class UserCreationFailureException +extends RuntimeException
+
Esta é uma classe de exceção personalizada que estende a RuntimeException. + É usado especialmente para lidar com erros que ocorrem durante a criação de um usuário. +

+ A classe contém uma constante de ERROR, que define o detalhe da exceção. Esta constante é do tipo ExceptionDetails e + é inicializada com o valor USER_CREATION_ERROR. +

+ Possui dois construtores: +

+ 1. Que aceita apenas uma String como argumento, que serve como mensagem para a exceção. +

+ 2. Que aceita uma String e um Throwable como argumentos. A String serve como mensagem para a exceção e o Throwable é a causa que levou à exceção. + +

+ Exemplo de uso: +

+

+     
+ try {
+    // código de criação de usuário
+ } catch (AlgumaExcecao e) {
+    throw new UserCreationFailureException("Detalhe da falha", e);
+ }
+ 
+ 
+

+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserCreationFailureException

      +
      public UserCreationFailureException(String message)
      +
      Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      +
      +
    • +
    • +
      +

      UserCreationFailureException

      +
      public UserCreationFailureException(String message, + Throwable cause)
      +
      Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      cause - A causa raiz que levou a esta exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/UserServiceFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/UserServiceFailureException.html new file mode 100644 index 0000000..d16d393 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/UserServiceFailureException.html @@ -0,0 +1,237 @@ + + + + +UserServiceFailureException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserServiceFailureException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class UserServiceFailureException +extends RuntimeException
+
Esta é uma classe de exceção personalizada que estende a RuntimeException. + É usado especialmente para lidar com erros que ocorrem durante a criação de um usuário. +

+ A classe contém uma constante de ERROR, que define o detalhe da exceção. Esta constante é do tipo ExceptionDetails e + é inicializada com o valor USER_MANIPULATION_ERROR. +

+ Possui dois construtores: +

+ 1. Que aceita apenas uma String como argumento, que serve como mensagem para a exceção. +

+ 2. Que aceita uma String e um Throwable como argumentos. A String serve como mensagem para a exceção e o Throwable é a causa que levou à exceção. + +

+ Exemplo de uso: +

+

+     
+ try {
+    // código de criação de usuário
+ } catch (AlgumaExcecao e) {
+    throw new UserServiceFailureException("Detalhe da falha", e);
+ }
+ 
+ 
+

+
+
Since:
+
1.0.0
+
Author:
+
diegosneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UserServiceFailureException

      +
      public UserServiceFailureException(String message)
      +
      Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      +
      +
    • +
    • +
      +

      UserServiceFailureException

      +
      public UserServiceFailureException(String message, + Throwable cause)
      +
      Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
      +
      +
      Parameters:
      +
      message - Detalhe adicional específico desta instância de exceção.
      +
      cause - A causa raiz que levou a esta exceção.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/UuidUtilsException.html b/docs/diegosneves/github/conectardoacoes/core/exception/UuidUtilsException.html new file mode 100644 index 0000000..3b3902a --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/UuidUtilsException.html @@ -0,0 +1,199 @@ + + + + +UuidUtilsException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UuidUtilsException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.UuidUtilsException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class UuidUtilsException +extends RuntimeException
+
Esta é uma classe de exceção personalizada que estende a classe RuntimeException. + É lançado quando um erro relacionado a UUIDs inválidos ocorre na aplicação. +

+ A classe inclui um único campo estático, ERROR, que especifica o tipo de erro. + +

+ Note: O construtor desta classe constrói a mensagem de exceção através do método buildMessage + disponível no objeto ERROR de tipo ExceptionDetails. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      UuidUtilsException

      +
      public UuidUtilsException(String message)
      +
      Construtor da classe. Cria uma instância da exceção UuidUtilsException.
      +
      +
      Parameters:
      +
      message - A string que representa a mensagem detalhada da exceção. A mensagem é usada mais tarde para criar uma mensagem de erro mais detalhada por meio do método buildMessage do objeto ERROR.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/ValidationUtilsException.html b/docs/diegosneves/github/conectardoacoes/core/exception/ValidationUtilsException.html new file mode 100644 index 0000000..62f07ca --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/ValidationUtilsException.html @@ -0,0 +1,204 @@ + + + + +ValidationUtilsException + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ValidationUtilsException

+
+
java.lang.Object +
java.lang.Throwable +
java.lang.Exception +
java.lang.RuntimeException +
diegosneves.github.conectardoacoes.core.exception.ValidationUtilsException
+
+
+
+
+
+
+
All Implemented Interfaces:
+
Serializable
+
+
+
public class ValidationUtilsException +extends RuntimeException
+
Esta é uma classe de exceção personalizada que estende a classe RuntimeException. + É lançado quando um erro relacionado a uma exceção personalizada não pode ser lançada. +

+ A classe inclui um único campo estático, ERROR, que especifica o tipo de erro. + +

+ Note: O construtor desta classe constrói a mensagem de exceção através do método buildMessage + disponível no objeto ERROR de tipo ExceptionDetails. +

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Constructor Details

    +
      +
    • +
      +

      ValidationUtilsException

      +
      public ValidationUtilsException(String message, + Throwable cause)
      +
      Construtor que cria uma instância da exceção ValidationUtilsException com a mensagem e causa fornecidas. + A mensagem é usada para criar uma mensagem de erro mais detalhada, passada para a superclasse, RuntimeException.
      +
      +
      Parameters:
      +
      message - A string que representa a mensagem detalhada da exceção, usada para criar uma mensagem de erro mais detalhada.
      +
      cause - A causa raiz da exceção, tipicamente uma instância de Throwable que levou à ocorrência desta exceção. + Esta informação é usada para depuração e rastreamento do erro.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/AddressCreationFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/AddressCreationFailureException.html new file mode 100644 index 0000000..fae4b61 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/AddressCreationFailureException.html @@ -0,0 +1,90 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/DonationRegisterFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/DonationRegisterFailureException.html new file mode 100644 index 0000000..15dc29d --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/DonationRegisterFailureException.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException

+
+No usage of diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ShelterCreationFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ShelterCreationFailureException.html new file mode 100644 index 0000000..2ff878e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ShelterCreationFailureException.html @@ -0,0 +1,131 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ShelterServiceFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ShelterServiceFailureException.html new file mode 100644 index 0000000..3fe3322 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ShelterServiceFailureException.html @@ -0,0 +1,136 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.ShelterServiceFailureException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.ShelterServiceFailureException

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UserCreationFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UserCreationFailureException.html new file mode 100644 index 0000000..a1a6550 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UserCreationFailureException.html @@ -0,0 +1,117 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UserServiceFailureException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UserServiceFailureException.html new file mode 100644 index 0000000..80364c9 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UserServiceFailureException.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException

+
+No usage of diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UuidUtilsException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UuidUtilsException.html new file mode 100644 index 0000000..80d6131 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/UuidUtilsException.html @@ -0,0 +1,85 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.UuidUtilsException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.UuidUtilsException

+
+
Packages that use UuidUtilsException
+
+
Package
+
Description
+ +
 
+
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ValidationUtilsException.html b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ValidationUtilsException.html new file mode 100644 index 0000000..671f328 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/class-use/ValidationUtilsException.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.exception.ValidationUtilsException + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.exception.ValidationUtilsException

+
+No usage of diegosneves.github.conectardoacoes.core.exception.ValidationUtilsException
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/exception/package-summary.html new file mode 100644 index 0000000..663c74b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/package-summary.html @@ -0,0 +1,113 @@ + + + + +diegosneves.github.conectardoacoes.core.exception + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.exception

+
+
+
package diegosneves.github.conectardoacoes.core.exception
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/exception/package-tree.html new file mode 100644 index 0000000..df6884b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/package-tree.html @@ -0,0 +1,91 @@ + + + + +diegosneves.github.conectardoacoes.core.exception Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.exception

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/exception/package-use.html b/docs/diegosneves/github/conectardoacoes/core/exception/package-use.html new file mode 100644 index 0000000..8033b19 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/exception/package-use.html @@ -0,0 +1,150 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.exception + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.exception

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/repository/RepositoryContract.html b/docs/diegosneves/github/conectardoacoes/core/repository/RepositoryContract.html new file mode 100644 index 0000000..1f06ef9 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/repository/RepositoryContract.html @@ -0,0 +1,211 @@ + + + + +RepositoryContract + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface RepositoryContract<T>

+
+
+
+
Type Parameters:
+
T - o tipo de entidade com a qual essa interface de repositório trabalha.
+
+
+
All Known Subinterfaces:
+
ShelterContractRepository, ShelterRepository, UserContractRepository, UserRepository
+
+
+
public interface RepositoryContract<T>
+
Esta é uma interface de contrato de repositório genérica que define operações CRUD básicas. + A interface do repositório é genérica e pode ser usada com qualquer tipo de entidade. + +

+ Esta interface define as seguintes operações: + - Encontrar uma entidade pelo seu identificador único (String) + - Encontrar todas as instâncias de uma determinada entidade + - Salvar uma instância de uma entidade + - Deletar uma entidade pelo seu identificador único (String)

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+
    + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    + +
    +
    Deleta uma entidade pelo seu identificador.
    +
    + + +
    +
    Encontra uma entidade pelo seu identificador.
    +
    + +
    persist(T entity)
    +
    +
    Salva uma entidade.
    +
    + + +
    +
    Encontra todas as entidades de um determinado tipo.
    +
    +
    +
    +
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      findEntityById

      +
      T findEntityById(String id)
      +
      Encontra uma entidade pelo seu identificador.
      +
      +
      Parameters:
      +
      id - o identificador único da entidade que deve ser procurada.
      +
      Returns:
      +
      a entidade encontrada ou null se nenhuma entidade com o identificador especificado pôde ser encontrada.
      +
      +
      +
    • +
    • +
      +

      retrieveAll

      +
      List<T> retrieveAll()
      +
      Encontra todas as entidades de um determinado tipo.
      +
      +
      Returns:
      +
      uma lista contendo todas as entidades ou uma lista vazia se não houver entidades.
      +
      +
      +
    • +
    • +
      +

      persist

      +
      T persist(T entity)
      +
      Salva uma entidade.
      +
      +
      Parameters:
      +
      entity - a entidade que deve ser salva.
      +
      Returns:
      +
      a entidade salva.
      +
      Throws:
      +
      IllegalArgumentException - se a entidade passada como parâmetro for null.
      +
      +
      +
    • +
    • +
      +

      deleteEntityById

      +
      void deleteEntityById(String id)
      +
      Deleta uma entidade pelo seu identificador.
      +
      +
      Parameters:
      +
      id - o identificador único da entidade que deve ser deletada.
      +
      Throws:
      +
      NoSuchElementException - se nenhuma entidade com o identificador especificado pôde ser encontrada.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/repository/class-use/RepositoryContract.html b/docs/diegosneves/github/conectardoacoes/core/repository/class-use/RepositoryContract.html new file mode 100644 index 0000000..1ec275e --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/repository/class-use/RepositoryContract.html @@ -0,0 +1,126 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.core.repository.RepositoryContract + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.core.repository.RepositoryContract

+
+
Packages that use RepositoryContract
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/repository/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/repository/package-summary.html new file mode 100644 index 0000000..55ff019 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/repository/package-summary.html @@ -0,0 +1,85 @@ + + + + +diegosneves.github.conectardoacoes.core.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.repository

+
+
+
package diegosneves.github.conectardoacoes.core.repository
+
+
    +
  • +
    +
    Interfaces
    +
    +
    Class
    +
    Description
    + +
    +
    Esta é uma interface de contrato de repositório genérica que define operações CRUD básicas.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/repository/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/repository/package-tree.html new file mode 100644 index 0000000..30d7f13 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/repository/package-tree.html @@ -0,0 +1,68 @@ + + + + +diegosneves.github.conectardoacoes.core.repository Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.repository

+Package Hierarchies: + +
+
+

Interface Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/repository/package-use.html b/docs/diegosneves/github/conectardoacoes/core/repository/package-use.html new file mode 100644 index 0000000..155cb03 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/repository/package-use.html @@ -0,0 +1,112 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.repository + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.repository

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/ShelterService.html b/docs/diegosneves/github/conectardoacoes/core/service/ShelterService.html new file mode 100644 index 0000000..e98e1f0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/ShelterService.html @@ -0,0 +1,449 @@ + + + + +ShelterService + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ShelterService

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.core.service.ShelterService
+
+
+
+
All Implemented Interfaces:
+
ShelterServiceContract
+
+
+
public class ShelterService +extends Object +implements ShelterServiceContract
+
A classe de serviço ShelterService é responsável pelas operações de negócios relacionadas a abrigos. + Essas operações incluem criação de abrigos, busca por abrigos e alterações nos atributos dos abrigos. + Esta classe implementa a interface ShelterServiceContract.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/ShelterServiceContract.html b/docs/diegosneves/github/conectardoacoes/core/service/ShelterServiceContract.html new file mode 100644 index 0000000..26935dd --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/ShelterServiceContract.html @@ -0,0 +1,263 @@ + + + + +ShelterServiceContract + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface ShelterServiceContract

+
+
+
+
All Known Implementing Classes:
+
ShelterService
+
+
+
public interface ShelterServiceContract
+
Interface ShelterServiceContract define vários métodos que manipulam um objeto Shelter. + Isso inclui criar um abrigo, alterar o nome e o endereço de um abrigo, adicionar uma doação e obter detalhes de um abrigo.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/UserService.html b/docs/diegosneves/github/conectardoacoes/core/service/UserService.html new file mode 100644 index 0000000..0e83911 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/UserService.html @@ -0,0 +1,364 @@ + + + + +UserService + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UserService

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.core.service.UserService
+
+
+
+
All Implemented Interfaces:
+
UserServiceContract
+
+
+
public class UserService +extends Object +implements UserServiceContract
+
A classe UserService implementa um contratato do serviço do usuário UserServiceContract. + Ela fornece os métodos para gerenciar usuários, incluindo criação de um novo usuário, recuperação de um usuário pelo seu ID, + alteração da senha do usuário e alteração do nome de usuário. +

Isso é feito por meio da interação com o repositório de usuários UserContractRepository, onde os dados do usuário são armazenados. +

Os métodos implementados nesta classe realizam checagens de validação para garantir que os dados do usuário sejam válidos. + Se quaisquer dados inválidos forem fornecidos, como um ID de usuário, senha ou nome de usuário nulo ou em branco, + eles lançarão uma exceção UserServiceFailureException.

+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
See Also:
+
+ +
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    +
      +
    • +
      +

      INVALID_IDENTIFIER_ERROR_MESSAGE

      +
      public static final String INVALID_IDENTIFIER_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      INVALID_NEW_PASSWORD_MESSAGE

      +
      public static final String INVALID_NEW_PASSWORD_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      USER_NOT_FOUND_MESSAGE

      +
      public static final String USER_NOT_FOUND_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      USERNAME_INVALID_ERROR_MESSAGE

      +
      public static final String USERNAME_INVALID_ERROR_MESSAGE
      +
      +
      See Also:
      +
      + +
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Constructor Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createUser

      +
      public UserContract createUser(String username, + String email, + UserProfile userProfile, + String password) + throws UserCreationFailureException
      +
      Cria um novo usuário com os detalhes fornecidos e armazena no repositório de usuários.
      +
      +
      Specified by:
      +
      createUser in interface UserServiceContract
      +
      Parameters:
      +
      username - O nome de usuário para o novo usuário.
      +
      email - O email para o novo usuário.
      +
      userProfile - O perfil do novo usuário.
      +
      password - A senha para o novo usuário.
      +
      Returns:
      +
      A instância de UserContract que representa o usuário criado.
      +
      Throws:
      +
      UserCreationFailureException - se alguma informação fornecida for inválida.
      +
      +
      +
    • +
    • +
      +

      getUser

      +
      public UserContract getUser(String userId)
      +
      Recupera um usuário pelo seu ID do repositório de usuários.
      +
      +
      Specified by:
      +
      getUser in interface UserServiceContract
      +
      Parameters:
      +
      userId - O ID do usuário a ser recuperado.
      +
      Returns:
      +
      A instância de UserContract que representa o usuário recuperado.
      +
      Throws:
      +
      UserServiceFailureException - se o ID do usuário for nulo ou em branco.
      +
      +
      +
    • +
    • +
      +

      changePassword

      +
      public void changePassword(String userId, + String newPassword)
      +
      Altera a senha do usuário especificado.
      +
      +
      Specified by:
      +
      changePassword in interface UserServiceContract
      +
      Parameters:
      +
      userId - O ID do usuário cuja senha será alterada.
      +
      newPassword - A nova senha para o usuário.
      +
      Throws:
      +
      UserServiceFailureException - se o ID do usuário ou a nova senha forem nulos ou em branco, ou se o usuário não for encontrado.
      +
      +
      +
    • +
    • +
      +

      changeUserName

      +
      public void changeUserName(String userId, + String newUsername)
      +
      Altera o nome do usuário especificado.
      +
      +
      Specified by:
      +
      changeUserName in interface UserServiceContract
      +
      Parameters:
      +
      userId - O ID do usuário cujo nome será alterado.
      +
      newUsername - O novo nome de usuário para o usuário.
      +
      Throws:
      +
      UserServiceFailureException - se o ID do usuário ou o novo nome de usuário forem nulos ou em branco, ou se o usuário não for encontrado.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/UserServiceContract.html b/docs/diegosneves/github/conectardoacoes/core/service/UserServiceContract.html new file mode 100644 index 0000000..18c13f0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/UserServiceContract.html @@ -0,0 +1,219 @@ + + + + +UserServiceContract + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface UserServiceContract

+
+
+
+
All Known Implementing Classes:
+
UserService
+
+
+
public interface UserServiceContract
+
Interface para o contrato de serviço do usuário. Define os métodos funcionais para todos os serviços de usuário.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      createUser

      +
      UserContract createUser(String username, + String email, + UserProfile userProfile, + String password) + throws UserCreationFailureException
      +
      Método para criar usuário.
      +
      +
      Parameters:
      +
      username - nome de usuário exclusivo.
      +
      email - e-mail do usuário.
      +
      userProfile - perfil do usuário.
      +
      password - senha da conta do usuário.
      +
      Returns:
      +
      Um UserContract instância contendo detalhes do usuário.
      +
      Throws:
      +
      UserCreationFailureException - se ocorrer um erro ao criar o usuário.
      +
      +
      +
    • +
    • +
      +

      getUser

      +
      UserContract getUser(String userId)
      +
      Método para obter detalhes do usuário.
      +
      +
      Parameters:
      +
      userId - ID único do usuário.
      +
      Returns:
      +
      A UserContract instância contendo detalhes do usuário.
      +
      Throws:
      +
      UserServiceFailureException - se ocorrer um erro ao buscar detalhes do usuário.
      +
      +
      +
    • +
    • +
      +

      changePassword

      +
      void changePassword(String userId, + String newPassword)
      +
      Método para alterar a senha do usuário.
      +
      +
      Parameters:
      +
      userId - ID único do usuário.
      +
      newPassword - Nova senha do usuário.
      +
      Throws:
      +
      UserServiceFailureException - se ocorrer um erro ao alterar a senha do usuário.
      +
      +
      +
    • +
    • +
      +

      changeUserName

      +
      void changeUserName(String userId, + String newUsername)
      +
      Método para alterar o nome de usuário.
      +
      +
      Parameters:
      +
      userId - ID único do usuário.
      +
      newUsername - Novo nome de usuário.
      +
      Throws:
      +
      UserServiceFailureException - se ocorrer um erro ao alterar o nome de usuário.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/class-use/ShelterService.html b/docs/diegosneves/github/conectardoacoes/core/service/class-use/ShelterService.html new file mode 100644 index 0000000..87806b3 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/class-use/ShelterService.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.service.ShelterService + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.service.ShelterService

+
+No usage of diegosneves.github.conectardoacoes.core.service.ShelterService
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/class-use/ShelterServiceContract.html b/docs/diegosneves/github/conectardoacoes/core/service/class-use/ShelterServiceContract.html new file mode 100644 index 0000000..aa1a679 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/class-use/ShelterServiceContract.html @@ -0,0 +1,85 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.core.service.ShelterServiceContract + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.core.service.ShelterServiceContract

+
+
Packages that use ShelterServiceContract
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/class-use/UserService.html b/docs/diegosneves/github/conectardoacoes/core/service/class-use/UserService.html new file mode 100644 index 0000000..e373246 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/class-use/UserService.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.service.UserService + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.service.UserService

+
+No usage of diegosneves.github.conectardoacoes.core.service.UserService
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/class-use/UserServiceContract.html b/docs/diegosneves/github/conectardoacoes/core/service/class-use/UserServiceContract.html new file mode 100644 index 0000000..c150d3f --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/class-use/UserServiceContract.html @@ -0,0 +1,85 @@ + + + + +Uses of Interface diegosneves.github.conectardoacoes.core.service.UserServiceContract + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
diegosneves.github.conectardoacoes.core.service.UserServiceContract

+
+
Packages that use UserServiceContract
+ +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/service/package-summary.html new file mode 100644 index 0000000..92a8ed0 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/package-summary.html @@ -0,0 +1,103 @@ + + + + +diegosneves.github.conectardoacoes.core.service + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.service

+
+
+
package diegosneves.github.conectardoacoes.core.service
+
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/service/package-tree.html new file mode 100644 index 0000000..7518692 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/package-tree.html @@ -0,0 +1,80 @@ + + + + +diegosneves.github.conectardoacoes.core.service Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.service

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/service/package-use.html b/docs/diegosneves/github/conectardoacoes/core/service/package-use.html new file mode 100644 index 0000000..9b701df --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/service/package-use.html @@ -0,0 +1,86 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.service + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.service

+
+ + +
+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/utils/UuidUtils.html b/docs/diegosneves/github/conectardoacoes/core/utils/UuidUtils.html new file mode 100644 index 0000000..96defbf --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/utils/UuidUtils.html @@ -0,0 +1,205 @@ + + + + +UuidUtils + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class UuidUtils

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.core.utils.UuidUtils
+
+
+
+
public class UuidUtils +extends Object
+
Classe de utilidade para lidar com operações relacionadas ao UUID. + Esta classe fornece métodos estáticos para gerar um novo UUID e para validar um UUID existente.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Field Details

    + +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      generateUuid

      +
      public static String generateUuid()
      +
      Gera um novo UUID.
      +
      +
      Returns:
      +
      A string representando o UUID gerado.
      +
      +
      +
    • +
    • +
      +

      isValidUUID

      +
      public static boolean isValidUUID(String uuid) + throws UuidUtilsException
      +
      Valida um UUID.
      +
      +
      Parameters:
      +
      uuid - A string que representa o UUID a ser validado.
      +
      Returns:
      +
      Retorna 'true' se o UUID for válido.
      +
      Throws:
      +
      UuidUtilsException - Se o UUID fornecido for inválido.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/utils/ValidationUtils.html b/docs/diegosneves/github/conectardoacoes/core/utils/ValidationUtils.html new file mode 100644 index 0000000..12aacf2 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/utils/ValidationUtils.html @@ -0,0 +1,159 @@ + + + + +ValidationUtils + + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Class ValidationUtils

+
+
java.lang.Object +
diegosneves.github.conectardoacoes.core.utils.ValidationUtils
+
+
+
+
public class ValidationUtils +extends Object
+
A classe ValidationUtils é um utilitário que fornece métodos para validar dados de entrada. + Contém todos os métodos estáticos e não pode ser instanciada.
+
+
Since:
+
1.0.0
+
Author:
+
diegoneves
+
+
+
+ +
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      validateNotNullOrEmpty

      +
      public static <T> void validateNotNullOrEmpty(T input, + String errorMessage, + Class<? extends RuntimeException> customException)
      +
      Valida a entrada com base nas condições para nulo e vazio (no caso de String). + Lança uma exceção com a mensagem de erro fornecida, se uma destas condições for verdadeira. + Este método pode ser utilizado para a validação de entradas onde dados são obrigatórios.
      +
      +
      Type Parameters:
      +
      T - o tipo de objeto a ser verificado
      +
      Parameters:
      +
      input - o objeto a ser validado
      +
      errorMessage - a mensagem de erro a ser anexada à exceção em caso de falhas na validação
      +
      customException - a classe da exceção RuntimeException a ser lançada
      +
      Throws:
      +
      RuntimeException - se o objeto fornecido for nulo ou se fora uma instância de String e estiver vazia
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/utils/class-use/UuidUtils.html b/docs/diegosneves/github/conectardoacoes/core/utils/class-use/UuidUtils.html new file mode 100644 index 0000000..a87608b --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/utils/class-use/UuidUtils.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.utils.UuidUtils + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.utils.UuidUtils

+
+No usage of diegosneves.github.conectardoacoes.core.utils.UuidUtils
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/utils/class-use/ValidationUtils.html b/docs/diegosneves/github/conectardoacoes/core/utils/class-use/ValidationUtils.html new file mode 100644 index 0000000..a809550 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/utils/class-use/ValidationUtils.html @@ -0,0 +1,58 @@ + + + + +Uses of Class diegosneves.github.conectardoacoes.core.utils.ValidationUtils + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
diegosneves.github.conectardoacoes.core.utils.ValidationUtils

+
+No usage of diegosneves.github.conectardoacoes.core.utils.ValidationUtils
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/utils/package-summary.html b/docs/diegosneves/github/conectardoacoes/core/utils/package-summary.html new file mode 100644 index 0000000..fbc5e06 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/utils/package-summary.html @@ -0,0 +1,89 @@ + + + + +diegosneves.github.conectardoacoes.core.utils + + + + + + + + + + + + + + + +
+ +
+
+
+

Package diegosneves.github.conectardoacoes.core.utils

+
+
+
package diegosneves.github.conectardoacoes.core.utils
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    +
    Classe de utilidade para lidar com operações relacionadas ao UUID.
    +
    + +
    +
    A classe ValidationUtils é um utilitário que fornece métodos para validar dados de entrada.
    +
    +
    +
    +
  • +
+
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/utils/package-tree.html b/docs/diegosneves/github/conectardoacoes/core/utils/package-tree.html new file mode 100644 index 0000000..f91ac23 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/utils/package-tree.html @@ -0,0 +1,73 @@ + + + + +diegosneves.github.conectardoacoes.core.utils Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package diegosneves.github.conectardoacoes.core.utils

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/diegosneves/github/conectardoacoes/core/utils/package-use.html b/docs/diegosneves/github/conectardoacoes/core/utils/package-use.html new file mode 100644 index 0000000..e0cd141 --- /dev/null +++ b/docs/diegosneves/github/conectardoacoes/core/utils/package-use.html @@ -0,0 +1,58 @@ + + + + +Uses of Package diegosneves.github.conectardoacoes.core.utils + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
diegosneves.github.conectardoacoes.core.utils

+
+No usage of diegosneves.github.conectardoacoes.core.utils
+
+
+ + diff --git a/docs/element-list b/docs/element-list new file mode 100644 index 0000000..d8348f0 --- /dev/null +++ b/docs/element-list @@ -0,0 +1,28 @@ +diegosneves.github.conectardoacoes.adapters.rest +diegosneves.github.conectardoacoes.adapters.rest.config.handler +diegosneves.github.conectardoacoes.adapters.rest.config.web +diegosneves.github.conectardoacoes.adapters.rest.controller +diegosneves.github.conectardoacoes.adapters.rest.controller.imp +diegosneves.github.conectardoacoes.adapters.rest.dto +diegosneves.github.conectardoacoes.adapters.rest.enums +diegosneves.github.conectardoacoes.adapters.rest.exception +diegosneves.github.conectardoacoes.adapters.rest.mapper +diegosneves.github.conectardoacoes.adapters.rest.model +diegosneves.github.conectardoacoes.adapters.rest.repository +diegosneves.github.conectardoacoes.adapters.rest.request +diegosneves.github.conectardoacoes.adapters.rest.response +diegosneves.github.conectardoacoes.adapters.rest.service +diegosneves.github.conectardoacoes.adapters.rest.service.impl +diegosneves.github.conectardoacoes.core.domain.shelter.entity +diegosneves.github.conectardoacoes.core.domain.shelter.entity.value +diegosneves.github.conectardoacoes.core.domain.shelter.factory +diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository +diegosneves.github.conectardoacoes.core.domain.user.entity +diegosneves.github.conectardoacoes.core.domain.user.entity.value +diegosneves.github.conectardoacoes.core.domain.user.factory +diegosneves.github.conectardoacoes.core.domain.user.shared.repository +diegosneves.github.conectardoacoes.core.enums +diegosneves.github.conectardoacoes.core.exception +diegosneves.github.conectardoacoes.core.repository +diegosneves.github.conectardoacoes.core.service +diegosneves.github.conectardoacoes.core.utils diff --git a/docs/help-doc.html b/docs/help-doc.html new file mode 100644 index 0000000..56fb825 --- /dev/null +++ b/docs/help-doc.html @@ -0,0 +1,192 @@ + + + + +API Help + + + + + + + + + + + + + + + +
+ +
+
+

JavaDoc Help

+ +
+
+

Navigation

+Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces + +
+
+
+

Kinds of Pages

+The following sections describe the different kinds of pages in this collection. +
+

Overview

+

The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+
+
+

Package

+

Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

+
    +
  • Interfaces
  • +
  • Classes
  • +
  • Enum Classes
  • +
  • Exceptions
  • +
  • Errors
  • +
  • Annotation Interfaces
  • +
+
+
+

Class or Interface

+

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

+
    +
  • Class Inheritance Diagram
  • +
  • Direct Subclasses
  • +
  • All Known Subinterfaces
  • +
  • All Known Implementing Classes
  • +
  • Class or Interface Declaration
  • +
  • Class or Interface Description
  • +
+
+
    +
  • Nested Class Summary
  • +
  • Enum Constant Summary
  • +
  • Field Summary
  • +
  • Property Summary
  • +
  • Constructor Summary
  • +
  • Method Summary
  • +
  • Required Element Summary
  • +
  • Optional Element Summary
  • +
+
+
    +
  • Enum Constant Details
  • +
  • Field Details
  • +
  • Property Details
  • +
  • Constructor Details
  • +
  • Method Details
  • +
  • Element Details
  • +
+

Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

+

The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

+
+
+

Other Files

+

Packages and modules may contain pages with additional information related to the declarations nearby.

+
+
+

Use

+

Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the USE link in the navigation bar.

+
+
+

Tree (Class Hierarchy)

+

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

+
    +
  • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
  • +
  • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
  • +
+
+
+

Constant Field Values

+

The Constant Field Values page lists the static final fields and their values.

+
+
+

Serialized Form

+

Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

+
+
+

All Packages

+

The All Packages page contains an alphabetic index of all packages contained in the documentation.

+
+
+

All Classes and Interfaces

+

The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

+
+
+

Index

+

The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

+
+
+
+This help file applies to API documentation generated by the standard doclet.
+
+
+ + diff --git a/docs/index-files/index-1.html b/docs/index-files/index-1.html new file mode 100644 index 0000000..438c74a --- /dev/null +++ b/docs/index-files/index-1.html @@ -0,0 +1,157 @@ + + + + +A-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

A

+
+
addDonation(Donation) - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
addDonation(Donation) - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Adiciona uma doação à lista de doações do abrigo.
+
+
addDonation(String, Donation) - Method in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
+
Este método é responsável por adicionar uma Donation a um ShelterContract específico, identificado por seu id.
+
+
addDonation(String, Donation) - Method in interface diegosneves.github.conectardoacoes.core.service.ShelterServiceContract
+
+
Adiciona uma nova doação ao abrigo.
+
+
Address - Class in diegosneves.github.conectardoacoes.core.domain.shelter.entity.value
+
+
Classe Address representa um endereço físico.
+
+
Address(String, String, String, String, String, String, String) - Constructor for class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
+
Construtor para a classe Address.
+
+
ADDRESS_CLASS - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper
+
+
O Class do objeto de endereço, usado para formatar as mensagens de erro.
+
+
ADDRESS_CREATION_ERROR - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
ADDRESS_CREATION_ERROR - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
 
+
ADDRESS_ENTITY_TYPE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper
+
 
+
ADDRESS_OPERATION_FAILURE - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
 
+
ADDRESS_REQUIRED_ERROR - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
AddressCreationFailureException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+
AddressCreationFailureException(String) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException
+
+
Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
+
+
AddressCreationFailureException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException
+
+
Construtor para AddressCreationFailureException.
+
+
AddressDTO - Class in diegosneves.github.conectardoacoes.adapters.rest.dto
+
+
Classe modelo DTO para o endereço.
+
+
AddressDTO() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO
+
 
+
AddressEntity - Class in diegosneves.github.conectardoacoes.adapters.rest.model
+
+
Objeto de entidade AddressEntity que representa um objeto endereço no banco de dados mapeado para a tabela "address".
+
+
AddressEntity() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity
+
 
+
AddressEntityFailuresException - Exception in diegosneves.github.conectardoacoes.adapters.rest.exception
+
+
A classe AddressEntityFailuresException é uma subclasse da classe RuntimeException.
+
+
AddressEntityFailuresException(String) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException
+
+
Este construtor para a classe AddressEntityFailuresException recebe uma string + que representa uma mensagem personalizada de erro.
+
+
AddressEntityFailuresException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException
+
+
Construtor que recebe uma mensagem de erro e uma exceção causal.
+
+
AddressEntityMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
Implementação da interface MapperStrategy para mapear um objeto Address para sua correspondente entidade AddressEntity.
+
+
AddressEntityMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper
+
 
+
AddressFactory - Class in diegosneves.github.conectardoacoes.core.domain.shelter.factory
+
+
Fábrica estática para a criação de instâncias da classe Address.
+
+
AddressMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
A classe AddressMapper implementa a interface de estratégia de Mapeamento MapperStrategy + para converter objetos AddressEntity em objetos Address.
+
+
AddressMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper
+
 
+
AddressRepository - Interface in diegosneves.github.conectardoacoes.adapters.rest.repository
+
+
Java Persistence API (JPA) Repository para AddressEntity.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-10.html b/docs/index-files/index-10.html new file mode 100644 index 0000000..326b6dd --- /dev/null +++ b/docs/index-files/index-10.html @@ -0,0 +1,128 @@ + + + + +M-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

M

+
+
main(String[]) - Static method in class diegosneves.github.conectardoacoes.adapters.rest.ConectarDoacoesApplication
+
 
+
mapFrom(AddressEntity) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper
+
+
Realiza a conversão de um objeto AddressEntity para um objeto Address.
+
+
mapFrom(DonationEntity) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationMapper
+
+
Mapeia a entidade de doação do banco de dados para uma instância do objeto de domínio doação.
+
+
mapFrom(ShelterEntity) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper
+
+
Este método converte um objeto ShelterEntity em um novo objeto ShelterContract.
+
+
mapFrom(UserEntity) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper
+
+
Mapeia uma entidade de usuário (UserEntity) para um objeto de usuário de domínio (User).
+
+
mapFrom(ShelterContract) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper
+
+
Método que converte a fonte, um objeto da classe ShelterContract, para um novo objeto da classe ShelterEntity.
+
+
mapFrom(Address) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper
+
+
Implementa o mapeamento de um objeto Address para um objeto AddressEntity.
+
+
mapFrom(Donation) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper
+
+
Mapeia o objeto Donation fornecido para um objeto DonationEntity.
+
+
mapFrom(UserContract) - Method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper
+
+
Este método é usado para mapear um objeto de origem do tipo User para um objeto de entidade UserEntity.
+
+
mapFrom(E) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy
+
+
Executa a estratégia para realizar uma operação de mapeamento entre objetos.
+
+
MapperFailureException - Exception in diegosneves.github.conectardoacoes.adapters.rest.exception
+
+
MapperFailureException é uma classe de exceção personalizada.
+
+
MapperFailureException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException
+
+
Esta é uma classe de exceção personalizada usada para gerenciar e fornecer mensagens mais + informativas quando uma falha ocorre durante o mapeamento.
+
+
MapperStrategy<T,E> - Interface in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
A interface MapperStrategy define uma estratégia para executar operações de mapeamento de objetos.
+
+
mapTo(MapperStrategy<T, E>, E) - Static method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
+
+
Esta é uma função auxiliar genérica para converter (mapear) um objeto de origem em um destino desejado, + usando uma estratégia de mapeamento fornecida.
+
+
mapTo(Class<T>, Object) - Static method in class diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
+
+
Mapeia os campos do objeto de origem para os campos da classe de destino.
+
+
message() - Method in record class diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
+
+
Returns the value of the message record component.
+
+
MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-11.html b/docs/index-files/index-11.html new file mode 100644 index 0000000..0092e3e --- /dev/null +++ b/docs/index-files/index-11.html @@ -0,0 +1,64 @@ + + + + +N-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

N

+
+
NEIGHBORHOOD_NAME_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-12.html b/docs/index-files/index-12.html new file mode 100644 index 0000000..3e50334 --- /dev/null +++ b/docs/index-files/index-12.html @@ -0,0 +1,68 @@ + + + + +O-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

O

+
+
OpenApiConfig - Class in diegosneves.github.conectardoacoes.adapters.rest.config.web
+
+
Classe de configuração para a documentação da API aberta (OpenAPI).
+
+
OpenApiConfig() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.config.web.OpenApiConfig
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-13.html b/docs/index-files/index-13.html new file mode 100644 index 0000000..b263bc3 --- /dev/null +++ b/docs/index-files/index-13.html @@ -0,0 +1,76 @@ + + + + +P-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

P

+
+
PASSWORD_NOT_PROVIDED - Static variable in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
persist(ShelterContract) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository
+
+
Persiste uma instância de ShelterContract na representação do banco de dados.
+
+
persist(UserContract) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
+
 
+
persist(T) - Method in interface diegosneves.github.conectardoacoes.core.repository.RepositoryContract
+
+
Salva uma entidade.
+
+
PROFILE_NOT_PROVIDED - Static variable in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-14.html b/docs/index-files/index-14.html new file mode 100644 index 0000000..1684045 --- /dev/null +++ b/docs/index-files/index-14.html @@ -0,0 +1,82 @@ + + + + +R-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

R

+
+
RepositoryContract<T> - Interface in diegosneves.github.conectardoacoes.core.repository
+
+
Esta é uma interface de contrato de repositório genérica que define operações CRUD básicas.
+
+
REQUIRED_USER_ERROR_MESSAGE - Static variable in interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
+
 
+
RESIDENCE_NUMBER_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
 
+
RESPONSIBLE_REQUIRED_ERROR - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
retrieveAll() - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository
+
+
Recupera todos os abrigos do banco de dados.
+
+
retrieveAll() - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
+
 
+
retrieveAll() - Method in interface diegosneves.github.conectardoacoes.core.repository.RepositoryContract
+
+
Encontra todas as entidades de um determinado tipo.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-15.html b/docs/index-files/index-15.html new file mode 100644 index 0000000..f99c8a0 --- /dev/null +++ b/docs/index-files/index-15.html @@ -0,0 +1,226 @@ + + + + +S-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

S

+
+
searchUserByEmail(String) - Method in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
searchUserByEmail(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService
+
+
Este método é usado para obter uma entidade de usuário pelo seu email.
+
+
securityFilterChain(HttpSecurity) - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.web.WebSecurityConfig
+
+
Cria uma cadeia de filtros de segurança (SecurityFilterChain) para a instância HttpSecurity fornecida.
+
+
Shelter - Class in diegosneves.github.conectardoacoes.core.domain.shelter.entity
+
+
Implementação da interface ShelterContract, que representa um abrigo na aplicação.
+
+
Shelter(String, String, Address, UserContract) - Constructor for class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
+
Construtor da classe Shelter que inicializa a classe com valores fornecidos e valida o conjunto de dados presentes.
+
+
SHELTER_CLASS - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper
+
 
+
SHELTER_CREATION_ERROR - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
SHELTER_CREATION_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
 
+
SHELTER_ENTITY_CLASS - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper
+
 
+
SHELTER_ERROR_MESSAGE - Static variable in interface diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository
+
 
+
SHELTER_MANIPULATION_ERROR - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
SHELTER_NAME_REQUIRED_ERROR - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
SHELTER_OPERATION_FAILURE - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
 
+
ShelterContract - Interface in diegosneves.github.conectardoacoes.core.domain.shelter.entity
+
+
Interface ShelterContract define os métodos que representam os principais comportamentos e a divulgação de informações de uma entidade Shelter.
+
+
ShelterContractRepository - Interface in diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository
+
+
A interface ShelterContractRepository herda da interface RepositoryContract.
+
+
ShelterController - Interface in diegosneves.github.conectardoacoes.adapters.rest.controller
+
+
Interface que define as operações de gerenciamento de abrigos.
+
+
ShelterControllerImpl - Class in diegosneves.github.conectardoacoes.adapters.rest.controller.imp
+
+
A classe ShelterControllerImpl implementa a interface ShelterController e serve como + o ponto de entrada da API para o gerenciamento dos abrigos.
+
+
ShelterControllerImpl(ShelterEntityService) - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.controller.imp.ShelterControllerImpl
+
 
+
ShelterCreatedResponse - Class in diegosneves.github.conectardoacoes.adapters.rest.response
+
+
Classe modelo DTO para a resposta de criação de um abrigo.
+
+
ShelterCreatedResponse() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse
+
 
+
ShelterCreationFailureException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+
ShelterCreationFailureException(String) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException
+
+
Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
+
+
ShelterCreationFailureException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException
+
+
Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
+
+
ShelterCreationRequest - Class in diegosneves.github.conectardoacoes.adapters.rest.request
+
+
Classe modelo para o Pedido de Criação do Abrigo ShelterCreationRequest.
+
+
ShelterCreationRequest() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest
+
 
+
ShelterEntity - Class in diegosneves.github.conectardoacoes.adapters.rest.model
+
+
Objeto de entidade ShelterEntity que representa um objeto abrigo no banco de dados mapeado para a tabela "shelters".
+
+
ShelterEntity() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity
+
 
+
ShelterEntityFailuresException - Exception in diegosneves.github.conectardoacoes.adapters.rest.exception
+
+
A classe ShelterEntityFailuresException representa uma exceção específica que será lançada + quando ocorrer uma falha em uma operação relacionada ao ShelterEntity.
+
+
ShelterEntityFailuresException(String) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException
+
+
Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao ShelterEntity.
+
+
ShelterEntityFailuresException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException
+
+
Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao ShelterEntity.
+
+
ShelterEntityMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
Classe ShelterEntityMapper que implementa a interface MapperStrategy para executar operações de mapeamento entre a classe ShelterContract e a classe ShelterEntity.
+
+
ShelterEntityMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper
+
 
+
ShelterEntityService - Interface in diegosneves.github.conectardoacoes.adapters.rest.service
+
+
Interface para a criação de um novo abrigo no sistema.
+
+
ShelterEntityServiceImpl - Class in diegosneves.github.conectardoacoes.adapters.rest.service.impl
+
+
Esta classe é responsável pela implementação dos métodos necessários para gerenciar abrigos no sistema.
+
+
ShelterEntityServiceImpl(ShelterRepository, DonationRepository, AddressRepository, UserEntityService) - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
 
+
ShelterFactory - Class in diegosneves.github.conectardoacoes.core.domain.shelter.factory
+
+
Classe ShelterFactory responsável por fornecer métodos para criar instâncias da classe Shelter.
+
+
ShelterMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
Implementação da interface MapperStrategy para a conversão entre a entidade ShelterEntity e a classe de domínio ShelterContract.
+
+
ShelterMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper
+
 
+
ShelterRepository - Interface in diegosneves.github.conectardoacoes.adapters.rest.repository
+
+
Este repositório é responsável pela persistência de dados relacionados a abrigos (Shelter).
+
+
ShelterService - Class in diegosneves.github.conectardoacoes.core.service
+
+
A classe de serviço ShelterService é responsável pelas operações de negócios relacionadas a abrigos.
+
+
ShelterService(ShelterContractRepository) - Constructor for class diegosneves.github.conectardoacoes.core.service.ShelterService
+
 
+
ShelterServiceContract - Interface in diegosneves.github.conectardoacoes.core.service
+
+
Interface ShelterServiceContract define vários métodos que manipulam um objeto Shelter.
+
+
ShelterServiceFailureException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+
ShelterServiceFailureException(String) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.ShelterServiceFailureException
+
+
Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
+
+
ShelterServiceFailureException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.ShelterServiceFailureException
+
+
Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
+
+
SOURCE_OBJECT_NULL_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
+
 
+
STATE_NAME_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
 
+
statusCode() - Method in record class diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
+
+
Returns the value of the statusCode record component.
+
+
STRATEGY_CANNOT_BE_NULL - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper
+
 
+
STREET_NAME_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-16.html b/docs/index-files/index-16.html new file mode 100644 index 0000000..3e708bd --- /dev/null +++ b/docs/index-files/index-16.html @@ -0,0 +1,68 @@ + + + + +T-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

T

+
+
toString() - Method in record class diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
+
+
Returns a string representation of this record class.
+
+
toString() - Method in enum class diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-17.html b/docs/index-files/index-17.html new file mode 100644 index 0000000..2c0c34f --- /dev/null +++ b/docs/index-files/index-17.html @@ -0,0 +1,240 @@ + + + + +U-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

U

+
+
User - Class in diegosneves.github.conectardoacoes.core.domain.user.entity
+
+
Representa um usuário dentro do sistema.
+
+
User(String, String, String, UserProfile, String) - Constructor for class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
USER_CLASS - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper
+
 
+
USER_CREATION_ERROR - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
USER_CREATION_FAILURE_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
USER_ENTITY_CLASS - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper
+
 
+
USER_ID_ERROR_MESSAGE - Static variable in interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
+
 
+
USER_ID_REQUIRED - Static variable in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
USER_MANIPULATION_ERROR - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
USER_NOT_FOUND_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.service.UserService
+
 
+
USER_OPERATION_FAILURE - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
 
+
USER_PROFILE_VALIDATION_FAILURE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
 
+
UserContract - Interface in diegosneves.github.conectardoacoes.core.domain.user.entity
+
+
A interface UserContract define o contrato para o gerenciamento de um usuário no sistema.
+
+
UserContractRepository - Interface in diegosneves.github.conectardoacoes.core.domain.user.shared.repository
+
+
A interface UserContractRepository herda de RepositoryContract que é parametrizada com UserContract.
+
+
UserController - Interface in diegosneves.github.conectardoacoes.adapters.rest.controller
+
+
A interface UserController age como um controlador REST referente a usuários dentro deste sistema.
+
+
UserControllerImpl - Class in diegosneves.github.conectardoacoes.adapters.rest.controller.imp
+
+
Esta é a classe UserControllerImpl que implementa a interface UserController.
+
+
UserControllerImpl(UserEntityService) - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.controller.imp.UserControllerImpl
+
 
+
UserCreationFailureException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+
UserCreationFailureException(String) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException
+
+
Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
+
+
UserCreationFailureException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException
+
+
Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
+
+
UserEntity - Class in diegosneves.github.conectardoacoes.adapters.rest.model
+
+
Representa um usuário no sistema.
+
+
UserEntity() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity
+
 
+
UserEntityCreatedResponse - Class in diegosneves.github.conectardoacoes.adapters.rest.response
+
+
Esta classe representa a resposta após a criação de uma entidade de usuário no sistema.
+
+
UserEntityCreatedResponse() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse
+
 
+
UserEntityCreationRequest - Class in diegosneves.github.conectardoacoes.adapters.rest.request
+
+
Esta classe representa um objeto de solicitação para a criação de uma nova entidade de usuário.
+
+
UserEntityCreationRequest() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest
+
 
+
UserEntityDTO - Class in diegosneves.github.conectardoacoes.adapters.rest.dto
+
+
Classe modelo DTO para um usuário.
+
+
UserEntityDTO() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO
+
 
+
UserEntityFailuresException - Exception in diegosneves.github.conectardoacoes.adapters.rest.exception
+
+
A classe UserEntityFailuresException representa uma exceção específica que será lançada + quando ocorrer uma falha em uma operação relacionada ao UserEntity.
+
+
UserEntityFailuresException(String) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException
+
+
Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao UserEntity.
+
+
UserEntityFailuresException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException
+
+
Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao UserEntity.
+
+
UserEntityMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
A classe UserEntityMapper implementa a interface MapperStrategy e é usada para mapear um objeto do tipo User para um objeto de entidade UserEntity.
+
+
UserEntityMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper
+
 
+
UserEntityService - Interface in diegosneves.github.conectardoacoes.adapters.rest.service
+
+
Definição da interface para o serviço que lida com operações relacionadas à entidade do usuário.
+
+
UserEntityServiceImpl - Class in diegosneves.github.conectardoacoes.adapters.rest.service.impl
+
+
A classe UserEntityServiceImpl implementa a interface UserEntityService e + lida com a lógica de negócios das operações de usuário.
+
+
UserEntityServiceImpl(UserRepository) - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
UserFactory - Class in diegosneves.github.conectardoacoes.core.domain.user.factory
+
+
Classe de utilidade para a criação de usuário.
+
+
UserMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
Implementação da interface MapperStrategy para a conversão entre a entidade UserEntity e a classe de domínio User.
+
+
UserMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper
+
 
+
USERNAME_INVALID_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.service.UserService
+
 
+
USERNAME_REQUIRED - Static variable in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
UserProfile - Enum Class in diegosneves.github.conectardoacoes.core.domain.user.entity.value
+
+
A enumeração UserProfile fornece os tipos de perfis disponíveis para um usuário.
+
+
UserProfileType - Enum Class in diegosneves.github.conectardoacoes.adapters.rest.enums
+
+
A enumeração UserProfileType fornece os tipos de perfis disponíveis para um usuário.
+
+
UserRepository - Interface in diegosneves.github.conectardoacoes.adapters.rest.repository
+
+
A interface do repositório de usuário, UserRepository, estende as interfaces UserContractRepository e CrudRepository.
+
+
UserService - Class in diegosneves.github.conectardoacoes.core.service
+
+
A classe UserService implementa um contratato do serviço do usuário UserServiceContract.
+
+
UserService(UserContractRepository) - Constructor for class diegosneves.github.conectardoacoes.core.service.UserService
+
 
+
UserServiceContract - Interface in diegosneves.github.conectardoacoes.core.service
+
+
Interface para o contrato de serviço do usuário.
+
+
UserServiceFailureException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Esta é uma classe de exceção personalizada que estende a RuntimeException.
+
+
UserServiceFailureException(String) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException
+
+
Construtor que aceita uma mensagem como argumento e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR e a mensagem dada.
+
+
UserServiceFailureException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException
+
+
Construtor que aceita uma mensagem e uma causa como argumentos e chama o construtor da superclasse com a + mensagem de erro construída a partir de ERROR, a mensagem dada e a causa da exceção.
+
+
UUID_REQUIRED - Static variable in class diegosneves.github.conectardoacoes.core.utils.UuidUtils
+
 
+
UuidUtils - Class in diegosneves.github.conectardoacoes.core.utils
+
+
Classe de utilidade para lidar com operações relacionadas ao UUID.
+
+
UuidUtilsException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Esta é uma classe de exceção personalizada que estende a classe RuntimeException.
+
+
UuidUtilsException(String) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.UuidUtilsException
+
+
Construtor da classe.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-18.html b/docs/index-files/index-18.html new file mode 100644 index 0000000..92aaaf4 --- /dev/null +++ b/docs/index-files/index-18.html @@ -0,0 +1,114 @@ + + + + +V-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

V

+
+
validateNotNullOrEmpty(T, String, Class<? extends RuntimeException>) - Static method in class diegosneves.github.conectardoacoes.core.utils.ValidationUtils
+
+
Valida a entrada com base nas condições para nulo e vazio (no caso de String).
+
+
ValidationUtils - Class in diegosneves.github.conectardoacoes.core.utils
+
+
A classe ValidationUtils é um utilitário que fornece métodos para validar dados de entrada.
+
+
ValidationUtilsException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Esta é uma classe de exceção personalizada que estende a classe RuntimeException.
+
+
ValidationUtilsException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.ValidationUtilsException
+
+
Construtor que cria uma instância da exceção ValidationUtilsException com a mensagem e causa fornecidas.
+
+
valueOf(String) - Static method in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
+
Returns the enum constant of this class with the specified name.
+
+
valueOf(String) - Static method in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType
+
+
Returns the enum constant of this class with the specified name.
+
+
valueOf(String) - Static method in enum class diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile
+
+
Returns the enum constant of this class with the specified name.
+
+
valueOf(String) - Static method in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
+
Returns the enum constant of this class with the specified name.
+
+
values() - Static method in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
+
Returns an array containing the constants of this enum class, in +the order they are declared.
+
+
values() - Static method in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType
+
+
Returns an array containing the constants of this enum class, in +the order they are declared.
+
+
values() - Static method in enum class diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile
+
+
Returns an array containing the constants of this enum class, in +the order they are declared.
+
+
values() - Static method in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
+
Returns an array containing the constants of this enum class, in +the order they are declared.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-19.html b/docs/index-files/index-19.html new file mode 100644 index 0000000..2731a8a --- /dev/null +++ b/docs/index-files/index-19.html @@ -0,0 +1,68 @@ + + + + +W-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

W

+
+
WebSecurityConfig - Class in diegosneves.github.conectardoacoes.adapters.rest.config.web
+
+
A classe WebSecurityConfig tem a responsabilidade de definir as configurações de segurança web desta aplicação.
+
+
WebSecurityConfig() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.config.web.WebSecurityConfig
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-2.html b/docs/index-files/index-2.html new file mode 100644 index 0000000..24f3d9c --- /dev/null +++ b/docs/index-files/index-2.html @@ -0,0 +1,75 @@ + + + + +B-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

B

+
+
BENEFICIARY - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType
+
 
+
BENEFICIARY - Enum constant in enum class diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile
+
 
+
BuilderMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
A classe BuilderMapper fornece métodos para mapear os campos de um objeto fonte + para os campos de uma classe destino.
+
+
buildMessage(String) - Method in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
+
Este método constrói e retorna uma mensagem de erro a partir da mensagem de erro associada à constante Enum e do parâmetro fornecido.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-3.html b/docs/index-files/index-3.html new file mode 100644 index 0000000..c06e128 --- /dev/null +++ b/docs/index-files/index-3.html @@ -0,0 +1,220 @@ + + + + +C-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

C

+
+
CEP_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
 
+
changeAddress(Address) - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
changeAddress(Address) - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Este método é usado para alterar o endereço do abrigo.
+
+
changeAddress(String, Address) - Method in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
+
Este método é usado para alterar o endereço do abrigo identificado pelo ID fornecido.
+
+
changeAddress(String, Address) - Method in interface diegosneves.github.conectardoacoes.core.service.ShelterServiceContract
+
+
Muda o endereço de um abrigo existente.
+
+
changePassword(String, String) - Method in class diegosneves.github.conectardoacoes.core.service.UserService
+
+
Altera a senha do usuário especificado.
+
+
changePassword(String, String) - Method in interface diegosneves.github.conectardoacoes.core.service.UserServiceContract
+
+
Método para alterar a senha do usuário.
+
+
changeShelterName(String) - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
changeShelterName(String) - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Altera o nome do abrigo.
+
+
changeShelterName(String, String) - Method in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
+
Este método é usado para alterar o nome do abrigo identificado pelo ID fornecido.
+
+
changeShelterName(String, String) - Method in interface diegosneves.github.conectardoacoes.core.service.ShelterServiceContract
+
+
Muda o nome de um abrigo existente.
+
+
changeUserName(String) - Method in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
changeUserName(String) - Method in interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
+
+
Este método é responsável por alterar o nome de usuário.
+
+
changeUserName(String, String) - Method in class diegosneves.github.conectardoacoes.core.service.UserService
+
+
Altera o nome do usuário especificado.
+
+
changeUserName(String, String) - Method in interface diegosneves.github.conectardoacoes.core.service.UserServiceContract
+
+
Método para alterar o nome de usuário.
+
+
changeUserPassword(String) - Method in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
changeUserPassword(String) - Method in interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
+
+
Altera a senha do usuário atual.
+
+
CITY_NAME_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
 
+
CLASS_MAPPING_FAILURE - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
 
+
ConectarDoacoesApplication - Class in diegosneves.github.conectardoacoes.adapters.rest
+
 
+
ConectarDoacoesApplication() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.ConectarDoacoesApplication
+
 
+
CONSTRUCTOR_DEFAULT_UNDEFINED - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
 
+
ConstructorDefaultUndefinedException - Exception in diegosneves.github.conectardoacoes.adapters.rest.exception
+
+
Exceção personalizada que é lançada quando não é definido um construtor padrão.
+
+
ConstructorDefaultUndefinedException(String) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException
+
+
Construtor da exceção ConstructorDefaultUndefinedException.
+
+
ConstructorDefaultUndefinedException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException
+
+
Construtor da exceção ConstructorDefaultUndefinedException.
+
+
ControllerExceptionHandler - Class in diegosneves.github.conectardoacoes.adapters.rest.config.handler
+
+
A classe ControllerExceptionHandler é um manipulador de exceções global para controladores.
+
+
ControllerExceptionHandler() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
 
+
CorsConfig - Class in diegosneves.github.conectardoacoes.adapters.rest.config.web
+
+
Classe de configuração para habilitar o compartilhamento de recursos de origem cruzada (CORS).
+
+
CorsConfig() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.config.web.CorsConfig
+
 
+
corsFilter() - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.web.CorsConfig
+
+
Este método inicializa e define as regras para o filtro CORS (Cross Origin Resource Sharing).
+
+
create(String, Address, UserContract) - Static method in class diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory
+
+
Construtor estático para a classe Shelter.
+
+
create(String, String, UserProfile, String) - Static method in class diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory
+
+
Cria um novo usuário com todas as informações necessárias e um identificador UUID gerado.
+
+
create(String, String, String, String, String, String) - Static method in class diegosneves.github.conectardoacoes.core.domain.shelter.factory.AddressFactory
+
+
Método estático para criação de uma nova instância de Address.
+
+
created(String, Integer) - Static method in class diegosneves.github.conectardoacoes.core.domain.shelter.factory.DonationFactory
+
+
Cria e retorna uma nova instância de doação.
+
+
createShelter(ShelterCreationRequest) - Method in class diegosneves.github.conectardoacoes.adapters.rest.controller.imp.ShelterControllerImpl
+
 
+
createShelter(ShelterCreationRequest) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.controller.ShelterController
+
+
Método POST para a criação de um Abrigo.
+
+
createShelter(ShelterCreationRequest) - Method in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
+
Este método é responsável por criar um novo abrigo no sistema.
+
+
createShelter(ShelterCreationRequest) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService
+
+
Este método é responsável por criar um novo abrigo no sistema.
+
+
createShelter(String, Address, UserContract) - Method in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
+ +
+
createShelter(String, Address, UserContract) - Method in interface diegosneves.github.conectardoacoes.core.service.ShelterServiceContract
+
+
Cria um novo Shelter usando o nome do abrigo, endereço e o objeto do usuário responsável fornecidos.
+
+
createUser(UserEntityCreationRequest) - Method in class diegosneves.github.conectardoacoes.adapters.rest.controller.imp.UserControllerImpl
+
 
+
createUser(UserEntityCreationRequest) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.controller.UserController
+
+
Este endpoint pertence à aplicação "Usuários".
+
+
createUser(String, String, UserProfile, String) - Method in class diegosneves.github.conectardoacoes.core.service.UserService
+
+
Cria um novo usuário com os detalhes fornecidos e armazena no repositório de usuários.
+
+
createUser(String, String, UserProfile, String) - Method in interface diegosneves.github.conectardoacoes.core.service.UserServiceContract
+
+
Método para criar usuário.
+
+
createUserEntity(UserEntityCreationRequest) - Method in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
createUserEntity(UserEntityCreationRequest) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService
+
+
Método para criar uma nova entidade do usuário.
+
+
customOpenAPI() - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.web.OpenApiConfig
+
+
Retorna uma instância personalizada do OpenAPI.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-4.html b/docs/index-files/index-4.html new file mode 100644 index 0000000..43d595f --- /dev/null +++ b/docs/index-files/index-4.html @@ -0,0 +1,189 @@ + + + + +D-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

D

+
+
DEFAULT_DONATION_AMOUNT - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation
+
 
+
deleteEntityById(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository
+
+
Este método é usado para excluir uma entidade ShelterEntity pelo ID.
+
+
deleteEntityById(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
+
 
+
deleteEntityById(String) - Method in interface diegosneves.github.conectardoacoes.core.repository.RepositoryContract
+
+
Deleta uma entidade pelo seu identificador.
+
+
diegosneves.github.conectardoacoes.adapters.rest - package diegosneves.github.conectardoacoes.adapters.rest
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.config.handler - package diegosneves.github.conectardoacoes.adapters.rest.config.handler
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.config.web - package diegosneves.github.conectardoacoes.adapters.rest.config.web
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.controller - package diegosneves.github.conectardoacoes.adapters.rest.controller
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.controller.imp - package diegosneves.github.conectardoacoes.adapters.rest.controller.imp
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.dto - package diegosneves.github.conectardoacoes.adapters.rest.dto
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.enums - package diegosneves.github.conectardoacoes.adapters.rest.enums
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.exception - package diegosneves.github.conectardoacoes.adapters.rest.exception
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.mapper - package diegosneves.github.conectardoacoes.adapters.rest.mapper
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.model - package diegosneves.github.conectardoacoes.adapters.rest.model
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.repository - package diegosneves.github.conectardoacoes.adapters.rest.repository
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.request - package diegosneves.github.conectardoacoes.adapters.rest.request
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.response - package diegosneves.github.conectardoacoes.adapters.rest.response
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.service - package diegosneves.github.conectardoacoes.adapters.rest.service
+
 
+
diegosneves.github.conectardoacoes.adapters.rest.service.impl - package diegosneves.github.conectardoacoes.adapters.rest.service.impl
+
 
+
diegosneves.github.conectardoacoes.core.domain.shelter.entity - package diegosneves.github.conectardoacoes.core.domain.shelter.entity
+
 
+
diegosneves.github.conectardoacoes.core.domain.shelter.entity.value - package diegosneves.github.conectardoacoes.core.domain.shelter.entity.value
+
 
+
diegosneves.github.conectardoacoes.core.domain.shelter.factory - package diegosneves.github.conectardoacoes.core.domain.shelter.factory
+
 
+
diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository - package diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository
+
 
+
diegosneves.github.conectardoacoes.core.domain.user.entity - package diegosneves.github.conectardoacoes.core.domain.user.entity
+
 
+
diegosneves.github.conectardoacoes.core.domain.user.entity.value - package diegosneves.github.conectardoacoes.core.domain.user.entity.value
+
 
+
diegosneves.github.conectardoacoes.core.domain.user.factory - package diegosneves.github.conectardoacoes.core.domain.user.factory
+
 
+
diegosneves.github.conectardoacoes.core.domain.user.shared.repository - package diegosneves.github.conectardoacoes.core.domain.user.shared.repository
+
 
+
diegosneves.github.conectardoacoes.core.enums - package diegosneves.github.conectardoacoes.core.enums
+
 
+
diegosneves.github.conectardoacoes.core.exception - package diegosneves.github.conectardoacoes.core.exception
+
 
+
diegosneves.github.conectardoacoes.core.repository - package diegosneves.github.conectardoacoes.core.repository
+
 
+
diegosneves.github.conectardoacoes.core.service - package diegosneves.github.conectardoacoes.core.service
+
 
+
diegosneves.github.conectardoacoes.core.utils - package diegosneves.github.conectardoacoes.core.utils
+
 
+
Donation - Class in diegosneves.github.conectardoacoes.core.domain.shelter.entity.value
+
+
Entidade que representa uma doação.
+
+
Donation(String, String, Integer) - Constructor for class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation
+
+
Construtor para criar uma nova instância de doação.
+
+
DONATION_CLASS - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper
+
 
+
DONATION_CREATION_ERROR - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
DONATION_REQUIRED_ERROR - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
DONATION_REQUIRED_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
 
+
DonationEntity - Class in diegosneves.github.conectardoacoes.adapters.rest.model
+
+
Objeto de entidade DonationEntity que representa um objeto doação no banco de dados mapeado para a tabela "donations".
+
+
DonationEntity() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity
+
 
+
DonationEntityMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
Classe responsável por implementar a estratégia de mapeamento para objetos Donation + para objetos DonationEntity.
+
+
DonationEntityMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper
+
 
+
DonationFactory - Class in diegosneves.github.conectardoacoes.core.domain.shelter.factory
+
+
Classe utilitária para fornecer funções de fábrica para a criação de instâncias Donation.
+
+
DonationMapper - Class in diegosneves.github.conectardoacoes.adapters.rest.mapper
+
+
Esta classe implementa a interface MapperStrategy para mapear a entidade DonationEntity para o objeto de domínio Donation.
+
+
DonationMapper() - Constructor for class diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationMapper
+
 
+
DonationRegisterFailureException - Exception in diegosneves.github.conectardoacoes.core.exception
+
+
Classe de exceção personalizada para falhas no registro de doações.
+
+
DonationRegisterFailureException(String) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException
+
+
Construtor que aceita uma mensagem de erro personalizada.
+
+
DonationRegisterFailureException(String, Throwable) - Constructor for exception diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException
+
+
Construtor da classe exceção que aceita uma mensagem de erro e um Throwable como causa da exceção.
+
+
DonationRepository - Interface in diegosneves.github.conectardoacoes.adapters.rest.repository
+
+
Definição da interface do repositório para a entidade de doação DonationEntity.
+
+
DONOR - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType
+
 
+
DONOR - Enum constant in enum class diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile
+
 
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-5.html b/docs/index-files/index-5.html new file mode 100644 index 0000000..2b30bce --- /dev/null +++ b/docs/index-files/index-5.html @@ -0,0 +1,121 @@ + + + + +E-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

E

+
+
EMAIL_ALREADY_IN_USE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
EMAIL_NOT_FOUND_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
EMAIL_NOT_PROVIDED - Static variable in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
equals(Object) - Method in record class diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
+
+
Indicates whether some other object is "equal to" this one.
+
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.ShelterServiceFailureException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.UuidUtilsException
+
 
+
ERROR - Static variable in exception diegosneves.github.conectardoacoes.core.exception.ValidationUtilsException
+
 
+
ERROR_MAPPING_ADDRESS - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.ShelterEntityServiceImpl
+
 
+
ERROR_MESSAGE_ADDRESS_NULL - Static variable in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
 
+
EXCEPTION_TYPE_NOT_THROWN - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
ExceptionDetails - Enum Class in diegosneves.github.conectardoacoes.adapters.rest.enums
+
+
A classe ExceptionDetails é uma enumeração que define várias mensagens de exceções.
+
+
ExceptionDetails - Enum Class in diegosneves.github.conectardoacoes.core.enums
+
+
Este é um Enum que contém detalhes de várias exceções relacionadas ao processo de criação de várias entidades, como Usuário, Donação, Abrigo e Endereço.
+
+
ExceptionDTO - Record Class in diegosneves.github.conectardoacoes.adapters.rest.dto
+
+
A classe ExceptionDTO representa um objeto de transferência de dados + para transportar informações de exceção.
+
+
ExceptionDTO(String, int) - Constructor for record class diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
+
+
Creates an instance of a ExceptionDTO record class.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-6.html b/docs/index-files/index-6.html new file mode 100644 index 0000000..dedd645 --- /dev/null +++ b/docs/index-files/index-6.html @@ -0,0 +1,88 @@ + + + + +F-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

F

+
+
findByEmail(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
+
+
Este método busca um usuário pelo email fornecido e retorna um Optional de UserEntity.
+
+
findById(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.AddressRepository
+
+
Retorna um conteiner Optional encapsulando o AddressEntity encontrado pelo Id.
+
+
findById(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.DonationRepository
+
+
Este método é usado para encontrar uma entidade de doação com base no ID.
+
+
findEntityById(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository
+
+
Este método é usado para encontrar e retornar uma entidade ShelterEntity pelo ID.
+
+
findEntityById(String) - Method in interface diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository
+
 
+
findEntityById(String) - Method in interface diegosneves.github.conectardoacoes.core.repository.RepositoryContract
+
+
Encontra uma entidade pelo seu identificador.
+
+
formatErrorMessage(String) - Method in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
+
Formata uma mensagem com a entrada fornecida e retorna a mensagem formatada.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-7.html b/docs/index-files/index-7.html new file mode 100644 index 0000000..9add0de --- /dev/null +++ b/docs/index-files/index-7.html @@ -0,0 +1,158 @@ + + + + +G-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

G

+
+
generateUuid() - Static method in class diegosneves.github.conectardoacoes.core.utils.UuidUtils
+
+
Gera um novo UUID.
+
+
getAddress() - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
getAddress() - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Retorna o endereço do refúgio na forma de um objeto Address.
+
+
getDonations() - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
getDonations() - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Retorna uma lista de todas as doações associadas ao Abrigo.
+
+
getDonations(String) - Method in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
+
Este método é responsável por recuperar a lista de Donation de um ShelterContract específico, identificado por seu id.
+
+
getDonations(String) - Method in interface diegosneves.github.conectardoacoes.core.service.ShelterServiceContract
+
+
Busca a lista de todas as Donation de um determinado abrigo.
+
+
getEmail() - Method in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
getEmail() - Method in interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
+
+
Obtém o email do usuário.
+
+
getHttpStatusCode() - Method in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
+
Obtém o status HTTP associado ao erro.
+
+
getId() - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
getId() - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Retorna a identificação do refúgio na forma de uma String.
+
+
getId() - Method in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
getId() - Method in interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
+
+
Este método retorna o ID único do usuário.
+
+
getShelter(String) - Method in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
+
Retorna um objeto ShelterContract baseado no ID do abrigo fornecido.
+
+
getShelter(String) - Method in interface diegosneves.github.conectardoacoes.core.service.ShelterServiceContract
+
+
Obtém os detalhes de um abrigo existente.
+
+
getShelterName() - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
getShelterName() - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Retorna o nome do refúgio na forma de uma String.
+
+
getStatusCodeValue() - Method in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
+
Retorna o código de status HTTP associado ao erro.
+
+
getUser() - Method in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
getUser() - Method in interface diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
+
+
Retorna o usuário associado ao refúgio na forma de um objeto UserContract.
+
+
getUser(String) - Method in class diegosneves.github.conectardoacoes.core.service.UserService
+
+
Recupera um usuário pelo seu ID do repositório de usuários.
+
+
getUser(String) - Method in interface diegosneves.github.conectardoacoes.core.service.UserServiceContract
+
+
Método para obter detalhes do usuário.
+
+
getUsername() - Method in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
getUsername() - Method in interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
+
+
Obtém o nome de usuário do usuário.
+
+
getUserPassword() - Method in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
getUserPassword() - Method in interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
+
+
Recupera a senha do usuário.
+
+
getUserProfile() - Method in class diegosneves.github.conectardoacoes.core.domain.user.entity.User
+
 
+
getUserProfile() - Method in interface diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
+
+
Retorna o objeto UserProfile associado ao usuário.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-8.html b/docs/index-files/index-8.html new file mode 100644 index 0000000..f27b941 --- /dev/null +++ b/docs/index-files/index-8.html @@ -0,0 +1,94 @@ + + + + +H-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

H

+
+
handleAddressEntityFailures(AddressEntityFailuresException) - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
Manipula as exceções específicas de AddressEntityFailuresException que + podem ocorrer durante a manipulação dos dados da entidade de endereço.
+
+
handleFailures(Exception) - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
Manipula exceções gerais e retorna uma resposta de erro apropriada.
+
+
handleMapperFailures(ConstructorDefaultUndefinedException) - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
Método que manipula as exceções específicas da ConstructorDefaultUndefinedException + que podem ocorrer ao instanciar objetos sem um construtor padrão.
+
+
handleMapperFailures(MapperFailureException) - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
Manipula a exceção MapperFailureException e retorna uma resposta de erro adequada.
+
+
handleShelterEntityFailures(ShelterEntityFailuresException) - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
Manipula as exceções específicas de ShelterEntityFailuresException que + podem ocorrer durante a manipulação dos dados da entidade de abrigo.
+
+
handleUserEntityFailures(UserEntityFailuresException) - Method in class diegosneves.github.conectardoacoes.adapters.rest.config.handler.ControllerExceptionHandler
+
+
Este método é usado para manipular as exceções específicas de UserEntityFailuresException + que podem ocorrer durante a manipulação dos dados do UserEntity.
+
+
hashCode() - Method in record class diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO
+
+
Returns a hash code value for this object.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index-files/index-9.html b/docs/index-files/index-9.html new file mode 100644 index 0000000..bda0c85 --- /dev/null +++ b/docs/index-files/index-9.html @@ -0,0 +1,92 @@ + + + + +I-Index + + + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

I

+
+
ID_VALIDATION_FAILURE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter
+
 
+
INVALID_DESCRIPTION_ERROR - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation
+
 
+
INVALID_EMAIL_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.adapters.rest.service.impl.UserEntityServiceImpl
+
 
+
INVALID_ID_MESSAGE - Static variable in interface diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository
+
 
+
INVALID_ID_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address
+
 
+
INVALID_ID_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation
+
 
+
INVALID_IDENTIFIER_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.service.UserService
+
 
+
INVALID_NEW_PASSWORD_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.service.UserService
+
 
+
INVALID_QUANTITY - Static variable in class diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation
+
 
+
INVALID_SHELTER_ID_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
 
+
INVALID_SHELTER_NAME_ERROR_MESSAGE - Static variable in class diegosneves.github.conectardoacoes.core.service.ShelterService
+
 
+
INVALID_UUID_FORMAT_MESSAGE - Enum constant in enum class diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails
+
 
+
INVALID_UUID_FORMAT_MESSAGE - Enum constant in enum class diegosneves.github.conectardoacoes.core.enums.ExceptionDetails
+
 
+
isValidUUID(String) - Static method in class diegosneves.github.conectardoacoes.core.utils.UuidUtils
+
+
Valida um UUID.
+
+
+A B C D E F G H I M N O P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+
+
+ + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..9f9986f --- /dev/null +++ b/docs/index.html @@ -0,0 +1,118 @@ + + + + +Overview + + + + + + + + + + + + + + + +
+ +
+
+
+
Packages
+
+
Package
+
Description
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+ +
 
+
+
+
+
+
+ + diff --git a/docs/jquery-ui.overrides.css b/docs/jquery-ui.overrides.css new file mode 100644 index 0000000..facf852 --- /dev/null +++ b/docs/jquery-ui.overrides.css @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; + border: 1px solid #F8981D; +} diff --git a/docs/legal/ADDITIONAL_LICENSE_INFO b/docs/legal/ADDITIONAL_LICENSE_INFO new file mode 100644 index 0000000..ff700cd --- /dev/null +++ b/docs/legal/ADDITIONAL_LICENSE_INFO @@ -0,0 +1,37 @@ + ADDITIONAL INFORMATION ABOUT LICENSING + +Certain files distributed by Oracle America, Inc. and/or its affiliates are +subject to the following clarification and special exception to the GPLv2, +based on the GNU Project exception for its Classpath libraries, known as the +GNU Classpath Exception. + +Note that Oracle includes multiple, independent programs in this software +package. Some of those programs are provided under licenses deemed +incompatible with the GPLv2 by the Free Software Foundation and others. +For example, the package includes programs licensed under the Apache +License, Version 2.0 and may include FreeType. Such programs are licensed +to you under their original licenses. + +Oracle facilitates your further distribution of this package by adding the +Classpath Exception to the necessary parts of its GPLv2 code, which permits +you to use that code in combination with other independent modules not +licensed under the GPLv2. However, note that this would not permit you to +commingle code under an incompatible license with Oracle's GPLv2 licensed +code by, for example, cutting and pasting such code into a file also +containing Oracle's GPLv2 licensed code and then distributing the result. + +Additionally, if you were to remove the Classpath Exception from any of the +files to which it applies and distribute the result, you would likely be +required to license some or all of the other code in that distribution under +the GPLv2 as well, and since the GPLv2 is incompatible with the license terms +of some items included in the distribution by Oracle, removing the Classpath +Exception could therefore effectively compromise your ability to further +distribute the package. + +Failing to distribute notices associated with some files may also create +unexpected legal consequences. + +Proceed with caution and we recommend that you obtain the advice of a lawyer +skilled in open source matters before removing the Classpath Exception or +making modifications to this package which may subsequently be redistributed +and/or involve the use of third party software. diff --git a/docs/legal/ASSEMBLY_EXCEPTION b/docs/legal/ASSEMBLY_EXCEPTION new file mode 100644 index 0000000..065b8d9 --- /dev/null +++ b/docs/legal/ASSEMBLY_EXCEPTION @@ -0,0 +1,27 @@ + +OPENJDK ASSEMBLY EXCEPTION + +The OpenJDK source code made available by Oracle America, Inc. (Oracle) at +openjdk.java.net ("OpenJDK Code") is distributed under the terms of the GNU +General Public License version 2 +only ("GPL2"), with the following clarification and special exception. + + Linking this OpenJDK Code statically or dynamically with other code + is making a combined work based on this library. Thus, the terms + and conditions of GPL2 cover the whole combination. + + As a special exception, Oracle gives you permission to link this + OpenJDK Code with certain code licensed by Oracle as indicated at + http://openjdk.java.net/legal/exception-modules-2007-05-08.html + ("Designated Exception Modules") to produce an executable, + regardless of the license terms of the Designated Exception Modules, + and to copy and distribute the resulting executable under GPL2, + provided that the Designated Exception Modules continue to be + governed by the licenses under which they were offered by Oracle. + +As such, it allows licensees and sublicensees of Oracle's GPL2 OpenJDK Code +to build an executable that includes those portions of necessary code that +Oracle could not provide under GPL2 (or that Oracle has provided under GPL2 +with the Classpath exception). If you modify or add to the OpenJDK code, +that new GPL2 code may still be combined with Designated Exception Modules +if the new code is made subject to this exception by its copyright holder. diff --git a/docs/legal/LICENSE b/docs/legal/LICENSE new file mode 100644 index 0000000..8b400c7 --- /dev/null +++ b/docs/legal/LICENSE @@ -0,0 +1,347 @@ +The GNU General Public License (GPL) + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public License is intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. This General Public License applies to +most of the Free Software Foundation's software and to any other program whose +authors commit to using it. (Some other Free Software Foundation software is +covered by the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom to +distribute copies of free software (and charge for this service if you wish), +that you receive source code or can get it if you want it, that you can change +the software or use pieces of it in new free programs; and that you know you +can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny +you these rights or to ask you to surrender the rights. These restrictions +translate to certain responsibilities for you if you distribute copies of the +software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for +a fee, you must give the recipients all the rights that you have. You must +make sure that they, too, receive or can get the source code. And you must +show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, distribute +and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If the +software is modified by someone else and passed on, we want its recipients to +know that what they have is not the original, so that any problems introduced +by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program proprietary. +To prevent this, we have made it clear that any patent must be licensed for +everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms of +this General Public License. The "Program", below, refers to any such program +or work, and a "work based on the Program" means either the Program or any +derivative work under copyright law: that is to say, a work containing the +Program or a portion of it, either verbatim or with modifications and/or +translated into another language. (Hereinafter, translation is included +without limitation in the term "modification".) Each licensee is addressed as +"you". + +Activities other than copying, distribution and modification are not covered by +this License; they are outside its scope. The act of running the Program is +not restricted, and the output from the Program is covered only if its contents +constitute a work based on the Program (independent of having been made by +running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as +you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and give any other recipients of the +Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may +at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus +forming a work based on the Program, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all of +these conditions: + + a) You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in whole or + in part contains or is derived from the Program or any part thereof, to be + licensed as a whole at no charge to all third parties under the terms of + this License. + + c) If the modified program normally reads commands interactively when run, + you must cause it, when started running for such interactive use in the + most ordinary way, to print or display an announcement including an + appropriate copyright notice and a notice that there is no warranty (or + else, saying that you provide a warranty) and that users may redistribute + the program under these conditions, and telling the user how to view a copy + of this License. (Exception: if the Program itself is interactive but does + not normally print such an announcement, your work based on the Program is + not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be reasonably +considered independent and separate works in themselves, then this License, and +its terms, do not apply to those sections when you distribute them as separate +works. But when you distribute the same sections as part of a whole which is a +work based on the Program, the distribution of the whole must be on the terms +of this License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on +the Program. + +In addition, mere aggregation of another work not based on the Program with the +Program (or with a work based on the Program) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + +3. You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections 1 and +2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 above + on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three years, to + give any third party, for a charge no more than your cost of physically + performing source distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed only + for noncommercial distribution and only if you received the program in + object code or executable form with such an offer, in accord with + Subsection b above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all +the source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and installation +of the executable. However, as a special exception, the source code +distributed need not include anything that is normally distributed (in either +source or binary form) with the major components (compiler, kernel, and so on) +of the operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the source +code from the same place counts as distribution of the source code, even though +third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as +expressly provided under this License. Any attempt otherwise to copy, modify, +sublicense or distribute the Program is void, and will automatically terminate +your rights under this License. However, parties who have received copies, or +rights, from you under this License will not have their licenses terminated so +long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. +However, nothing else grants you permission to modify or distribute the Program +or its derivative works. These actions are prohibited by law if you do not +accept this License. Therefore, by modifying or distributing the Program (or +any work based on the Program), you indicate your acceptance of this License to +do so, and all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), +the recipient automatically receives a license from the original licensor to +copy, distribute or modify the Program subject to these terms and conditions. +You may not impose any further restrictions on the recipients' exercise of the +rights granted herein. You are not responsible for enforcing compliance by +third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), conditions +are imposed on you (whether by court order, agreement or otherwise) that +contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Program at all. +For example, if a patent license would not permit royalty-free redistribution +of the Program by all those who receive copies directly or indirectly through +you, then the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system, which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Program under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In +such case, this License incorporates the limitation as if written in the body +of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the +General Public License from time to time. Such new versions will be similar in +spirit to the present version, but may differ in detail to address new problems +or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any later +version", you have the option of following the terms and conditions either of +that version or of any later version published by the Free Software Foundation. +If the Program does not specify a version number of this License, you may +choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software Foundation, +write to the Free Software Foundation; we sometimes make exceptions for this. +Our decision will be guided by the two goals of preserving the free status of +all derivatives of our free software and of promoting the sharing and reuse of +software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE +PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA +BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER +OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach +them to the start of each source file to most effectively convey the exclusion +of warranty; and each file should have at least the "copyright" line and a +pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + + Copyright (C) + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it +starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes + with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free + software, and you are welcome to redistribute it under certain conditions; + type 'show c' for details. + +The hypothetical commands 'show w' and 'show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may be +called something other than 'show w' and 'show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the program, if necessary. Here +is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + 'Gnomovision' (which makes passes at compilers) written by James Hacker. + + signature of Ty Coon, 1 April 1989 + + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General Public +License instead of this License. + + +"CLASSPATH" EXCEPTION TO THE GPL + +Certain source files distributed by Oracle America and/or its affiliates are +subject to the following clarification and special exception to the GPL, but +only where Oracle has expressly included in the particular source file's header +the words "Oracle designates this particular file as subject to the "Classpath" +exception as provided by Oracle in the LICENSE file that accompanied this code." + + Linking this library statically or dynamically with other modules is making + a combined work based on this library. Thus, the terms and conditions of + the GNU General Public License cover the whole combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules, + and to copy and distribute the resulting executable under terms of your + choice, provided that you also meet, for each linked independent module, + the terms and conditions of the license of that module. An independent + module is a module which is not derived from or based on this library. If + you modify this library, you may extend this exception to your version of + the library, but you are not obligated to do so. If you do not wish to do + so, delete this exception statement from your version. diff --git a/docs/legal/jquery.md b/docs/legal/jquery.md new file mode 100644 index 0000000..d468b31 --- /dev/null +++ b/docs/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.6.1 + +### jQuery License +``` +jQuery v 3.6.1 +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.6.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/legal/jqueryUI.md b/docs/legal/jqueryUI.md new file mode 100644 index 0000000..8bda9d7 --- /dev/null +++ b/docs/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.13.2 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/member-search-index.js b/docs/member-search-index.js new file mode 100644 index 0000000..0e59125 --- /dev/null +++ b/docs/member-search-index.js @@ -0,0 +1 @@ +memberSearchIndex = [{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"addDonation(Donation)","u":"addDonation(diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"addDonation(Donation)","u":"addDonation(diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"addDonation(String, Donation)","u":"addDonation(java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterServiceContract","l":"addDonation(String, Donation)","u":"addDonation(java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"AddressEntityMapper","l":"ADDRESS_CLASS"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"ADDRESS_CREATION_ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"ShelterEntityServiceImpl","l":"ADDRESS_CREATION_ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"AddressMapper","l":"ADDRESS_ENTITY_TYPE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"ADDRESS_OPERATION_FAILURE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"ADDRESS_REQUIRED_ERROR"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"Address(String, String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"AddressCreationFailureException","l":"AddressCreationFailureException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"AddressCreationFailureException","l":"AddressCreationFailureException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"AddressDTO","l":"AddressDTO()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","c":"AddressEntity","l":"AddressEntity()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"AddressEntityFailuresException","l":"AddressEntityFailuresException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"AddressEntityFailuresException","l":"AddressEntityFailuresException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"AddressEntityMapper","l":"AddressEntityMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"AddressMapper","l":"AddressMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"UserProfileType","l":"BENEFICIARY"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity.value","c":"UserProfile","l":"BENEFICIARY"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"buildMessage(String)","u":"buildMessage(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"CEP_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"changeAddress(Address)","u":"changeAddress(diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"changeAddress(Address)","u":"changeAddress(diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"changeAddress(String, Address)","u":"changeAddress(java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterServiceContract","l":"changeAddress(String, Address)","u":"changeAddress(java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"changePassword(String, String)","u":"changePassword(java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserServiceContract","l":"changePassword(String, String)","u":"changePassword(java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"changeShelterName(String)","u":"changeShelterName(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"changeShelterName(String)","u":"changeShelterName(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"changeShelterName(String, String)","u":"changeShelterName(java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterServiceContract","l":"changeShelterName(String, String)","u":"changeShelterName(java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"changeUserName(String)","u":"changeUserName(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"UserContract","l":"changeUserName(String)","u":"changeUserName(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"changeUserName(String, String)","u":"changeUserName(java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserServiceContract","l":"changeUserName(String, String)","u":"changeUserName(java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"changeUserPassword(String)","u":"changeUserPassword(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"UserContract","l":"changeUserPassword(String)","u":"changeUserPassword(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"CITY_NAME_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"CLASS_MAPPING_FAILURE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest","c":"ConectarDoacoesApplication","l":"ConectarDoacoesApplication()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"CONSTRUCTOR_DEFAULT_UNDEFINED"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"ConstructorDefaultUndefinedException","l":"ConstructorDefaultUndefinedException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"ConstructorDefaultUndefinedException","l":"ConstructorDefaultUndefinedException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","c":"ControllerExceptionHandler","l":"ControllerExceptionHandler()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","c":"CorsConfig","l":"CorsConfig()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","c":"CorsConfig","l":"corsFilter()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.factory","c":"ShelterFactory","l":"create(String, Address, UserContract)","u":"create(java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address,diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.factory","c":"AddressFactory","l":"create(String, String, String, String, String, String)","u":"create(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.factory","c":"UserFactory","l":"create(String, String, UserProfile, String)","u":"create(java.lang.String,java.lang.String,diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.factory","c":"DonationFactory","l":"created(String, Integer)","u":"created(java.lang.String,java.lang.Integer)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller.imp","c":"ShelterControllerImpl","l":"createShelter(ShelterCreationRequest)","u":"createShelter(diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller","c":"ShelterController","l":"createShelter(ShelterCreationRequest)","u":"createShelter(diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"ShelterEntityServiceImpl","l":"createShelter(ShelterCreationRequest)","u":"createShelter(diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service","c":"ShelterEntityService","l":"createShelter(ShelterCreationRequest)","u":"createShelter(diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"createShelter(String, Address, UserContract)","u":"createShelter(java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address,diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterServiceContract","l":"createShelter(String, Address, UserContract)","u":"createShelter(java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address,diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"createUser(String, String, UserProfile, String)","u":"createUser(java.lang.String,java.lang.String,diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserServiceContract","l":"createUser(String, String, UserProfile, String)","u":"createUser(java.lang.String,java.lang.String,diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller.imp","c":"UserControllerImpl","l":"createUser(UserEntityCreationRequest)","u":"createUser(diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller","c":"UserController","l":"createUser(UserEntityCreationRequest)","u":"createUser(diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"createUserEntity(UserEntityCreationRequest)","u":"createUserEntity(diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service","c":"UserEntityService","l":"createUserEntity(UserEntityCreationRequest)","u":"createUserEntity(diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","c":"OpenApiConfig","l":"customOpenAPI()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Donation","l":"DEFAULT_DONATION_AMOUNT"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"ShelterRepository","l":"deleteEntityById(String)","u":"deleteEntityById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"UserRepository","l":"deleteEntityById(String)","u":"deleteEntityById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.repository","c":"RepositoryContract","l":"deleteEntityById(String)","u":"deleteEntityById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"DonationEntityMapper","l":"DONATION_CLASS"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"DONATION_CREATION_ERROR"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"DONATION_REQUIRED_ERROR"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"DONATION_REQUIRED_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Donation","l":"Donation(String, String, Integer)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.Integer)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","c":"DonationEntity","l":"DonationEntity()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"DonationEntityMapper","l":"DonationEntityMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"DonationMapper","l":"DonationMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"DonationRegisterFailureException","l":"DonationRegisterFailureException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"DonationRegisterFailureException","l":"DonationRegisterFailureException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"UserProfileType","l":"DONOR"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity.value","c":"UserProfile","l":"DONOR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"EMAIL_ALREADY_IN_USE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"EMAIL_NOT_FOUND_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"EMAIL_NOT_PROVIDED"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"ExceptionDTO","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"AddressEntityFailuresException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"ConstructorDefaultUndefinedException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"MapperFailureException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"ShelterEntityFailuresException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"UserEntityFailuresException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"AddressCreationFailureException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"DonationRegisterFailureException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ShelterCreationFailureException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ShelterServiceFailureException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UserCreationFailureException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UserServiceFailureException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UuidUtilsException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ValidationUtilsException","l":"ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"ShelterEntityServiceImpl","l":"ERROR_MAPPING_ADDRESS"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"ERROR_MESSAGE_ADDRESS_NULL"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"EXCEPTION_TYPE_NOT_THROWN"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"ExceptionDTO","l":"ExceptionDTO(String, int)","u":"%3Cinit%3E(java.lang.String,int)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"UserRepository","l":"findByEmail(String)","u":"findByEmail(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"AddressRepository","l":"findById(String)","u":"findById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"DonationRepository","l":"findById(String)","u":"findById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"ShelterRepository","l":"findEntityById(String)","u":"findEntityById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"UserRepository","l":"findEntityById(String)","u":"findEntityById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.repository","c":"RepositoryContract","l":"findEntityById(String)","u":"findEntityById(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"formatErrorMessage(String)","u":"formatErrorMessage(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.utils","c":"UuidUtils","l":"generateUuid()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"getAddress()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"getAddress()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"getDonations()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"getDonations()"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"getDonations(String)","u":"getDonations(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterServiceContract","l":"getDonations(String)","u":"getDonations(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"getEmail()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"UserContract","l":"getEmail()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"getHttpStatusCode()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"getId()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"getId()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"getId()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"UserContract","l":"getId()"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"getShelter(String)","u":"getShelter(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterServiceContract","l":"getShelter(String)","u":"getShelter(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"getShelterName()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"getShelterName()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"getStatusCodeValue()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"getUser()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"ShelterContract","l":"getUser()"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"getUser(String)","u":"getUser(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserServiceContract","l":"getUser(String)","u":"getUser(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"getUsername()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"UserContract","l":"getUsername()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"getUserPassword()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"UserContract","l":"getUserPassword()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"getUserProfile()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"UserContract","l":"getUserProfile()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","c":"ControllerExceptionHandler","l":"handleAddressEntityFailures(AddressEntityFailuresException)","u":"handleAddressEntityFailures(diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","c":"ControllerExceptionHandler","l":"handleFailures(Exception)","u":"handleFailures(java.lang.Exception)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","c":"ControllerExceptionHandler","l":"handleMapperFailures(ConstructorDefaultUndefinedException)","u":"handleMapperFailures(diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","c":"ControllerExceptionHandler","l":"handleMapperFailures(MapperFailureException)","u":"handleMapperFailures(diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","c":"ControllerExceptionHandler","l":"handleShelterEntityFailures(ShelterEntityFailuresException)","u":"handleShelterEntityFailures(diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","c":"ControllerExceptionHandler","l":"handleUserEntityFailures(UserEntityFailuresException)","u":"handleUserEntityFailures(diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"ExceptionDTO","l":"hashCode()"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"ID_VALIDATION_FAILURE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Donation","l":"INVALID_DESCRIPTION_ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"INVALID_EMAIL_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"ShelterRepository","l":"INVALID_ID_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"INVALID_ID_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Donation","l":"INVALID_ID_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"INVALID_IDENTIFIER_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"INVALID_NEW_PASSWORD_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Donation","l":"INVALID_QUANTITY"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"INVALID_SHELTER_ID_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"INVALID_SHELTER_NAME_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"INVALID_UUID_FORMAT_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"INVALID_UUID_FORMAT_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.utils","c":"UuidUtils","l":"isValidUUID(String)","u":"isValidUUID(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest","c":"ConectarDoacoesApplication","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"AddressEntityMapper","l":"mapFrom(Address)","u":"mapFrom(diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"AddressMapper","l":"mapFrom(AddressEntity)","u":"mapFrom(diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"DonationEntityMapper","l":"mapFrom(Donation)","u":"mapFrom(diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"DonationMapper","l":"mapFrom(DonationEntity)","u":"mapFrom(diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"MapperStrategy","l":"mapFrom(E)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"ShelterEntityMapper","l":"mapFrom(ShelterContract)","u":"mapFrom(diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"ShelterMapper","l":"mapFrom(ShelterEntity)","u":"mapFrom(diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"UserEntityMapper","l":"mapFrom(UserContract)","u":"mapFrom(diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"UserMapper","l":"mapFrom(UserEntity)","u":"mapFrom(diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"MapperFailureException","l":"MapperFailureException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"BuilderMapper","l":"mapTo(Class, Object)","u":"mapTo(java.lang.Class,java.lang.Object)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"BuilderMapper","l":"mapTo(MapperStrategy, E)","u":"mapTo(diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy,E)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"ExceptionDTO","l":"message()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"NEIGHBORHOOD_NAME_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","c":"OpenApiConfig","l":"OpenApiConfig()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"PASSWORD_NOT_PROVIDED"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"ShelterRepository","l":"persist(ShelterContract)","u":"persist(diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract)"},{"p":"diegosneves.github.conectardoacoes.core.repository","c":"RepositoryContract","l":"persist(T)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"UserRepository","l":"persist(UserContract)","u":"persist(diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"PROFILE_NOT_PROVIDED"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"UserRepository","l":"REQUIRED_USER_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"RESIDENCE_NUMBER_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"RESPONSIBLE_REQUIRED_ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"ShelterRepository","l":"retrieveAll()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"UserRepository","l":"retrieveAll()"},{"p":"diegosneves.github.conectardoacoes.core.repository","c":"RepositoryContract","l":"retrieveAll()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"searchUserByEmail(String)","u":"searchUserByEmail(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service","c":"UserEntityService","l":"searchUserByEmail(String)","u":"searchUserByEmail(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","c":"WebSecurityConfig","l":"securityFilterChain(HttpSecurity)","u":"securityFilterChain(org.springframework.security.config.annotation.web.builders.HttpSecurity)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"ShelterEntityMapper","l":"SHELTER_CLASS"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"SHELTER_CREATION_ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"ShelterEntityServiceImpl","l":"SHELTER_CREATION_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"ShelterMapper","l":"SHELTER_ENTITY_CLASS"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"ShelterRepository","l":"SHELTER_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"SHELTER_MANIPULATION_ERROR"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"SHELTER_NAME_REQUIRED_ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"SHELTER_OPERATION_FAILURE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","c":"Shelter","l":"Shelter(String, String, Address, UserContract)","u":"%3Cinit%3E(java.lang.String,java.lang.String,diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address,diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller.imp","c":"ShelterControllerImpl","l":"ShelterControllerImpl(ShelterEntityService)","u":"%3Cinit%3E(diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.response","c":"ShelterCreatedResponse","l":"ShelterCreatedResponse()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ShelterCreationFailureException","l":"ShelterCreationFailureException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ShelterCreationFailureException","l":"ShelterCreationFailureException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.request","c":"ShelterCreationRequest","l":"ShelterCreationRequest()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","c":"ShelterEntity","l":"ShelterEntity()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"ShelterEntityFailuresException","l":"ShelterEntityFailuresException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"ShelterEntityFailuresException","l":"ShelterEntityFailuresException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"ShelterEntityMapper","l":"ShelterEntityMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"ShelterEntityServiceImpl","l":"ShelterEntityServiceImpl(ShelterRepository, DonationRepository, AddressRepository, UserEntityService)","u":"%3Cinit%3E(diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository,diegosneves.github.conectardoacoes.adapters.rest.repository.DonationRepository,diegosneves.github.conectardoacoes.adapters.rest.repository.AddressRepository,diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"ShelterMapper","l":"ShelterMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"ShelterService","l":"ShelterService(ShelterContractRepository)","u":"%3Cinit%3E(diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ShelterServiceFailureException","l":"ShelterServiceFailureException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ShelterServiceFailureException","l":"ShelterServiceFailureException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"BuilderMapper","l":"SOURCE_OBJECT_NULL_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"STATE_NAME_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"ExceptionDTO","l":"statusCode()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"BuilderMapper","l":"STRATEGY_CANNOT_BE_NULL"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","c":"Address","l":"STREET_NAME_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"ExceptionDTO","l":"toString()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity.value","c":"UserProfile","l":"toString()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"UserEntityMapper","l":"USER_CLASS"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"USER_CREATION_ERROR"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"USER_CREATION_FAILURE_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"UserMapper","l":"USER_ENTITY_CLASS"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","c":"UserRepository","l":"USER_ID_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"USER_ID_REQUIRED"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"USER_MANIPULATION_ERROR"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"USER_NOT_FOUND_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"USER_OPERATION_FAILURE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"USER_PROFILE_VALIDATION_FAILURE"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"ShelterEntityServiceImpl","l":"USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"User(String, String, String, UserProfile, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile,java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller.imp","c":"UserControllerImpl","l":"UserControllerImpl(UserEntityService)","u":"%3Cinit%3E(diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UserCreationFailureException","l":"UserCreationFailureException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UserCreationFailureException","l":"UserCreationFailureException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","c":"UserEntity","l":"UserEntity()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.response","c":"UserEntityCreatedResponse","l":"UserEntityCreatedResponse()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.request","c":"UserEntityCreationRequest","l":"UserEntityCreationRequest()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","c":"UserEntityDTO","l":"UserEntityDTO()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"UserEntityFailuresException","l":"UserEntityFailuresException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","c":"UserEntityFailuresException","l":"UserEntityFailuresException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"UserEntityMapper","l":"UserEntityMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","c":"UserEntityServiceImpl","l":"UserEntityServiceImpl(UserRepository)","u":"%3Cinit%3E(diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","c":"UserMapper","l":"UserMapper()","u":"%3Cinit%3E()"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"USERNAME_INVALID_ERROR_MESSAGE"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","c":"User","l":"USERNAME_REQUIRED"},{"p":"diegosneves.github.conectardoacoes.core.service","c":"UserService","l":"UserService(UserContractRepository)","u":"%3Cinit%3E(diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UserServiceFailureException","l":"UserServiceFailureException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UserServiceFailureException","l":"UserServiceFailureException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.core.utils","c":"UuidUtils","l":"UUID_REQUIRED"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"UuidUtilsException","l":"UuidUtilsException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.utils","c":"ValidationUtils","l":"validateNotNullOrEmpty(T, String, Class)","u":"validateNotNullOrEmpty(T,java.lang.String,java.lang.Class)"},{"p":"diegosneves.github.conectardoacoes.core.exception","c":"ValidationUtilsException","l":"ValidationUtilsException(String, Throwable)","u":"%3Cinit%3E(java.lang.String,java.lang.Throwable)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"UserProfileType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity.value","c":"UserProfile","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"ExceptionDetails","l":"values()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","c":"UserProfileType","l":"values()"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity.value","c":"UserProfile","l":"values()"},{"p":"diegosneves.github.conectardoacoes.core.enums","c":"ExceptionDetails","l":"values()"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","c":"WebSecurityConfig","l":"WebSecurityConfig()","u":"%3Cinit%3E()"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/module-search-index.js b/docs/module-search-index.js new file mode 100644 index 0000000..0d59754 --- /dev/null +++ b/docs/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/overview-summary.html b/docs/overview-summary.html new file mode 100644 index 0000000..2063f7a --- /dev/null +++ b/docs/overview-summary.html @@ -0,0 +1,26 @@ + + + + +Generated Documentation (Untitled) + + + + + + + + + + + +
+ +

index.html

+
+ + diff --git a/docs/overview-tree.html b/docs/overview-tree.html new file mode 100644 index 0000000..b8dfa1b --- /dev/null +++ b/docs/overview-tree.html @@ -0,0 +1,225 @@ + + + + +Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+
    +
  • diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy<T,E>
  • +
  • org.springframework.data.repository.Repository<T,ID> +
      +
    • org.springframework.data.repository.CrudRepository<T,ID> + +
    • +
    +
  • +
  • diegosneves.github.conectardoacoes.core.repository.RepositoryContract<T> +
      +
    • diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository +
        +
      • diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository (also extends org.springframework.data.repository.CrudRepository<T,ID>)
      • +
      +
    • +
    • diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository +
        +
      • diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository (also extends org.springframework.data.repository.CrudRepository<T,ID>)
      • +
      +
    • +
    +
  • +
  • diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract
  • +
  • diegosneves.github.conectardoacoes.adapters.rest.controller.ShelterController
  • +
  • diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService
  • +
  • diegosneves.github.conectardoacoes.core.service.ShelterServiceContract
  • +
  • diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract
  • +
  • diegosneves.github.conectardoacoes.adapters.rest.controller.UserController
  • +
  • diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService
  • +
  • diegosneves.github.conectardoacoes.core.service.UserServiceContract
  • +
+
+
+

Enum Class Hierarchy

+ +
+
+
+
+ + diff --git a/docs/package-search-index.js b/docs/package-search-index.js new file mode 100644 index 0000000..c21e5c1 --- /dev/null +++ b/docs/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"diegosneves.github.conectardoacoes.adapters.rest"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.config.handler"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.config.web"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.controller"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.controller.imp"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.dto"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.enums"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.exception"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.mapper"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.model"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.repository"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.request"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.response"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.service"},{"l":"diegosneves.github.conectardoacoes.adapters.rest.service.impl"},{"l":"diegosneves.github.conectardoacoes.core.domain.shelter.entity"},{"l":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value"},{"l":"diegosneves.github.conectardoacoes.core.domain.shelter.factory"},{"l":"diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository"},{"l":"diegosneves.github.conectardoacoes.core.domain.user.entity"},{"l":"diegosneves.github.conectardoacoes.core.domain.user.entity.value"},{"l":"diegosneves.github.conectardoacoes.core.domain.user.factory"},{"l":"diegosneves.github.conectardoacoes.core.domain.user.shared.repository"},{"l":"diegosneves.github.conectardoacoes.core.enums"},{"l":"diegosneves.github.conectardoacoes.core.exception"},{"l":"diegosneves.github.conectardoacoes.core.repository"},{"l":"diegosneves.github.conectardoacoes.core.service"},{"l":"diegosneves.github.conectardoacoes.core.utils"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/resources/glass.png b/docs/resources/glass.png new file mode 100644 index 0000000..a7f591f Binary files /dev/null and b/docs/resources/glass.png differ diff --git a/docs/resources/x.png b/docs/resources/x.png new file mode 100644 index 0000000..30548a7 Binary files /dev/null and b/docs/resources/x.png differ diff --git a/docs/script-dir/jquery-3.6.1.min.js b/docs/script-dir/jquery-3.6.1.min.js new file mode 100644 index 0000000..2c69bc9 --- /dev/null +++ b/docs/script-dir/jquery-3.6.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthC(E(s),E(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})},x.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,l=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(x.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],x.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("
    ").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){x(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("
    ").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==x.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=x("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||x.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?x(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(x.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=x.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(x("
    ").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),x.extend(x.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(x.ui.autocomplete.escapeRegex(e),"i");return x.grep(t,function(t){return i.test(t.label||t.value||t)})}}),x.widget("ui.autocomplete",x.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e))},100))}});x.ui.autocomplete}); \ No newline at end of file diff --git a/docs/script.js b/docs/script.js new file mode 100644 index 0000000..864989c --- /dev/null +++ b/docs/script.js @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'search.js'); + + createElem(doc, tag, 'module-search-index.js'); + createElem(doc, tag, 'package-search-index.js'); + createElem(doc, tag, 'type-search-index.js'); + createElem(doc, tag, 'member-search-index.js'); + createElem(doc, tag, 'tag-search-index.js'); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(tableId, selected, columns) { + if (tableId !== selected) { + document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') + .forEach(function(elem) { + elem.style.display = 'none'; + }); + } + document.querySelectorAll('div.' + selected) + .forEach(function(elem, index) { + elem.style.display = ''; + var isEvenRow = index % (columns * 2) < columns; + elem.classList.remove(isEvenRow ? oddRowColor : evenRowColor); + elem.classList.add(isEvenRow ? evenRowColor : oddRowColor); + }); + updateTabs(tableId, selected); +} + +function updateTabs(tableId, selected) { + document.querySelector('div#' + tableId +' .summary-table') + .setAttribute('aria-labelledby', selected); + document.querySelectorAll('button[id^="' + tableId + '"]') + .forEach(function(tab, index) { + if (selected === tab.id || (tableId === selected && index === 0)) { + tab.className = activeTableTab; + tab.setAttribute('aria-selected', true); + tab.setAttribute('tabindex',0); + } else { + tab.className = tableTab; + tab.setAttribute('aria-selected', false); + tab.setAttribute('tabindex',-1); + } + }); +} + +function switchTab(e) { + var selected = document.querySelector('[aria-selected=true]'); + if (selected) { + if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { + // left or up arrow key pressed: move focus to previous tab + selected.previousSibling.click(); + selected.previousSibling.focus(); + e.preventDefault(); + } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { + // right or down arrow key pressed: move focus to next tab + selected.nextSibling.click(); + selected.nextSibling.focus(); + e.preventDefault(); + } + } +} + +var updateSearchResults = function() {}; + +function indexFilesLoaded() { + return moduleSearchIndex + && packageSearchIndex + && typeSearchIndex + && memberSearchIndex + && tagSearchIndex; +} + +// Workaround for scroll position not being included in browser history (8249133) +document.addEventListener("DOMContentLoaded", function(e) { + var contentDiv = document.querySelector("div.flex-content"); + window.addEventListener("popstate", function(e) { + if (e.state !== null) { + contentDiv.scrollTop = e.state; + } + }); + window.addEventListener("hashchange", function(e) { + history.replaceState(contentDiv.scrollTop, document.title); + }); + contentDiv.addEventListener("scroll", function(e) { + var timeoutID; + if (!timeoutID) { + timeoutID = setTimeout(function() { + history.replaceState(contentDiv.scrollTop, document.title); + timeoutID = null; + }, 100); + } + }); + if (!location.hash) { + history.replaceState(contentDiv.scrollTop, document.title); + } +}); diff --git a/docs/search.js b/docs/search.js new file mode 100644 index 0000000..db3b2f4 --- /dev/null +++ b/docs/search.js @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var noResult = {l: "No results found"}; +var loading = {l: "Loading search index..."}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Classes and Interfaces"; +var catMembers = "Members"; +var catSearchTags = "Search Tags"; +var highlight = "$&"; +var searchPattern = ""; +var fallbackPattern = ""; +var RANKING_THRESHOLD = 2; +var NO_MATCH = 0xffff; +var MIN_RESULTS = 3; +var MAX_RESULTS = 500; +var UNNAMED = ""; +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(item, matcher, fallbackMatcher) { + var escapedItem = escapeHtml(item); + var highlighted = escapedItem.replace(matcher, highlight); + if (highlighted === escapedItem) { + highlighted = escapedItem.replace(fallbackMatcher, highlight) + } + return highlighted; +} +function getURLPrefix(ui) { + var urlPrefix=""; + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if (ui.item.category === catTypes || ui.item.category === catMembers) { + if (ui.item.m) { + urlPrefix = ui.item.m + slash; + } else { + $.each(packageSearchIndex, function(index, item) { + if (item.m && ui.item.p === item.l) { + urlPrefix = item.m + slash; + } + }); + } + } + return urlPrefix; +} +function createSearchPattern(term) { + var pattern = ""; + var isWordToken = false; + term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) { + if (index > 0) { + // whitespace between identifiers is significant + pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*"; + } + var tokens = w.split(/(?=[A-Z,.()<>[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + if (s === "") { + continue; + } + pattern += $.ui.autocomplete.escapeRegex(s); + isWordToken = /\w$/.test(s); + if (isWordToken) { + pattern += "([a-z0-9_$<>\\[\\]]*?)"; + } + } + }); + return pattern; +} +function createMatcher(pattern, flags) { + var isCamelCase = /[A-Z]/.test(pattern); + return new RegExp(pattern, flags + (isCamelCase ? "" : "i")); +} +var watermark = 'Search'; +$(function() { + var search = $("#search-input"); + var reset = $("#reset-button"); + search.val(''); + search.prop("disabled", false); + reset.prop("disabled", false); + search.val(watermark).addClass('watermark'); + search.blur(function() { + if ($(this).val().length === 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + search.on('click keydown paste', function() { + if ($(this).val() === watermark) { + $(this).val('').removeClass('watermark'); + } + }); + reset.click(function() { + search.val('').focus(); + }); + search.focus()[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this; + var currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.category && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "result-item"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "result-item"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + var matcher = createMatcher(escapeHtml(searchPattern), "g"); + var fallbackMatcher = new RegExp(fallbackPattern, "gi") + if (item.category === catModules) { + label = getHighlightedText(item.l, matcher, fallbackMatcher); + } else if (item.category === catPackages) { + label = getHighlightedText(item.l, matcher, fallbackMatcher); + } else if (item.category === catTypes) { + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.l, matcher, fallbackMatcher) + : getHighlightedText(item.l, matcher, fallbackMatcher); + } else if (item.category === catMembers) { + label = (item.p && item.p !== UNNAMED) + ? getHighlightedText(item.p + "." + item.c + "." + item.l, matcher, fallbackMatcher) + : getHighlightedText(item.c + "." + item.l, matcher, fallbackMatcher); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l, matcher, fallbackMatcher); + } else { + label = item.l; + } + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + if (item.category === catSearchTags && item.h) { + if (item.d) { + div.html(label + " (" + item.h + ")
    " + + item.d + "
    "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + if (item.m) { + div.html(item.m + "/" + label); + } else { + div.html(label); + } + } + return li; + } +}); +function rankMatch(match, category) { + if (!match) { + return NO_MATCH; + } + var index = match.index; + var input = match.input; + var leftBoundaryMatch = 2; + var periferalMatch = 0; + // make sure match is anchored on a left word boundary + if (index === 0 || /\W/.test(input[index - 1]) || "_" === input[index]) { + leftBoundaryMatch = 0; + } else if ("_" === input[index - 1] || (input[index] === input[index].toUpperCase() && !/^[A-Z0-9_$]+$/.test(input))) { + leftBoundaryMatch = 1; + } + var matchEnd = index + match[0].length; + var leftParen = input.indexOf("("); + var endOfName = leftParen > -1 ? leftParen : input.length; + // exclude peripheral matches + if (category !== catModules && category !== catSearchTags) { + var delim = category === catPackages ? "/" : "."; + if (leftParen > -1 && leftParen < index) { + periferalMatch += 2; + } else if (input.lastIndexOf(delim, endOfName) >= matchEnd) { + periferalMatch += 2; + } + } + var delta = match[0].length === endOfName ? 0 : 1; // rank full match higher than partial match + for (var i = 1; i < match.length; i++) { + // lower ranking if parts of the name are missing + if (match[i]) + delta += match[i].length; + } + if (category === catTypes) { + // lower ranking if a type name contains unmatched camel-case parts + if (/[A-Z]/.test(input.substring(matchEnd))) + delta += 5; + if (/[A-Z]/.test(input.substring(0, index))) + delta += 5; + } + return leftBoundaryMatch + periferalMatch + (delta / 200); + +} +function doSearch(request, response) { + var result = []; + searchPattern = createSearchPattern(request.term); + fallbackPattern = createSearchPattern(request.term.toLowerCase()); + if (searchPattern === "") { + return this.close(); + } + var camelCaseMatcher = createMatcher(searchPattern, ""); + var fallbackMatcher = new RegExp(fallbackPattern, "i"); + + function searchIndexWithMatcher(indexArray, matcher, category, nameFunc) { + if (indexArray) { + var newResults = []; + $.each(indexArray, function (i, item) { + item.category = category; + var ranking = rankMatch(matcher.exec(nameFunc(item)), category); + if (ranking < RANKING_THRESHOLD) { + newResults.push({ranking: ranking, item: item}); + } + return newResults.length <= MAX_RESULTS; + }); + return newResults.sort(function(e1, e2) { + return e1.ranking - e2.ranking; + }).map(function(e) { + return e.item; + }); + } + return []; + } + function searchIndex(indexArray, category, nameFunc) { + var primaryResults = searchIndexWithMatcher(indexArray, camelCaseMatcher, category, nameFunc); + result = result.concat(primaryResults); + if (primaryResults.length <= MIN_RESULTS && !camelCaseMatcher.ignoreCase) { + var secondaryResults = searchIndexWithMatcher(indexArray, fallbackMatcher, category, nameFunc); + result = result.concat(secondaryResults.filter(function (item) { + return primaryResults.indexOf(item) === -1; + })); + } + } + + searchIndex(moduleSearchIndex, catModules, function(item) { return item.l; }); + searchIndex(packageSearchIndex, catPackages, function(item) { + return (item.m && request.term.indexOf("/") > -1) + ? (item.m + "/" + item.l) : item.l; + }); + searchIndex(typeSearchIndex, catTypes, function(item) { + return request.term.indexOf(".") > -1 ? item.p + "." + item.l : item.l; + }); + searchIndex(memberSearchIndex, catMembers, function(item) { + return request.term.indexOf(".") > -1 + ? item.p + "." + item.c + "." + item.l : item.l; + }); + searchIndex(tagSearchIndex, catSearchTags, function(item) { return item.l; }); + + if (!indexFilesLoaded()) { + updateSearchResults = function() { + doSearch(request, response); + } + result.unshift(loading); + } else { + updateSearchResults = function() {}; + } + response(result); +} +$(function() { + $("#search-input").catcomplete({ + minLength: 1, + delay: 300, + source: doSearch, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search-input").empty(); + } + }, + autoFocus: true, + focus: function(event, ui) { + return false; + }, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.category) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + url += "module-summary.html"; + } else if (ui.item.category === catPackages) { + if (ui.item.u) { + url = ui.item.u; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.u) { + url = ui.item.u; + } else if (ui.item.p === UNNAMED) { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === UNNAMED) { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.u) { + url += ui.item.u; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search-input").focus(); + } + } + }); +}); diff --git a/docs/serialized-form.html b/docs/serialized-form.html new file mode 100644 index 0000000..91354cb --- /dev/null +++ b/docs/serialized-form.html @@ -0,0 +1,152 @@ + + + + +Serialized Form + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Serialized Form

    +
    + +
    +
    +
    + + diff --git a/docs/stylesheet.css b/docs/stylesheet.css new file mode 100644 index 0000000..4a576bd --- /dev/null +++ b/docs/stylesheet.css @@ -0,0 +1,869 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; +} +h4 { + font-size:15px; +} +h5 { + font-size:14px; +} +h6 { + font-size:13px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; +} +:not(h1, h2, h3, h4, h5, h6) > code, +:not(h1, h2, h3, h4, h5, h6) > tt { + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +.summary-table dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size: 14px; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0; + overflow:hidden; +} +.about-language { + float:right; + padding:0 21px 8px 8px; + font-size:11px; + margin-top:-9px; + height:2.9em; +} +.legal-copy { + margin-left:.5em; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +@media screen { + .flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + .flex-header { + flex: 0 0 auto; + } + .flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + min-height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.sub-nav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.sub-nav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list { + padding-top:5px; +} +ul.nav-list { + display:block; + margin:0 25px 0 0; + padding:0; +} +ul.sub-nav-list { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.nav-list li { + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list-search { + float:right; + margin:0 0 0 0; + padding:5px 6px; + clear:none; +} +.nav-list-search label { + position:relative; + right:-16px; +} +ul.sub-nav-list li { + list-style:none; + float:left; + padding-top:10px; +} +.top-nav a:link, .top-nav a:active, .top-nav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.top-nav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.nav-bar-cell1-rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skip-nav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Hide navigation links and search box in print layout + */ +@media print { + ul.nav-list, div.sub-nav { + display:none; + } +} +/* + * Styles for page header and footer. + */ +.title { + color:#2c4557; + margin:10px 0; +} +.sub-title { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; +} +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +/* + * Styles for page layout containers. + */ +main { + clear:both; + padding:10px 20px; + position:relative; +} +dl.notes > dt { + font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +dl.notes > dd { + margin:5px 10px 10px 0; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +dl.name-value > dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +dl.name-value > dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +div.inheritance { + margin:0; + padding:0; +} +div.inheritance div.inheritance { + margin-left:2em; +} +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { + margin:10px 0 10px 0; + padding:0; +} +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +.summary-table dl, .summary-table dl dt, .summary-table dl dd { + margin-top:0; + margin-bottom:1px; +} +ul.see-list, ul.see-list-long { + padding-left: 0; + list-style: none; +} +ul.see-list li { + display: inline; +} +ul.see-list li:not(:last-child):after, +ul.see-list-long li:not(:last-child):after { + content: ", "; + white-space: pre-wrap; +} +/* + * Styles for tables. + */ +.summary-table, .details-table { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; + padding:0; +} +.caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0; + padding-top:10px; + padding-left:1px; + margin:0; + white-space:pre; +} +.caption a:link, .caption a:visited { + color:#1f389c; +} +.caption a:hover, +.caption a:active { + color:#FFFFFF; +} +.caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +div.table-tabs { + padding:10px 0 0 1px; + margin:0; +} +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; +} +div.table-tabs > button.active-table-tab { + background: #F8981D; + color: #253441; +} +div.table-tabs > button.table-tab { + background: #4D7A97; + color: #FFFFFF; +} +.two-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); +} +.three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto); +} +.four-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto); +} +@media screen and (max-width: 600px) { + .two-column-summary { + display: grid; + grid-template-columns: 1fr; + } +} +@media screen and (max-width: 800px) { + .three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(25%, auto); + } + .three-column-summary .col-last { + grid-column-end: span 2; + } +} +@media screen and (max-width: 1000px) { + .four-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); + } +} +.summary-table > div, .details-table > div { + text-align:left; + padding: 8px 3px 3px 7px; +} +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { + vertical-align:top; + padding-right:0; + padding-top:8px; + padding-bottom:3px; +} +.table-header { + background:#dee3e9; + font-weight: bold; +} +.col-first, .col-first { + font-size:13px; +} +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { + font-size:13px; +} +.col-first, .col-second, .col-constructor-name { + vertical-align:top; + overflow: auto; +} +.col-last { + white-space:normal; +} +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-constructor-name a:link, .col-constructor-name a:visited, +.col-summary-item-name a:link, .col-summary-item-name a:visited, +.constant-values-container a:link, .constant-values-container a:visited, +.all-classes-container a:link, .all-classes-container a:visited, +.all-packages-container a:link, .all-packages-container a:visited { + font-weight:bold; +} +.table-sub-heading-color { + background-color:#EEEEFF; +} +.even-row-color, .even-row-color .table-header { + background-color:#FFFFFF; +} +.odd-row-color, .odd-row-color .table-header { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.deprecated-content { + margin:0; + padding:10px 0; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.col-last div { + padding-top:0; +} +.col-last a { + padding-bottom:3px; +} +.module-signature, +.package-signature, +.type-signature, +.member-signature { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + margin:14px 0; + white-space: pre-wrap; +} +.module-signature, +.package-signature, +.type-signature { + margin-top: 0; +} +.member-signature .type-parameters-long, +.member-signature .parameters, +.member-signature .exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +.member-signature .type-parameters { + white-space: normal; +} +/* + * Styles for formatting effect. + */ +.source-line-no { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:0 10px 5px 0; + color:#474747; +} +.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { + font-weight:bold; +} +.deprecation-comment, .help-footnote, .preview-comment { + font-style:italic; +} +.deprecation-block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +.preview-block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecation-comment { + font-style:normal; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.result-item { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; + background-color: #FFFFFF; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.result-highlight { + font-weight:bold; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +#search-input { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; + width:400px; +} +#reset-button { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:16px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.search-tag-desc-result { + font-style:italic; + font-size:11px; +} +.search-tag-holder-result { + font-style:italic; + font-size:12px; +} +.search-tag-result:target { + background-color:yellow; +} +.module-graph span { + display:none; + position:absolute; +} +.module-graph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.inherited-list { + margin: 10px 0 10px 0; +} +section.class-description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0px 20px 5px 10px; + border: 1px solid #ededed; + background-color: #f8f8f8; +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +ul.help-subtoc > li { + display: inline-block; + padding-right: 5px; + font-size: smaller; +} +ul.help-subtoc > li::before { + content: "\2022" ; + padding-right:2px; +} +span.help-note { + font-style: italic; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} +/** + * Tweak font sizes and paddings for small screens. + */ +@media screen and (max-width: 1050px) { + #search-input { + width: 300px; + } +} +@media screen and (max-width: 800px) { + #search-input { + width: 200px; + } + .top-nav, + .bottom-nav { + font-size: 11px; + padding-top: 6px; + } + .sub-nav { + font-size: 11px; + } + .about-language { + padding-right: 16px; + } + ul.nav-list li, + .sub-nav .nav-list-search { + padding: 6px; + } + ul.sub-nav-list li { + padding-top: 5px; + } + main { + padding: 10px; + } + .summary section[class$="-summary"], .details section[class$="-details"], + .class-uses .detail, .serialized-class-details { + padding: 0 8px 5px 8px; + } + body { + -webkit-text-size-adjust: none; + } +} +@media screen and (max-width: 500px) { + #search-input { + width: 150px; + } + .top-nav, + .bottom-nav { + font-size: 10px; + } + .sub-nav { + font-size: 10px; + } + .about-language { + font-size: 10px; + padding-right: 12px; + } +} diff --git a/docs/tag-search-index.js b/docs/tag-search-index.js new file mode 100644 index 0000000..bf10aaf --- /dev/null +++ b/docs/tag-search-index.js @@ -0,0 +1 @@ +tagSearchIndex = [{"l":"Constant Field Values","h":"","u":"constant-values.html"},{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/type-search-index.js b/docs/type-search-index.js new file mode 100644 index 0000000..510de3e --- /dev/null +++ b/docs/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","l":"Address"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"AddressCreationFailureException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","l":"AddressDTO"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","l":"AddressEntity"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","l":"AddressEntityFailuresException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"AddressEntityMapper"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.factory","l":"AddressFactory"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"AddressMapper"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","l":"AddressRepository"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"BuilderMapper"},{"p":"diegosneves.github.conectardoacoes.adapters.rest","l":"ConectarDoacoesApplication"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","l":"ConstructorDefaultUndefinedException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.handler","l":"ControllerExceptionHandler"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","l":"CorsConfig"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity.value","l":"Donation"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","l":"DonationEntity"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"DonationEntityMapper"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.factory","l":"DonationFactory"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"DonationMapper"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"DonationRegisterFailureException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","l":"DonationRepository"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","l":"ExceptionDetails"},{"p":"diegosneves.github.conectardoacoes.core.enums","l":"ExceptionDetails"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","l":"ExceptionDTO"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","l":"MapperFailureException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"MapperStrategy"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","l":"OpenApiConfig"},{"p":"diegosneves.github.conectardoacoes.core.repository","l":"RepositoryContract"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","l":"Shelter"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.entity","l":"ShelterContract"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository","l":"ShelterContractRepository"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller","l":"ShelterController"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller.imp","l":"ShelterControllerImpl"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.response","l":"ShelterCreatedResponse"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"ShelterCreationFailureException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.request","l":"ShelterCreationRequest"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","l":"ShelterEntity"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","l":"ShelterEntityFailuresException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"ShelterEntityMapper"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service","l":"ShelterEntityService"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","l":"ShelterEntityServiceImpl"},{"p":"diegosneves.github.conectardoacoes.core.domain.shelter.factory","l":"ShelterFactory"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"ShelterMapper"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","l":"ShelterRepository"},{"p":"diegosneves.github.conectardoacoes.core.service","l":"ShelterService"},{"p":"diegosneves.github.conectardoacoes.core.service","l":"ShelterServiceContract"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"ShelterServiceFailureException"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","l":"User"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity","l":"UserContract"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.shared.repository","l":"UserContractRepository"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller","l":"UserController"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.controller.imp","l":"UserControllerImpl"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"UserCreationFailureException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.model","l":"UserEntity"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.response","l":"UserEntityCreatedResponse"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.request","l":"UserEntityCreationRequest"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.dto","l":"UserEntityDTO"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.exception","l":"UserEntityFailuresException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"UserEntityMapper"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service","l":"UserEntityService"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.service.impl","l":"UserEntityServiceImpl"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.factory","l":"UserFactory"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.mapper","l":"UserMapper"},{"p":"diegosneves.github.conectardoacoes.core.domain.user.entity.value","l":"UserProfile"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.enums","l":"UserProfileType"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.repository","l":"UserRepository"},{"p":"diegosneves.github.conectardoacoes.core.service","l":"UserService"},{"p":"diegosneves.github.conectardoacoes.core.service","l":"UserServiceContract"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"UserServiceFailureException"},{"p":"diegosneves.github.conectardoacoes.core.utils","l":"UuidUtils"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"UuidUtilsException"},{"p":"diegosneves.github.conectardoacoes.core.utils","l":"ValidationUtils"},{"p":"diegosneves.github.conectardoacoes.core.exception","l":"ValidationUtilsException"},{"p":"diegosneves.github.conectardoacoes.adapters.rest.config.web","l":"WebSecurityConfig"}];updateSearchResults(); \ No newline at end of file diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/config/handler/ControllerExceptionHandler.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/config/handler/ControllerExceptionHandler.java new file mode 100644 index 0000000..a5a6356 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/config/handler/ControllerExceptionHandler.java @@ -0,0 +1,146 @@ +package diegosneves.github.conectardoacoes.adapters.rest.config.handler; + +import diegosneves.github.conectardoacoes.adapters.rest.dto.ExceptionDTO; +import diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * A classe {@link ControllerExceptionHandler} é um manipulador de exceções global para controladores. + * Ela lida com as exceções lançadas durante o processamento de solicitações e gera respostas de erro apropriadas. + * A classe é anotada com {@link RestControllerAdvice} para aplicar o tratamento de exceção globalmente + * a todas as classes de controlador. + * + * @author diegosneves + */ +@RestControllerAdvice +public class ControllerExceptionHandler { + + /** + * Manipula exceções gerais e retorna uma resposta de erro apropriada. + * + * @param exception A exceção que ocorreu. + * @return Uma {@link ResponseEntity} contendo um {@link ExceptionDTO} com a mensagem da exceção e um código de status HTTP + */ + @ExceptionHandler(Exception.class) + public ResponseEntity handleFailures(Exception exception) { + ExceptionDTO dto = new ExceptionDTO(exception.getMessage(), HttpStatus.BAD_REQUEST.value()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(dto); + } + + /** + * Método que manipula as exceções específicas da {@link ConstructorDefaultUndefinedException} + * que podem ocorrer ao instanciar objetos sem um construtor padrão. Quando essa exceção + * é lançada, este método a capturará e retornará uma resposta HTTP adequada usando + * o {@link ExceptionDTO} para transmitir as informações da exceção. + *

    + * Este método é anotado com {@code @ExceptionHandler}, que é uma anotação Springer, + * significando que o Springer invocará automaticamente este método para tratar as exceções do + * tipo {@link ConstructorDefaultUndefinedException} lançadas por qualquer método do controlador + * respectivo. + * + * @param exception A exceção específica do {@link ConstructorDefaultUndefinedException} que ocorreu. + * @return Uma resposta HTTP encapsulada em uma {@link ResponseEntity} que contém o DTO da exceção, + * composto pela mensagem da exceção e um código de status HTTP. O status HTTP da resposta é + * o mesmo que o status HTTP da exceção. + */ + @ExceptionHandler(ConstructorDefaultUndefinedException.class) + public ResponseEntity handleMapperFailures(ConstructorDefaultUndefinedException exception) { + ExceptionDTO dto = new ExceptionDTO(exception.getMessage(), ConstructorDefaultUndefinedException.ERROR.getStatusCodeValue()); + return ResponseEntity.status(ConstructorDefaultUndefinedException.ERROR.getHttpStatusCode()).body(dto); + } + + /** + * Manipula as exceções específicas de {@link ShelterEntityFailuresException} que + * podem ocorrer durante a manipulação dos dados da entidade de abrigo. Quando uma dessas exceções + * é lançada, este método irá capturá-la e retornar uma resposta adequada usando o {@link ExceptionDTO} + * para transportar as informações de exceção. + *

    + * O método é anotado com {@code @ExceptionHandler}, o que significa que será invocado automaticamente + * pelo Spring para tratar exceções do tipo {@link ShelterEntityFailuresException} lançadas + * por qualquer método do respectivo controlador. + * + * @param exception A exceção específica do {@link ShelterEntityFailuresException} que ocorreu. + * @return Uma resposta HTTP representada como {@link ResponseEntity} contendo o DTO de exceção + * que contém a mensagem da exceção e um código de status HTTP. O status HTTP da resposta será + * o mesmo que o status HTTP da exceção. + */ + @ExceptionHandler(ShelterEntityFailuresException.class) + public ResponseEntity handleShelterEntityFailures(ShelterEntityFailuresException exception) { + ExceptionDTO dto = new ExceptionDTO(exception.getMessage(), ShelterEntityFailuresException.ERROR.getStatusCodeValue()); + return ResponseEntity.status(ShelterEntityFailuresException.ERROR.getHttpStatusCode()).body(dto); + } + + /** + * Manipula as exceções específicas de {@link AddressEntityFailuresException} que + * podem ocorrer durante a manipulação dos dados da entidade de endereço. Quando uma dessas exceções + * é lançada, esse método irá capturá-la e retornar uma resposta adequada usando o {@link ExceptionDTO} + * para transportar as informações de exceção. + *

    + * O método é anotado com {@code @ExceptionHandler}, o que significa que será invocado automaticamente + * pelo Spring para tratar exceções do tipo {@link AddressEntityFailuresException} lançadas + * por qualquer método do respectivo controlador. + * + * @param exception A exceção específica do {@link AddressEntityFailuresException} que ocorreu. + * @return Uma resposta HTTP representada como {@link ResponseEntity} contendo o DTO de exceção + * que contém a mensagem da exceção e um código de status HTTP. + * O status HTTP da resposta será o mesmo que o status HTTP da exceção. + */ + @ExceptionHandler(AddressEntityFailuresException.class) + public ResponseEntity handleAddressEntityFailures(AddressEntityFailuresException exception) { + ExceptionDTO dto = new ExceptionDTO(exception.getMessage(), AddressEntityFailuresException.ERROR.getStatusCodeValue()); + return ResponseEntity.status(AddressEntityFailuresException.ERROR.getHttpStatusCode()).body(dto); + } + + /** + * Manipula a exceção {@link MapperFailureException} e retorna uma resposta de erro adequada. + *

    + * Este método é usado para tratar as exceções específicas do {@link MapperFailureException} + * que podem ocorrer durante a operação de mapeamento de classes. Quando uma dessas exceções é lançada, + * esse método irá capturá-la e retornar uma resposta adequada usando o {@link ExceptionDTO} para + * transportar as informações de exceção. + *

    + * O método é anotado com {@code @ExceptionHandler}, o que significa que será invocado automaticamente + * pelo Spring para tratar exceções do tipo {@link MapperFailureException} lançadas por qualquer + * método do controlador. + * + * @param exception A exceção específica do {@link MapperFailureException} que ocorreu. + * @return Uma resposta HTTP representada como {@link ResponseEntity} contendo o DTO de exceção que + * contém a mensagem da exceção e um código de status HTTP. O status HTTP da resposta será + * o mesmo que o status HTTP da exceção. + */ + @ExceptionHandler(MapperFailureException.class) + public ResponseEntity handleMapperFailures(MapperFailureException exception) { + ExceptionDTO dto = new ExceptionDTO(exception.getMessage(), MapperFailureException.ERROR.getStatusCodeValue()); + return ResponseEntity.status(MapperFailureException.ERROR.getHttpStatusCode()).body(dto); + } + + /** + * Este método é usado para manipular as exceções específicas de {@link UserEntityFailuresException} + * que podem ocorrer durante a manipulação dos dados do {@link UserEntity}. Quando uma dessas exceções é lançada, + * esse método irá capturá-la e retornar uma resposta adequada usando o {@link ExceptionDTO} + * para transportar as informações de exceção. + *

    + * O método é anotado com {@code @ExceptionHandler}, o que significa que será invocado automaticamente + * pelo Spring para tratar exceções do tipo {@link UserEntityFailuresException} lançadas por qualquer + * método do controlador. + * + * @param exception A exceção específica do {@link UserEntityFailuresException} que ocorreu. + * @return Uma resposta HTTP representada como ResponseEntity contendo o DTO de exceção que contém a + * mensagem da exceção e um código de status HTTP. O status HTTP da resposta será o mesmo que + * o status HTTP da exceção. + */ + @ExceptionHandler(UserEntityFailuresException.class) + public ResponseEntity handleUserEntityFailures(UserEntityFailuresException exception) { + ExceptionDTO dto = new ExceptionDTO(exception.getMessage(), UserEntityFailuresException.ERROR.getStatusCodeValue()); + return ResponseEntity.status(UserEntityFailuresException.ERROR.getHttpStatusCode()).body(dto); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/config/web/OpenApiConfig.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/config/web/OpenApiConfig.java index 9095b7c..e0bcb49 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/config/web/OpenApiConfig.java +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/config/web/OpenApiConfig.java @@ -59,8 +59,8 @@ private Info getInfo() { */ private List getTags() { return List.of( - new Tag().name("Doadores").description("Funcionalidades direcionadas para os Doadores"), - new Tag().name("Receptores").description("Funcionalidades direcionadas para os Receptores")); + new Tag().name("Usuários").description("Funcionalidades direcionadas para os Usuários"), + new Tag().name("Abrigos").description("Funcionalidades direcionadas para os Abrigos")); } } diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/ShelterController.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/ShelterController.java new file mode 100644 index 0000000..14bc15c --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/ShelterController.java @@ -0,0 +1,80 @@ +package diegosneves.github.conectardoacoes.adapters.rest.controller; + +import diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.server.ResponseStatusException; + +/** + * Interface que define as operações de gerenciamento de abrigos. + *

    + * Esta interface representa o controlador que manipula todas as operações relacionadas aos abrigos + * em nosso sistema. Define como o cliente (geralmente um front-end da web) + * deve interfacear com os serviços de back-end para criar e administrar abrigos. + *

    + * As operações principais que ela define incluem a criação de novos abrigos, + * através de solicitações HTTP POST para a rota "/ create". + * A especificação completa dessas rotas e do códigos de status HTTP que eles podem retornar, + * encontra-se nos Javadoc dos métodos individuais. + * + * @author diegoneves + * @since 1.0.0 + */ +public interface ShelterController { + + /** + * Método POST para a criação de um Abrigo. + *

    + * Este método recebe um objeto JSON que representa uma solicitação de criação de abrigo, + * a criação do abrigo é realizada no back-end, e retorna uma resposta que inclui os + * detalhes do abrigo criado. + *

    + * O objeto de solicitação deve ser fornecido no corpo da solicitação, com os seguintes campos: + *

      + *
    • {@code shelterName}: Nome do abrigo a ser criado.
    • + *
    • {@code address}: Um objeto que representa o endereço do abrigo. Deve incluir rua, número, bairro, + * cidade, estado e CEP.
    • + *
    • {@code responsibleUserEmail}: O e-mail do usuário responsável pelo abrigo.
    • + *
    + *

    + * O método retornará um objeto JSON com os seguintes campos: + *

      + *
    • {@code id}: O ID gerado para o novo abrigo criado.
    • + *
    • {@code shelterName}: O nome do abrigo criado.
    • + *
    • {@code address}: Um objeto representando o endereço do abrigo criado.
    • + *
    • {@code responsibleUser}: Um objeto representando o usuário responsável pelo abrigo.
    • + *
    + * + * @param request objeto {@link ShelterCreationRequest} que representa a solicitação de criação de + * um abrigo que é mapeada do corpo da solicitação JSON. + * @return Retorna um {@link ResponseEntity} que encapsula a resposta da criação do abrigo. Esta + * resposta inclui o status HTTP da operação, bem como um corpo que é uma representação JSON + * do abrigo criado. + * @throws ResponseStatusException será lançada se a criação do abrigo falhar devido a + * problemas de validação ou problemas no servidor. A mensagem de erro será incluída na + * exceção. + */ + @PostMapping(value = "/create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @Operation( + summary = "Criar Abrigo", + description = "Este endpoint é responsável por criar e registrar um novo Abrigo no sistema utilizando os dados recebidos por meio de uma requisição POST", + tags = "Abrigos" + ) + @ApiResponses(value = { + @ApiResponse( + responseCode = "201", + description = "Abrigo criado com sucesso!", + content = @Content(schema = @Schema(implementation = ShelterCreatedResponse.class)) + ) + }) + ResponseEntity createShelter(@RequestBody ShelterCreationRequest request); + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/UserController.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/UserController.java new file mode 100644 index 0000000..fc48969 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/UserController.java @@ -0,0 +1,77 @@ +package diegosneves.github.conectardoacoes.adapters.rest.controller; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * A interface {@link UserController} age como um controlador REST referente a usuários dentro deste sistema. + * Seu propósito é fornecer endpoints que lidam com todas as operações relativas aos usuários (como, por exemplo, criação de novo usuário), realizando a ligação entre as requisições HTTP dos clientes e a camada de serviço do sistema. + * + *

    + * Dentro desta interface, são definidos métodos para lidar com uma série de operações de usuário, como a criação de um usuário novo. + * Cada método está atrelado a um endpoint específico e é responsável por manipular uma operação distinta. + * Um exemplo é o método {@link #createUser(UserEntityCreationRequest)}, que está mapeado para o endpoint "create" e é responsável pela criação de um novo usuário no sistema. + * + *

    + * Como uma interface de controlador REST, processa-se input no formato JSON e devolve-se dados também no formato JSON. + * A conversão entre este formato de dados e os objetos do domínio do sistema se dá através de classes de solicitação e resposta (como {@link UserEntityCreationRequest} e {@link UserEntityCreatedResponse}), que atuam como DTOs (Data Transfer Objects) que facilitam a serialização e deserialização de dados e validam a estrutura desses dados. + * + * @author diegoneves + * @since 1.0.0 + */ +public interface UserController { + + /** + * Este endpoint pertence à aplicação "Usuários". + * Responsável por registrar novos usuários no sistema. + * Aceita uma requisição POST com o objeto {@link UserEntityCreationRequest} no corpo que contém as informações do usuário a ser registrado. + * + *

    + * Após a criação bem-sucedida do usuário, retorna um objeto {@link ResponseEntity} que encapsula os detalhes da criação do usuário na forma de {@link UserEntityCreatedResponse}. + *

    + * O objeto {@link UserEntityCreatedResponse} é um DTO que contém os detalhes relevantes sobre o usuário que foi criado. + * Isso inclui o ID de usuário único gerado pelo sistema, o nome de usuário escolhido, o endereço de e-mail fornecido e o tipo de perfil associado a este usuário. + * + *

    + * Em qualquer caso de violação das validações de integridade do modelo da entidade, um erro HTTP apropriado é retornado junto com os detalhes do erro. + * + * @param request um objeto {@link UserEntityCreationRequest} encapsulando os detalhes do novo usuário a ser registrado. + * Este parâmetro deve estar presente no corpo da solicitação POST e é deserializado para o tipo {@link UserEntityCreationRequest}. + * @return {@link ResponseEntity} que encapsula o {@link UserEntityCreatedResponse} se o usuário for criado com sucesso. + * @see UserEntityCreatedResponse + * @see UserEntityCreationRequest + */ + @PostMapping(value = "create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @Operation( + summary = "Criar Usuário", + description = "Este endpoint é responsável por criar e registrar um novo Usuário no sistema utilizando os dados recebidos por meio de uma requisição POST", + tags = "Usuários", + parameters = { + @Parameter( + name = "Perfil do usuário", + description = "O campo 'userProfile' só permite dois valores possíveis: 'Doador' ou 'Beneficiário'.", + schema = @Schema(implementation = UserProfileType.class) + ) + } + ) + @ApiResponses(value = { + @ApiResponse( + responseCode = "201", + description = "Usuário criado com sucesso!", + content = @Content(schema = @Schema(implementation = UserEntityCreatedResponse.class)) + ) + }) + ResponseEntity createUser(@RequestBody UserEntityCreationRequest request); + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImpl.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImpl.java new file mode 100644 index 0000000..e4205ac --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImpl.java @@ -0,0 +1,45 @@ +package diegosneves.github.conectardoacoes.adapters.rest.controller.imp; + + +import diegosneves.github.conectardoacoes.adapters.rest.controller.ShelterController; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse; +import diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * A classe {@link ShelterControllerImpl} implementa a interface {@link ShelterController} e serve como + * o ponto de entrada da API para o gerenciamento dos abrigos. + *

    + * Esta classe é decorada com as anotações {@code @RestController} e {@code @RequestMapping("/shelter")}, + * indicando que é um controlador REST e que irá responder a requisições feitas para /shelter. + * + * @author diegoneves + * @see ShelterController + * @see ShelterEntityService + * @see ShelterCreationRequest + * @see ShelterCreatedResponse + * @see ShelterEntityFailuresException + * @since 1.0.0 + */ +@RestController +@RequestMapping("/shelter") +public class ShelterControllerImpl implements ShelterController { + + private final ShelterEntityService shelterEntityService; + + public ShelterControllerImpl(ShelterEntityService shelterEntityService) { + this.shelterEntityService = shelterEntityService; + } + + @Override + public ResponseEntity createShelter(ShelterCreationRequest request) { + ShelterCreatedResponse response = this.shelterEntityService.createShelter(request); + return ResponseEntity.status(HttpStatus.CREATED).body(response); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/UserControllerImpl.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/UserControllerImpl.java new file mode 100644 index 0000000..d31ef2d --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/UserControllerImpl.java @@ -0,0 +1,41 @@ +package diegosneves.github.conectardoacoes.adapters.rest.controller.imp; + +import diegosneves.github.conectardoacoes.adapters.rest.controller.UserController; +import diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse; +import diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Esta é a classe {@link UserControllerImpl} que implementa a interface {@link UserController}. + * É anotada com {@link RestController}, o que significa que é um controlador de serviço web em que + * cada método retorna um objeto de domínio (Entity) ao invés de uma view. + * É responsável por lidar com todas as requisições HTTP que são enviadas para a URL {@code "/user"}. + *

    + * Possui uma instância da classe de serviço {@link UserEntityService}, que é usada para implementar + * a lógica de negócios relacionada aos usuários. + * + * @author diegoneves + * @since 1.0.0 + */ +@RestController +@RequestMapping("/user") +public class UserControllerImpl implements UserController { + + private final UserEntityService service; + + @Autowired + public UserControllerImpl(UserEntityService service) { + this.service = service; + } + + @Override + public ResponseEntity createUser(UserEntityCreationRequest request) { + UserEntityCreatedResponse newUserResponse = this.service.createUserEntity(request); + return ResponseEntity.status(HttpStatus.CREATED).body(newUserResponse); + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/AddressDTO.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/AddressDTO.java new file mode 100644 index 0000000..6133fec --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/AddressDTO.java @@ -0,0 +1,44 @@ +package diegosneves.github.conectardoacoes.adapters.rest.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Classe modelo {@code DTO} para o endereço. Contém informações básicas de endereço, como rua, número, bairro, + * cidade, estado e CEP. + *

    + * Uso: + *

    + *     {@code
    + *     AddressDTO address = AddressDTO.builder()
    + *     .street("Main St")
    + *     .number("42")
    + *     .neighborhood("Centro")
    + *     .city("Rio de Janeiro")
    + *     .state("RJ")
    + *     .zip("20031-040")
    + *     .build();
    + * }
    + * 
    + * + * @author diegoneves + * @since 1.0.0 + */ +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class AddressDTO { + + private String street; + private String number; + private String neighborhood; + private String city; + private String state; + private String zip; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/ExceptionDTO.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/ExceptionDTO.java new file mode 100644 index 0000000..9f74c94 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/ExceptionDTO.java @@ -0,0 +1,12 @@ +package diegosneves.github.conectardoacoes.adapters.rest.dto; + +/** + * A classe {@link ExceptionDTO} representa um objeto de transferência de dados + * para transportar informações de exceção. + * Ela contém a mensagem e o código de status da exceção. + * + * @author diegosneves + * @since 1.0.0 + */ +public record ExceptionDTO(String message, int statusCode) { +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/UserEntityDTO.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/UserEntityDTO.java new file mode 100644 index 0000000..db87eee --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/dto/UserEntityDTO.java @@ -0,0 +1,47 @@ +package diegosneves.github.conectardoacoes.adapters.rest.dto; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + + +/** + * Classe modelo {@code DTO} para um usuário. Contém informações básicas sobre um usuário, + * incluindo o {@code id} do usuário, o {@code nome do usuário}, o {@code e-mail} e o + * {@code tipo de perfil do usuário}. + *

    + * Os tipos de perfil de usuário são definidos na enumeração {@link UserProfileType}. Os tipos atuais de perfil + * suportados são {@code 'Doador'} e {@code 'Beneficiário'}. + *
    + * Por exemplo, para criar uma instância de UserEntityDTO, você pode usar: + *

    + *     {@code
    + *     UserEntityDTO user = UserEntityDTO.builder()
    + *         .id("3f2f8ab2-e9ee-41fa-af8a-b2e9ee91fac7")
    + *         .userName("John Doe")
    + *         .email("john.doe@example.com")
    + *         .userProfile(UserProfileType.DONOR) // pode ser DONOR ou BENEFICIARY
    + *         .build();
    + * }
    + * 
    + * + * @author diegoneves + * @since 1.0.0 + * @see UserProfileType + */ +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class UserEntityDTO { + + private String id; + private String userName; + private String email; + private UserProfileType userProfile; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/enums/ExceptionDetails.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/enums/ExceptionDetails.java new file mode 100644 index 0000000..f7b8c3e --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/enums/ExceptionDetails.java @@ -0,0 +1,59 @@ +package diegosneves.github.conectardoacoes.adapters.rest.enums; + +import org.springframework.http.HttpStatus; + +/** + * A classe {@link ExceptionDetails} é uma enumeração que define várias mensagens de exceções. + * Cada mensagem corresponde a uma condição específica de validação ou erro + * que pode ocorrer durante as operações. + * + * @author diegoneves + * @since 1.0.0 + */ +public enum ExceptionDetails { + + CONSTRUCTOR_DEFAULT_UNDEFINED("Classe [ %s ] deve declarar um construtor padrão.", HttpStatus.NOT_IMPLEMENTED), + CLASS_MAPPING_FAILURE("Falha ao tentar mapear a classe [ %s ].", HttpStatus.BAD_REQUEST), + SHELTER_OPERATION_FAILURE("Ocorreu um erro ao realizar uma operação no Abrigo. Motivo: %s", HttpStatus.BAD_REQUEST), + ADDRESS_OPERATION_FAILURE("Ocorreu um erro ao realizar uma operação no Endereço. Motivo: %s", HttpStatus.BAD_REQUEST), + USER_OPERATION_FAILURE("Ocorreu um erro ao realizar uma operação com o Usuário. Motivo: %s", HttpStatus.BAD_REQUEST), + INVALID_UUID_FORMAT_MESSAGE("O ID %s precisa estar no formato UUID", HttpStatus.INTERNAL_SERVER_ERROR); + + private final String message; + private final HttpStatus httpStatus; + + ExceptionDetails(String message, HttpStatus httpStatus) { + this.message = message; + this.httpStatus = httpStatus; + } + + + /** + * Formata uma mensagem com a entrada fornecida e retorna a mensagem formatada. + * + * @param message A mensagem de entrada que será formatada. + * @return A mensagem após a formatação. + */ + public String formatErrorMessage(String message) { + return String.format(this.message, message); + } + + /** + * Retorna o código de status HTTP associado ao erro. + * + * @return O código numérico do status HTTP relacionado com o erro. + */ + public int getStatusCodeValue() { + return this.httpStatus.value(); + } + + /** + * Obtém o status HTTP associado ao erro. + * + * @return O código de status HTTP relacionado ao erro. + */ + public HttpStatus getHttpStatusCode() { + return this.httpStatus; + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/enums/UserProfileType.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/enums/UserProfileType.java new file mode 100644 index 0000000..9625b2a --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/enums/UserProfileType.java @@ -0,0 +1,19 @@ +package diegosneves.github.conectardoacoes.adapters.rest.enums; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * A enumeração {@link UserProfileType} fornece os tipos de perfis disponíveis para um usuário. + * Os perfis disponíveis são {@code 'Doador'} e {@code 'Beneficiário'}. + * + * @author diegoneves + * @since 1.0.0 + */ +public enum UserProfileType { + + @JsonProperty(value = "Doador") + DONOR, + @JsonProperty(value = "Beneficiário") + BENEFICIARY; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/AddressEntityFailuresException.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/AddressEntityFailuresException.java new file mode 100644 index 0000000..3fdb817 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/AddressEntityFailuresException.java @@ -0,0 +1,56 @@ +package diegosneves.github.conectardoacoes.adapters.rest.exception; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails; + +/** + * A classe {@link AddressEntityFailuresException} é uma subclasse da classe {@link RuntimeException}. + * Esta é uma exceção personalizada que é lançada quando ocorre um erro durante a execução de uma operação + * relacionada a uma entidade de endereço, como mapeamento ou validação. + *

    + * As mensagens de erro personalizadas para esta exceção são definidas através das constantes na enumeração + * {@link ExceptionDetails}. A mensagem de erro específica usada neste caso é a + * {@link ExceptionDetails#ADDRESS_OPERATION_FAILURE}. + *

    + * Sendo uma {@link RuntimeException}, não é obrigatório que seja declarada na cláusula `throws` dos métodos + * que a lançam, e ela não precisa ser capturada explicitamente. + *

    + * @author diegoneves + * @since 1.0.0 + * @see RuntimeException + */ +public class AddressEntityFailuresException extends RuntimeException { + + public static final ExceptionDetails ERROR = ExceptionDetails.ADDRESS_OPERATION_FAILURE; + + /** + * Este construtor para a classe {@link AddressEntityFailuresException} recebe uma string + * que representa uma mensagem personalizada de erro. A mensagem fornecida é então formatada + * por meio do método {@code ERROR.formatErrorMessage(message)}, onde {@code ERROR} é uma + * constante da enumeração {@link ExceptionDetails}, especificamente + * {@link ExceptionDetails#ADDRESS_OPERATION_FAILURE}, que guarda detalhes para uma operação + * de endereço que falhou. + *

    + * A mensagem formatada é então passada para o construtor da superclasse {@link RuntimeException} + * através da chamada {@code super()}. + *

    + * @param message A mensagem personalizada de erro que será formatada e passada + * para a superclasse {@link RuntimeException}. + * @throws NullPointerException se a mensagem fornecida for {@code null}. + */ + public AddressEntityFailuresException(String message) { + super(ERROR.formatErrorMessage(message)); + } + + /** + * Construtor que recebe uma mensagem de erro e uma exceção causal. Invoca o construtor de sua classe + * mãe {@link RuntimeException} passando uma mensagem de erro formatada e a exceção causal. + * A mensagem de erro é formatada usando o método {@code ERROR.formatErrorMessage(message)}, onde {@code ERROR} + * é a constante {@link ExceptionDetails} especificada para operações de endereço que falham. + * + * @param message A mensagem de erro personalizada. + * @param cause A exceção causal. + */ + public AddressEntityFailuresException(String message, Throwable cause) { + super(ERROR.formatErrorMessage(message), cause); + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/ConstructorDefaultUndefinedException.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/ConstructorDefaultUndefinedException.java new file mode 100644 index 0000000..2c0d83b --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/ConstructorDefaultUndefinedException.java @@ -0,0 +1,35 @@ +package diegosneves.github.conectardoacoes.adapters.rest.exception; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails; + +/** + * Exceção personalizada que é lançada quando não é definido um construtor padrão. + * + * @see RuntimeException + * @author diegoneves + * @since 1.0.0 + */ +public class ConstructorDefaultUndefinedException extends RuntimeException { + + public static final ExceptionDetails ERROR = ExceptionDetails.CONSTRUCTOR_DEFAULT_UNDEFINED; + + /** + * Construtor da exceção {@link ConstructorDefaultUndefinedException}. + * + * @param message a mensagem de detalhe da exceção. + */ + public ConstructorDefaultUndefinedException(String message) { + super(ERROR.formatErrorMessage(message)); + } + + /** + * Construtor da exceção {@link ConstructorDefaultUndefinedException}. + * + * @param message a mensagem de detalhe da exceção. + * @param e a causa da exceção. + */ + public ConstructorDefaultUndefinedException(String message, Throwable e) { + super(ERROR.formatErrorMessage(message), e); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/MapperFailureException.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/MapperFailureException.java new file mode 100644 index 0000000..b62843f --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/MapperFailureException.java @@ -0,0 +1,31 @@ +package diegosneves.github.conectardoacoes.adapters.rest.exception; + + +import diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails; + +/** + * {@link MapperFailureException} é uma classe de exceção personalizada. Ela tem como finalidade gerenciar + * falhas ocorridas durante o processo de mapeamento, e proporcionar mensagens de erro mais detalhadas. + * Herdando de {@link RuntimeException}, ela representa exceções em tempo de execução que podem ser lançadas + * durante a operação normal da JVM. + * + * @see RuntimeException + * @author diegoneves + * @since 1.0.0 + */ +public class MapperFailureException extends RuntimeException { + + public static final ExceptionDetails ERROR = ExceptionDetails.CLASS_MAPPING_FAILURE; + + /** + * Esta é uma classe de exceção personalizada usada para gerenciar e fornecer mensagens mais + * informativas quando uma falha ocorre durante o mapeamento. + * + * @param message A mensagem específica da exceção. + * @param e A exceção generica causada durante o mapeamento. + */ + public MapperFailureException(String message, Throwable e) { + super(ERROR.formatErrorMessage(message), e); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/ShelterEntityFailuresException.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/ShelterEntityFailuresException.java new file mode 100644 index 0000000..55058a0 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/ShelterEntityFailuresException.java @@ -0,0 +1,42 @@ +package diegosneves.github.conectardoacoes.adapters.rest.exception; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; + +/** + * A classe {@link ShelterEntityFailuresException} representa uma exceção específica que será lançada + * quando ocorrer uma falha em uma operação relacionada ao {@link ShelterEntity}. + * Herda de {@link RuntimeException} e adiciona mensagens de erro detalhadas para os erros que podem ocorrer + * durante as operações de manipulação dos dados da entidade {@link Shelter}. + * + * + * @author diegoneves + * @since 1.0.0 + */ +public class ShelterEntityFailuresException extends RuntimeException { + + public static final ExceptionDetails ERROR = ExceptionDetails.SHELTER_OPERATION_FAILURE; + + /** + * Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao {@link ShelterEntity}. + * A exceção contém uma mensagem de erro detalhada. + * + * @param message A mensagem específica da exceção. + */ + public ShelterEntityFailuresException(String message) { + super(ERROR.formatErrorMessage(message)); + } + + /** + * Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao {@link ShelterEntity}. + * A exceção contém uma mensagem de erro detalhada e a causa original do erro. + * + * @param message A mensagem específica da exceção. + * @param cause A causa original do erro. + */ + public ShelterEntityFailuresException(String message, Throwable cause) { + super(ERROR.formatErrorMessage(message), cause); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/UserEntityFailuresException.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/UserEntityFailuresException.java new file mode 100644 index 0000000..4db2deb --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/exception/UserEntityFailuresException.java @@ -0,0 +1,44 @@ +package diegosneves.github.conectardoacoes.adapters.rest.exception; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.ExceptionDetails; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; + +/** + * A classe {@link UserEntityFailuresException} representa uma exceção específica que será lançada + * quando ocorrer uma falha em uma operação relacionada ao {@link UserEntity}. + * Herda de {@link RuntimeException} e adiciona mensagens de erro detalhadas para os erros que podem ocorrer + * durante as operações de manipulação dos dados da entidade {@link User}. + * + * + * @author diegoneves + * @since 1.0.0 + */ +public class UserEntityFailuresException extends RuntimeException { + + public static final ExceptionDetails ERROR = ExceptionDetails.USER_OPERATION_FAILURE; + + /** + * Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao {@link UserEntity}. + * A exceção contém uma mensagem de erro detalhada. + * + * @param message A mensagem específica da exceção. + */ + public UserEntityFailuresException(String message) { + super(ERROR.formatErrorMessage(message)); + } + + /** + * Uma exceção que será lançada quando ocorrer uma falha em uma operação relacionada ao {@link UserEntity}. + * A exceção contém uma mensagem de erro detalhada e a causa original do erro. + * + * @param message A mensagem específica da exceção. + * @param cause A causa original do erro. + */ + public UserEntityFailuresException(String message, Throwable cause) { + super(ERROR.formatErrorMessage(message), cause); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapper.java new file mode 100644 index 0000000..c2fd896 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapper.java @@ -0,0 +1,42 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + + +import diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +/** + * Implementação da interface {@link MapperStrategy} para mapear um objeto {@link Address} para sua correspondente entidade {@link AddressEntity}. + * Esta classe é utilizada para converter um objeto {@link Address}, que representa um endereço no sistema, em um objeto {@link AddressEntity} + * que pode ser armazenado no banco de dados na tabela "address". + *

    + * Enquanto essa classe é específica para o mapeamento de objetos de endereço, ela implementa a interface {@link MapperStrategy}, + * permitindo que seja usada em um contexto mais amplo de mapeamento de objetos. + * + * @author diegoneves + * @since 1.0.0 + */ +public class AddressEntityMapper implements MapperStrategy { + + /** + * O {@code Class} do objeto de endereço, usado para formatar as mensagens de erro. + */ + public static final Class

    ADDRESS_CLASS = Address.class; + + /** + * Implementa o mapeamento de um objeto {@link Address} para um objeto {@link AddressEntity}. + * Inicialmente valida o objeto de origem não é nulo e por fim emprega um {@link BuilderMapper} para realizar a operação de mapeamento. + * + * @param source O objeto de origem que será convertido em um objeto de destino. + * @return Uma nova instância do {@link AddressEntity} com valores mapeados do objeto {@link Address}. + * @throws AddressEntityFailuresException Se a origem estiver nula ou vazia. + */ + @Override + public AddressEntity mapFrom(Address source) { + ValidationUtils.validateNotNullOrEmpty(source, MapperFailureException.ERROR.formatErrorMessage(ADDRESS_CLASS.getSimpleName()), AddressEntityFailuresException.class); + return BuilderMapper.mapTo(AddressEntity.class, source); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapper.java new file mode 100644 index 0000000..2e9bd0c --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapper.java @@ -0,0 +1,53 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +/** + * A classe {@link AddressMapper} implementa a interface de estratégia de Mapeamento {@link MapperStrategy} + * para converter objetos {@link AddressEntity} em objetos {@link Address}. + *

    + * Esta classe é responsável por mapear uma entidade {@link AddressEntity} que representa um registro de endereço + * no banco de dados para um objeto {@link Address} usado no nível de aplicativo. + *

    + * Esta classe também valida os dados da {@link AddressEntity} e lança uma exceção + * {@link AddressEntityFailuresException} caso seja fornecida uma {@link AddressEntity} inválida. + *

    + * Contém uma mensgem erro predefinida para entidades de endereço inválidas: "Deve ser fornecida uma entidade de Endereço que seja válida." + * + * @author diegoneves + * @since 1.0.0 + */ +public class AddressMapper implements MapperStrategy { + + + public static final Class ADDRESS_ENTITY_TYPE = AddressEntity.class; + + /** + * Realiza a conversão de um objeto {@link AddressEntity} para um objeto {@link Address}. + *

    + * Este método utiliza a biblioteca de utilidades de validação para verificar a entidade de endereço. + *

    + * Em caso de falha na criação da instância de {@link Address}, um {@link AddressCreationFailureException} é lançado + * e a exceção é reenviada pela {@link AddressEntityFailuresException} para sinalizar o erro de mapeamento. + * + * @param source O objeto {@link AddressEntity} fornecido que deve ser mapeado para um objeto {@link Address}. + * @return Retorna um novo objeto {@link Address} com todos os campos preenchidos com dados oriundos do {@link AddressEntity}. + * @throws AddressEntityFailuresException Se a entidade do endereço fornecida for nula ou inválida. + */ + @Override + public Address mapFrom(AddressEntity source) { + ValidationUtils.validateNotNullOrEmpty(source, MapperFailureException.ERROR.formatErrorMessage(ADDRESS_ENTITY_TYPE.getSimpleName()), AddressEntityFailuresException.class); + Address address; + try { + address = new Address(source.getId(), source.getStreet(), source.getNumber(), source.getNeighborhood(), source.getCity(), source.getState(), source.getZip()); + } catch (AddressCreationFailureException e) { + throw new AddressEntityFailuresException(MapperFailureException.ERROR.formatErrorMessage(ADDRESS_ENTITY_TYPE.getSimpleName()), e); + } + return address; + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/BuilderMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/BuilderMapper.java new file mode 100644 index 0000000..0b81b0a --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/BuilderMapper.java @@ -0,0 +1,142 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; + +/** + * A classe {@link BuilderMapper} fornece métodos para mapear os campos de um objeto fonte + * para os campos de uma classe destino. + * + * @author diegoneves + * @since 1.0.0 + */ +@Slf4j +public class BuilderMapper { + + public static final String SOURCE_OBJECT_NULL_ERROR_MESSAGE = "O objeto que está sendo mapeado não deve ser nulo. Verifique se o objeto foi corretamente inicializado."; + public static final String STRATEGY_CANNOT_BE_NULL = "O objeto MapperStrategy não pode ser nulo"; + + private BuilderMapper() { + } + + /** + * Mapeia os campos do objeto de origem para os campos da classe de destino. + * + * @param o tipo da classe de destino + * @param destinationClass a classe a ser mapeada + * @param source o objeto de origem que será convertido no objeto de destino + * @return uma instância da classe de destino com seus campos preenchidos + * @throws ConstructorDefaultUndefinedException se a classe de destino não tiver um construtor padrão + * @throws MapperFailureException se ocorrer um erro ao mapear os campos + */ + public static T mapTo(Class destinationClass, Object source) throws ConstructorDefaultUndefinedException, MapperFailureException { + + var destinationFields = destinationClass.getDeclaredFields(); + + T mappedInstance = null; + + try { + Constructor[] constructors = destinationClass.getConstructors(); + Constructor defaultConstructor = null; + for (Constructor constructor : constructors) { + if (constructor.getParameterCount() == 0) { + defaultConstructor = constructor; + break; + } + } + if (defaultConstructor != null) { + mappedInstance = (T) defaultConstructor.newInstance(); + } else if (constructors.length > 0) { + Constructor nextConstructor = constructors[0]; + + var params = nextConstructor.getParameters(); + Object[] paramValues = new Object[params.length]; + + for (int i = 0; i < params.length; i++) { + Field field = findFieldWithName(source, params[i].getName(), params[i].getType()); + if (field == null) { + continue; + } + field.setAccessible(true); + paramValues[i] = field.get(source); + } + mappedInstance = (T) nextConstructor.newInstance(paramValues); + + } else { + log.error(ConstructorDefaultUndefinedException.ERROR.formatErrorMessage(destinationClass.getName())); + throw new ConstructorDefaultUndefinedException(destinationClass.getName()); + } + + } catch (Exception e) { + log.error(MapperFailureException.ERROR.formatErrorMessage(destinationClass.getName()), e); + throw new MapperFailureException(destinationClass.getName(), e); + } + + for (Field field : destinationFields) { + field.setAccessible(true); + try { + var sourceField = source.getClass().getDeclaredField(field.getName()); + sourceField.setAccessible(true); + field.set(mappedInstance, sourceField.get(source)); + } catch (Exception ignored) { + } + } + + return mappedInstance; + } + + /** + * Método utilitário privado para encontrar e retornar um objeto {@link Field} de nome específico de uma instância de objeto fornecida (source). + * O objeto {@link Field} retornado é aquele cujo nome corresponde ao parâmetro de nome fornecido e é do tipo atribuível ao parâmetro de tipo fornecido (paramType). + * + * @param source A instância de objeto cujo campo está sendo procurado. + * @param name O nome do campo que está sendo procurado. + * @param paramType O tipo de classe do campo que está sendo procurado. + * @return Retorna um objeto Field se um campo correspondente for encontrado. Retorna null se nenhum campo correspondente for encontrado. + */ + private static Field findFieldWithName(Object source, String name, Class paramType) { + for (Field field : source.getClass().getDeclaredFields()) { + if (field.getName().equalsIgnoreCase(name)) { + if (!field.getType().isAssignableFrom(paramType)) { + continue; + } + return field; + } + } + return null; + } + + /** + * Esta é uma função auxiliar genérica para converter (mapear) um objeto de origem em um destino desejado, + * usando uma estratégia de mapeamento fornecida. Ele fornece utilidade na redução de código duplicado ao + * lidar com conversões de objetos em projetos. A função utiliza Generics para manter a flexibilidade, + * permitindo que qualquer objeto seja mapeado para qualquer outro. + *

    + * Esta função verifica primeiro se a estratégia fornecida e o objeto de origem não são nulos. + * Se algum deles for nulo, a função lançará uma exceção {@link IllegalArgumentException}. + *

    + * O propósito deste método é fornecer um mapeamento eficaz de objetos e garantir a validade dos dados a serem mapeados. + * + * @param O tipo do objeto de destino, para o qual o objeto de origem será mapeado. + * @param O tipo do objeto de origem que será mapeado para o objeto de destino. + * @param strategy A estratégia de mapeamento que define a lógica de como o objeto de origem deve ser mapeado para o objeto de destino. + * Os detalhes sobre como implementar a estratégia são responsabilidade do desenvolvedor. + * @param source O objeto de origem a ser mapeado. A estrutura desse objeto depende do objeto definido durante a invocação. + * @return Retorna um novo objeto do tipo de destino (T) com seus campos mapeados do objeto de origem. + * @throws IllegalArgumentException será lançada se a estratégia de mapeamento ou o objeto de origem for null. + * + * @see MapperStrategy + * @see ValidationUtils + */ + public static T mapTo(MapperStrategy strategy, E source) { + ValidationUtils.validateNotNullOrEmpty(strategy, STRATEGY_CANNOT_BE_NULL, IllegalArgumentException.class); + ValidationUtils.validateNotNullOrEmpty(source, SOURCE_OBJECT_NULL_ERROR_MESSAGE, IllegalArgumentException.class); + return strategy.mapFrom(source); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapper.java new file mode 100644 index 0000000..3bcd901 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapper.java @@ -0,0 +1,41 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +/** + * Classe responsável por implementar a estratégia de mapeamento para objetos {@link Donation} + * para objetos {@link DonationEntity}. + * Essa classe permite a conversão de instâncias de {@link Donation} em objetos {@link DonationEntity}, que + * podem ser persistidos no banco de dados. + * + * @author diegoneves + * @since 1.0.0 + */ +public class DonationEntityMapper implements MapperStrategy { + + public static final Class DONATION_CLASS = Donation.class; + + /** + * Mapeia o objeto {@link Donation} fornecido para um objeto {@link DonationEntity}. + *

    + * Este método recebe um objeto {@link Donation}, valida se o objeto não é nulo através do utilitário {@link ValidationUtils}, + * e em seguida, usa o mapeador {@link BuilderMapper} para mapear o objeto {@link Donation} para um objeto {@link DonationEntity}. + * + * @param source o objeto {@link Donation} a ser mapeado + * @return um objeto {@link DonationEntity} que representa a entidade de doação + * @throws ShelterEntityFailuresException se o objeto {@link Donation} fornecido for nulo + * @throws MapperFailureException se ocorrer um erro durante o mapeamento + */ + @Override + public DonationEntity mapFrom(Donation source) { + ValidationUtils.validateNotNullOrEmpty( + source, + MapperFailureException.ERROR.formatErrorMessage(DONATION_CLASS.getSimpleName()), + ShelterEntityFailuresException.class); + return BuilderMapper.mapTo(DonationEntity.class, source); + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapper.java new file mode 100644 index 0000000..b147058 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapper.java @@ -0,0 +1,62 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +/** + * Esta classe implementa a interface {@link MapperStrategy} para mapear a entidade {@link DonationEntity} para o objeto de domínio {@link Donation}. + * É confiável para a conversão de uma entidade do banco de dados para o objeto do domínio. + * + *

    A classe usa a estratégia definida pela interface MapperStrategy + * para converter um {@link DonationEntity} para um objeto de domínio doação.

    + * + * @author diegoneves + * @since 1.0.0 + * @see Donation + * @see DonationEntity + * @see MapperStrategy + */ +public class DonationMapper implements MapperStrategy { + + /** + * Mapeia a entidade de doação do banco de dados para uma instância do objeto de domínio doação. + * + *

    O método aceita uma entidade {@link DonationEntity} como input e cria uma nova instância do domínio de doação com base nesse input. + * O mapeamento é feito da seguinte maneira:

    + * + *

    A entidade passada é primeiramente validada para verificar se não é nula. Se a entidade for nula, uma exceção + * {@link ShelterEntityFailuresException} é lançada com uma mensagem de erro formatada.

    + * + *

    Em seguida, uma tentativa é feita para criar uma nova instância do domínio de doação, usando os valores retornados + * pelos métodos {@code getId()}, {@code getDescription()} e {@code getAmount()} da entidade {@link DonationEntity}.

    + * + *

    Se a tentativa falhar por algum motivo (por exemplo, se os valores retornados não passarem nas verificações de + * validação no construtor do domínio de doação), uma {@link DonationRegisterFailureException} é capturada e uma {@link ShelterEntityFailuresException} + * é lançada com uma mensagem de erro formatada e a exceção original anexada.

    + * + *

    Se a criação da nova instância de Doação for bem-sucedida, essa instância é retornada.

    + * + * @param source o objeto {@link DonationEntity} que será mapeado para o objeto de domínio doação. Não deve ser nulo. + * @return uma nova instância do domínio doação, mapeada dos campos de uma entidade {@link DonationEntity}. + * @throws ShelterEntityFailuresException se a entidade de entrada for nula ou se houver uma falha durante a criação da nova instância de Doação. + */ + @Override + public Donation mapFrom(DonationEntity source) { + ValidationUtils.validateNotNullOrEmpty( + source, + MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName()), + ShelterEntityFailuresException.class); + + Donation donation = null; + try { + donation = new Donation(source.getId(), source.getDescription(), source.getAmount()); + } catch (DonationRegisterFailureException e) { + throw new ShelterEntityFailuresException(MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName()), e); + } + return donation; + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/MapperStrategy.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/MapperStrategy.java new file mode 100644 index 0000000..7b7011c --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/MapperStrategy.java @@ -0,0 +1,22 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +/** + * A interface {@link MapperStrategy} define uma estratégia para executar operações de mapeamento de objetos. + * + * @author diegosneves + * @since 1.0.0 + * + * @param o tipo da classe de destino + * @param o tipo do objeto de origem + */ +public interface MapperStrategy { + + /** + * Executa a estratégia para realizar uma operação de mapeamento entre objetos. + * + * @param source o objeto de source que será convertido no objeto de destino + * @return uma instância da classe de destino com seus campos preenchidos + */ + T mapFrom(E source); + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapper.java new file mode 100644 index 0000000..892a2fe --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapper.java @@ -0,0 +1,85 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * Classe {@link ShelterEntityMapper} que implementa a interface {@link MapperStrategy} para executar operações de mapeamento entre a classe {@link ShelterContract} e a classe {@link ShelterEntity}. + *

    + * Esta classe contém métodos que realizam o mapeamento de um objeto {@link ShelterContract} para um objeto {@link ShelterEntity}. + *

    + * Esta classe usa a classes {@link AddressEntityMapper}, {@link UserEntityMapper} e {@link DonationEntityMapper} para mapear respectivas partes do objeto {@link ShelterContract}. + *

    + * Também contém um método auxiliar para mapear uma lista de objetos {@link Donation}. + * + * @author diegoneves + * @since 1.0.0 + */ +public class ShelterEntityMapper implements MapperStrategy { + + public static final Class SHELTER_CLASS = ShelterContract.class; + + /** + * Método que converte a fonte, um objeto da classe {@link ShelterContract}, para um novo objeto da classe {@link ShelterEntity}. + *

    + * O objeto de origem é verificado para não ser nulo ou vazio, caso contrário, uma {@link ShelterEntityFailuresException} é lançada. + * Cada campo do objeto de origem é mapeado para um campo correspondente no objeto de destino. Os objetos {@link Address} e {@link UserContract} do objeto de origem são convertidos em {@link AddressEntity} e {@link UserEntity}, respectivamente, através dos mappers apropriados. + * As doações em {@link ShelterContract} são mapeadas para {@link DonationEntity} usando o método {@code getDonationEntities}. + *

    + * Se ocorrer uma exceção durante o processo de mapeamento, uma {@link ShelterEntityFailuresException} é lançada, encapsulando a exceção original. + * + * @param source objeto {@link ShelterContract} que deve ser mapeado + * @return um novo objeto {@link ShelterEntity} que é o resultado do mapeamento. + * @throws ShelterEntityFailuresException se a fonte {@link ShelterContract} for {@code null} ou vazia, ou se ocorrer um erro ao mapear qualquer um dos campos. + */ + @Override + public ShelterEntity mapFrom(ShelterContract source) { + ValidationUtils.validateNotNullOrEmpty(source, MapperFailureException.ERROR.formatErrorMessage(SHELTER_CLASS.getSimpleName()), ShelterEntityFailuresException.class); + ShelterEntity shelterEntity = null; + + try { + shelterEntity = ShelterEntity.builder() + .id(source.getId()) + .shelterName(source.getShelterName()) + .address(new AddressEntityMapper().mapFrom(source.getAddress())) + .responsibleUser(new UserEntityMapper().mapFrom((User) source.getUser())) + .donations(getDonationEntities(source.getDonations())) + .build(); + } catch (RuntimeException e) { + throw new ShelterEntityFailuresException(MapperFailureException.ERROR.formatErrorMessage(SHELTER_CLASS.getSimpleName()), e); + } + return shelterEntity; + } + + /** + * Método que converte a lista de doações da classe {@link Donation} em uma lista de objetos {@link DonationEntity}. + *

    + * Esse método recebe como parâmetro uma lista de objetos {@link Donation} e, usando a classe {@link DonationEntityMapper}, transforma cada objeto {@link Donation} em um objeto {@link DonationEntity}, retornando uma lista completa desses objetos. + *

    + * Se a lista fornecida for nula ou vazia, o método retornará uma nova lista vazia. + * + * @param list uma lista de objetos {@link Donation} que deve ser convertida + * @return uma lista de objetos {@link DonationEntity} resultante da conversão. Se a lista fornecida for nula ou vazia, retorna uma nova lista vazia. + */ + private static List getDonationEntities(List list) { + if (list == null || list.isEmpty()) { + return new ArrayList<>(); + } + return list.stream().map(new DonationEntityMapper()::mapFrom).toList(); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapper.java new file mode 100644 index 0000000..82c55cd --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapper.java @@ -0,0 +1,103 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +/** + * Implementação da interface {@link MapperStrategy} para a conversão entre a entidade {@link ShelterEntity} e a classe de domínio {@link ShelterContract}. + * Fornece funcionalidades para mapear um objeto {@link ShelterEntity} em um objeto {@link ShelterContract}. + * Utiliza a classe {@link UserMapper} para mapear o usuário responsável ({@link UserEntity}) para um objeto {@link User}. + * + * @author diegoneves + * @see MapperStrategy + * @since 1.0.0 + */ +public class ShelterMapper implements MapperStrategy { + + public static final Class SHELTER_ENTITY_CLASS = ShelterEntity.class; + + + /** + * Este método converte um objeto {@link ShelterEntity} em um novo objeto {@link ShelterContract}. + *

    + * Primeiramente, verifica se a entidade fornecida não é nula. + * Se for, lança uma {@link ShelterEntityFailuresException} com uma mensagem de erro formatada. + *

    + * Em seguida, tenta instanciar um novo objeto {@link ShelterContract} passando os atributos necessários do objeto de entidade. + * Para o mapeamento de {@link Address} e {@link User}, delega a operação de mapeamento para duas instâncias diferentes, {@link AddressMapper} e {@link UserMapper}. + *

    + * Se tudo ocorrer bem, o {@link Shelter} construído tem os mesmos valores de atributos que o da entidade. + * Se uma {@link RuntimeException} for lançada durante a operação de instanciação, ela é capturada e uma nova {@link ShelterEntityFailuresException} + * é lançada com uma mensagem de erro formatada e a exceção capturada é passada para essa nova exceção. + *

    + * Por último, o método {@link #mappedDonationsToShelter} é chamado para mapear as doações relacionadas para o novo {@link ShelterContract} construído + * e então o {@link ShelterContract} é retornado. + *

    + * + * @param source O objeto {@link ShelterEntity} que precisa ser convertido em um objeto {@link Shelter}. + * @return Um objeto {@link Shelter} que foi criado a partir do {@link ShelterEntity}. + * @throws ShelterEntityFailuresException Se ocorrer um erro durante a operação de mapeamento de um {@link ShelterEntity} para um {@link Shelter}. + * @see diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy#mapFrom + * @see diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper#mappedDonationsToShelter + * @see diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressMapper#mapFrom + * @see diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper#mapFrom + */ + @Override + public ShelterContract mapFrom(ShelterEntity source) { + ValidationUtils.validateNotNullOrEmpty(source, MapperFailureException.ERROR.formatErrorMessage(SHELTER_ENTITY_CLASS.getSimpleName()), ShelterEntityFailuresException.class); + + Shelter constructedShelter = null; + try { + constructedShelter = new Shelter( + source.getId(), + source.getShelterName(), + new AddressMapper().mapFrom(source.getAddress()), + new UserMapper().mapFrom(source.getResponsibleUser())); + } catch (RuntimeException e) { + throw new ShelterEntityFailuresException(MapperFailureException.ERROR.formatErrorMessage(SHELTER_ENTITY_CLASS.getSimpleName()), e); + } + this.mappedDonationsToShelter(source, constructedShelter); + return constructedShelter; + } + + + /** + * Mapeia as doações de uma entidade de abrigo {@link ShelterEntity} para um abrigo construído {@link ShelterContract}.

    + *

    + * Este método privado é usado quando um objeto {@link ShelterContract} está sendo construído a partir de um objeto {@link ShelterEntity}. + * Sua tarefa principal é garantir que todas as doações associadas à entidade de abrigo sejam devidamente mapeadas e atribuídas ao novo objeto Shelter. + * + *

    + * O método funciona da seguinte maneira: + *

    + * - Verifica se há doações associadas à entidade de abrigo. Se não houver, o método retorna imediatamente e nenhuma doação é adicionada ao abrigo.

    + * - Se houver doações, o método percorre a lista de doações na entidade. Para cada {@link DonationEntity} na lista, ele cria um novo objeto {@link Donation} com a descrição e o valor da entidade da doação.

    + * - Esse novo objeto de Doação é adicionado ao objeto de abrigo construído por meio do método addDonation.
    + * + * @param shelterEntity A entidade de abrigo de onde as doações serão extraídas. Este é um objeto {@link ShelterEntity} cujas doações estão sendo mapeadas. + * @param constructedShelter O objeto Shelter que está sendo construído. As doações extraídas da entidade de abrigo serão atribuídas a este objeto. + * @throws ShelterEntityFailuresException Se uma falha ocorrer durante a operação de adicionar a doação ao abrigo ou durante o registro da doação. + */ + private void mappedDonationsToShelter(ShelterEntity shelterEntity, ShelterContract constructedShelter) throws ShelterEntityFailuresException { + if (shelterEntity.getDonations().isEmpty()) { + return; + } + for (DonationEntity donationEntity : shelterEntity.getDonations()) { + try { + constructedShelter.addDonation(new Donation(donationEntity.getId(), donationEntity.getDescription(), donationEntity.getAmount())); + } catch (DonationRegisterFailureException e) { + throw new ShelterEntityFailuresException(MapperFailureException.ERROR.formatErrorMessage(Donation.class.getSimpleName()), e); + } + } + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapper.java new file mode 100644 index 0000000..fa39004 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapper.java @@ -0,0 +1,57 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +/** + * A classe {@code UserEntityMapper} implementa a interface {@link MapperStrategy} e é usada para mapear um objeto do tipo {@link User} para um objeto de entidade {@link UserEntity}. + *

    + * Essa classe é essencial para a camada de persistência do aplicativo, pois permite uma conversão eficiente entre objetos do domínio do problema e entidades que podem ser persistidas em um banco de dados. + *

    + * + * @author diegoneves + * @since 1.0.0 + */ +public class UserEntityMapper implements MapperStrategy { + + public static final Class USER_CLASS = UserContract.class; + + /** + * Este método é usado para mapear um objeto de origem do tipo {@link User} para um objeto de entidade {@link UserEntity}. + *

    + * Primeiro, realiza uma verificação de not-null-or-empty do objeto de origem utilizando a utilidade {@link ValidationUtils}. + * Se o objeto de origem for nulo ou vazio, um {@link UserEntityFailuresException} será lançado com a mensagem de erro gerada por {@link MapperFailureException#ERROR}. + *

    + *

    + * Em seguida, tenta mapear o objeto de origem para a classe {@link UserEntity} usando a utilidade {@link BuilderMapper}. + * Após o mapeamento bem-sucedido, ele então tenta configurar o perfil do usuário no objeto de entidade mapeado. O perfil do usuário é obtido a partir do perfil do usuário do objeto de origem e convertido para uma enumeração de {@link UserProfileType}. + *

    + *

    + * Se um {@link RuntimeException} é lançado durante o mapeamento ou a configuração do perfil do usuário, um novo {@link UserEntityFailuresException} é lançado com a mensagem de erro gerada por {@link MapperFailureException#ERROR} e a exceção original anexada para fins de rastreamento. + *

    + * O objeto {@link UserEntity} mapeado, ou nulo se não foi possível realizar o mapeamento, é retornado ao chamador. + * + * @param source o objeto do tipo {@link User} que é usado como base para criar um objeto de entidade {@link UserEntity}. + * @return um objeto {@link UserEntity} mapeado a partir do objeto de origem do tipo {@link User}, + * ou nulo se o mapeamento não foi possível devido a exceções durante o mapeamento ou a configuração do perfil do usuário da entidade. + * @throws UserEntityFailuresException se o objeto de origem é nulo ou vazio, ou se um erro ocorrer durante o mapeamento ou a configuração do perfil do usuário. + */ + @Override + public UserEntity mapFrom(UserContract source) { + ValidationUtils.validateNotNullOrEmpty(source, MapperFailureException.ERROR.formatErrorMessage(USER_CLASS.getSimpleName()), UserEntityFailuresException.class); + UserEntity userEntity = null; + try { + userEntity = BuilderMapper.mapTo(UserEntity.class, source); + userEntity.setUserProfile(Enum.valueOf(UserProfileType.class, source.getUserProfile().name())); + } catch (RuntimeException e) { + throw new UserEntityFailuresException(MapperFailureException.ERROR.formatErrorMessage(USER_CLASS.getSimpleName()), e); + } + return userEntity; + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapper.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapper.java new file mode 100644 index 0000000..7aad399 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapper.java @@ -0,0 +1,75 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; + +/** + * Implementação da interface {@link MapperStrategy} para a conversão entre a entidade {@link UserEntity} e a classe de domínio {@link User}. + * Fornece funcionalidades para mapear um objeto {@link UserEntity} em um objeto {@link User}. + *

    + * A classe {@link UserMapper} tem a função de converter os dados de um objeto {@link UserEntity}, que são compatíveis com o modelo de + * dados do banco, para um objeto {@link User}, que é o modelo de negócio do sistema. + *

    + * Como é uma implementação da interface {@link MapperStrategy}, a classe {@link UserMapper} é obrigada a implementar o método {@code mapFrom}. + * + * @author diegoneves + * @see MapperStrategy + * @since 1.0.0 + */ +public class UserMapper implements MapperStrategy { + + public static final Class USER_ENTITY_CLASS = UserEntity.class; + + /** + * Mapeia uma entidade de usuário ({@link UserEntity}) para um objeto de usuário de domínio ({@link User}). + * Realiza a conversão de uma entidade persistida de um usuário para uma representação de usuário de domínio. + *

    + * O mapeamento é realizado atribuindo cada campo do objeto {@link User} com os valores correspondentes do objeto {@link UserEntity}. + * Além disso, o perfil do usuário é obtido utilizando o método valueOf da classe Enum, que retornará o perfil + * correspondente de acordo com o nome do perfil informado. + * + * @param source a entidade de origem que representa um usuário no banco de dados + * @return uma instância da classe de domínio {@link User}, com seus campos preenchidos com os valores correspondentes da entidade de origem + */ + @Override + public UserContract mapFrom(UserEntity source) { + this.validateData(source); + this.validateData(source.getUserProfile()); + User mappedUser = null; + try { + mappedUser = new User( + source.getId(), + source.getUserName(), + source.getEmail(), + Enum.valueOf(UserProfile.class, source.getUserProfile().name()), + source.getUserPassword()); + } catch (UserCreationFailureException e) { + throw new UserEntityFailuresException(MapperFailureException.ERROR.formatErrorMessage(USER_ENTITY_CLASS.getSimpleName()), e); + } + return mappedUser; + } + + /** + * Este método é usado para verificar se o dado fornecido é nulo + * ou vazio (no caso de Strings) e lança uma exceção se alguma dessas condições for atendida. + * Este método é útil para validar os dados antes de operações que requerem que esses dados não sejam nulos ou vazios. + * + * @param o tipo de dado a ser validado. Como este é um método genérico, ele pode aceitar qualquer tipo de objeto. + * @param data o dado a ser validado. + * @throws UserEntityFailuresException se o dado fornecido for nulo ou, no caso de Strings, estiver vazio. + * A mensagem da exceção será uma mensagem de erro formatada a partir do {@link MapperFailureException#ERROR} anexada com a + * simplificação do nome da classe {@link UserEntity}. + * @see ValidationUtils + * @see MapperFailureException + */ + private void validateData(T data) throws UserEntityFailuresException { + ValidationUtils.validateNotNullOrEmpty(data, MapperFailureException.ERROR.formatErrorMessage(USER_ENTITY_CLASS.getSimpleName()), UserEntityFailuresException.class); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/AddressEntity.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/AddressEntity.java new file mode 100644 index 0000000..6b7feec --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/AddressEntity.java @@ -0,0 +1,40 @@ +package diegosneves.github.conectardoacoes.adapters.rest.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Objeto de entidade {@link AddressEntity} que representa um objeto endereço no banco de dados mapeado para a tabela "address". + *

    + * Esta classe é uma entidade do JPA que representa a tabela "address". + *

    + * Anotado com Lombok, o que significa que os construtores, getters e setters são gerados automaticamente. + * + * @author diegoneves + * @since 1.0.0 + */ +@Entity +@Table(name = "address") +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Getter +@Setter +public class AddressEntity { + + @Id + private String id; + private String street; + private String number; + private String neighborhood; + private String city; + private String state; + private String zip; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/DonationEntity.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/DonationEntity.java new file mode 100644 index 0000000..36ed32f --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/DonationEntity.java @@ -0,0 +1,36 @@ +package diegosneves.github.conectardoacoes.adapters.rest.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Objeto de entidade {@link DonationEntity} que representa um objeto doação no banco de dados mapeado para a tabela "donations". + *

    + * Esta classe é uma entidade do JPA que representa a tabela "donations". + *

    + * Anotado com Lombok, o que significa que os construtores, getters e setters são gerados automaticamente. + * + * @author diegoneves + * @since 1.0.0 + */ +@Entity +@Table(name = "donations") +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Getter +@Setter +public class DonationEntity { + + @Id + private String id; + private String description; + private Integer amount; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/ShelterEntity.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/ShelterEntity.java new file mode 100644 index 0000000..b1440f9 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/ShelterEntity.java @@ -0,0 +1,45 @@ +package diegosneves.github.conectardoacoes.adapters.rest.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +/** + * Objeto de entidade {@link ShelterEntity} que representa um objeto abrigo no banco de dados mapeado para a tabela "shelters". + *

    + * Esta classe é uma entidade do JPA que representa a tabela "shelters". + *

    + * Anotado com Lombok, o que significa que os construtores, getters e setters são gerados automaticamente. + * + * @author diegoneves + * @since 1.0.0 + */ +@Entity +@Table(name = "shelters") +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ShelterEntity { + + @Id + private String id; + private String shelterName; + @OneToOne + private AddressEntity address; + @OneToOne + private UserEntity responsibleUser; + @OneToMany + private List donations; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/UserEntity.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/UserEntity.java new file mode 100644 index 0000000..ae7bad0 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/model/UserEntity.java @@ -0,0 +1,57 @@ +package diegosneves.github.conectardoacoes.adapters.rest.model; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Representa um usuário no sistema. Cada usuário tem um identificador único, nome de usuário, + * endereço de e-mail, perfil de usuário e senha. + * + *

    Anotações usadas na classe:

    + *
      + *
    • {@code @Entity} - Anotação do JPA que denota que esta é uma classe de entidade.
    • + *
    • {@code @Table} - Anotação do JPA usada para especificar detalhes da tabela de banco de dados correspondente.
    • + *
    • {@code @AllArgsConstructor} - Anotação do Lombok para gerar um construtor com um parâmetro para cada campo.
    • + *
    • {@code @NoArgsConstructor} - Anotação do Lombok para gerar um construtor sem parâmetros.
    • + *
    • {@code @Builder} - Anotação do Lombok para suportar o padrão Builder de design para a construção de objetos.
    • + *
    • {@code @Getter} - Anotação do Lombok para gerar getters para todos os campos.
    • + *
    • {@code @Setter} - Anotação do Lombok para gerar setters para todos os campos.
    • + *
    + * + *

    Os atributos da classe incluem:

    + *
      + *
    • {@code userId} - O identificador único do usuário. Chave primária para a tabela do banco de dados.
    • + *
    • {@code userName} - O nome de usuário escolhido pelo usuário. Deve ser único.
    • + *
    • {@code email} - O endereço de email do usuário. Usado para comunicação e notificações.
    • + *
    • {@code userProfile} - O perfil do usuário que determina suas permissões e acessos.
    • + *
    • {@code userPassword} - A senha escolhida pelo usuário para acesso seguro ao sistema.
    • + *
    + * + * @author diegoneves + * @since 1.0.0 + * + */ +@Entity +@Table(name = "users") +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Getter +@Setter +public class UserEntity { + + @Id + private String id; + private String userName; + private String email; + private UserProfileType userProfile; + private String userPassword; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/AddressRepository.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/AddressRepository.java new file mode 100644 index 0000000..438ea0b --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/AddressRepository.java @@ -0,0 +1,34 @@ +package diegosneves.github.conectardoacoes.adapters.rest.repository; + +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * Java Persistence API (JPA) Repository para {@link AddressEntity}. + * Esta interface estende {@link CrudRepository}, que fornece métodos como save(…), findOne(…), findAll(), count(), delete(…) etc. + *

    + * Aciona consultas de banco de dados relacionadas a {@link AddressEntity}. + * + * @Repository indica que esta interface é um Repositório Spring Data JPA, um mecanismo que fornece + * métodos de manipulação de dados comuns sem a necessidade de escrever nossa própria lógica de consulta. + * O Spring Data JPA também se integra bem ao Hibernate, uma implementação popular do padrão Java Persistence API. + * + * @author diegoneves + * @since 1.0.0 + */ +@Repository +public interface AddressRepository extends CrudRepository { + + /** + * Retorna um conteiner Optional encapsulando o {@link AddressEntity} encontrado pelo Id. + * + * @param id String, identificador da entidade de endereço a ser procurada. Deve ser não nulo. + * @return um Optional de {@link AddressEntity}. Este Optional será não nulo, mas pode estar vazio se nenhum AddressEntity + * com o ID fornecido for encontrado. + */ + Optional findById(String id); + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/DonationRepository.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/DonationRepository.java new file mode 100644 index 0000000..35a34a0 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/DonationRepository.java @@ -0,0 +1,44 @@ +package diegosneves.github.conectardoacoes.adapters.rest.repository; + +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +/** + * Definição da interface do repositório para a entidade de doação {@link DonationEntity}. + * Esta interface estende a interface CrudRepository do Spring Data JPA, + * o que torna disponível metódos básicos de CRUD (Create, Read, Update, Delete). + *

    + * Esta interface define um método personalizado para buscar uma entidade de doação com base no ID. + * + * @Repository - Esta anotação é uma especialização da anotação @Component, permitindo detecção automática de classes. + * Isso também traduzirá qualquer exceção de tempo de execução lançada por classes de repositório, + * back-end de dados ou suporte de persistência para a exceção específica do Spring {@link org.springframework.dao.DataAccessException}. + * + * @author diegoneves + * @since 1.0.0 + * @see org.springframework.data.repository.CrudRepository + */ +@Repository +public interface DonationRepository extends CrudRepository { + + /** + * Este método é usado para encontrar uma entidade de doação com base no ID. + * + * @param id - O ID da entidade de doação que está sendo procurada. + * Este parâmetro é usado para identificar a entidade de doação a ser buscada. + * @return Retorna um {@link Optional} que pode ou não conter uma entidade de doação, dependendo se um + * correspondente foi encontrado ou não. + * Optional é usado aqui para forçar o programador a pensar + * sobre o caso em que a entidade de doação pode não ser encontrada. + * Isso reduz o risco de lançar um NullPointerException não intencional. + * Se uma entidade de doação correspondente for encontrada, ela será retornada, caso contrário, + * um Optional vazio será retornado. + * + * @throws org.springframework.dao.DataAccessException - em caso de falha na persistência. + */ + Optional findById(String id); + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepository.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepository.java new file mode 100644 index 0000000..9cb5fd5 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepository.java @@ -0,0 +1,204 @@ +package diegosneves.github.conectardoacoes.adapters.rest.repository; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterMapper; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; +import diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository; +import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +/** + * Este repositório é responsável pela persistência de dados relacionados a abrigos ({@link Shelter}). + *

    + * Faz uso de interfaces do Spring Data JPA para implementação do CRUD (Criação, Leitura, Atualização e Deleção) padrão, além de + * herdar de um contrato específico do Shelter para implementar suas próprias operações básicas (Encontrar por ID, Buscar todas, + * Persistir e Deletar por ID). + *

    + * Mecanismos de mapeamento são usados para desacoplar a conversão entre entidades JPA e objetos de domínio. + * + * @author diegoneves + * @see ShelterContractRepository + * @see CrudRepository + * @since 1.0.0 + */ +@Repository +public interface ShelterRepository extends ShelterContractRepository, CrudRepository { + + + String INVALID_ID_MESSAGE = "Deve ser fornecido um ID válido!"; + String SHELTER_ERROR_MESSAGE = "Um objeto Abrigo válido deve ser fornecido para persistência!"; + + /** + * Retorna uma nova instância do {@link MapperStrategy} para mapear uma entidade {@link ShelterEntity} para a classe de domínio {@link Shelter}. + * O {@link MapperStrategy} é uma estratégia de design que desacopla a conversão de objeto para objeto para uma complexidade reduzida e manutenção mais fácil. + * + * @return uma nova instância de {@link ShelterMapper} que implementa a interface {@link MapperStrategy} + */ + private ShelterMapper getShelterMapper() { + return new ShelterMapper(); + } + + /** + * Valida o valor de ID (identificador) fornecido. A validação ocorre em duas etapas: + * 1. Verifica se o ID fornecido não é nulo e nem vazio, lançando uma exceção do tipo {@link ShelterEntityFailuresException} + * com uma mensagem de erro correspondente se a validação falhar. + * 2. Verifica se o ID fornecido é um UUID válido, lançando uma exceção do tipo {@link ShelterEntityFailuresException} + * com a causa original da falha se a validação falhar. + * Note que este método é privado e deve ser usado apenas dentro da interface {@link ShelterRepository}. + * + * @param id O ID que será validado. Deve ser uma string não nula e não vazia representando um UUID válido. + * @throws ShelterEntityFailuresException se o ID fornecido for nulo, vazio ou não for um UUID válido. + * @see ValidationUtils#validateNotNullOrEmpty(Object, String, Class) + * @see UuidUtils#isValidUUID(String) + */ + private void validateId(String id) throws ShelterEntityFailuresException { + ValidationUtils.validateNotNullOrEmpty(id, INVALID_ID_MESSAGE, ShelterEntityFailuresException.class); + try { + UuidUtils.isValidUUID(id); + } catch (UuidUtilsException e) { + throw new ShelterEntityFailuresException(INVALID_ID_MESSAGE, e); + } + } + + /** + * Recebe uma lista de entidades {@link ShelterEntity}, realiza o mapeamento das instâncias de {@link ShelterEntity} para {@link Shelter} e retorna uma lista de Shelters. + * Este método é particularmente útil na conversão de entidades do banco de dados para objetos de domínio, para uso em outras partes da aplicação. + * + * @param entities Uma lista de instâncias de {@link ShelterEntity} que se pretende mapear para instâncias de {@link Shelter} + * @return Uma lista de instâncias de {@link ShelterContract} obtidas a partir do mapeamento das entidades recebidas. Se a lista de entrada for vazia, o método irá retornar uma lista vazia. + * @see MapperStrategy + * @see ShelterEntity + * @see Shelter + */ + private List mapEntityList(List entities) { + if (entities == null || entities.isEmpty()) { + return Collections.emptyList(); + } + return entities.stream().map(this.getShelterMapper()::mapFrom).toList(); + } + + /** + * Este método é usado para encontrar e retornar uma entidade {@link ShelterEntity} pelo ID. + *

    + * Primeiro, é executada a função findById do Repositório do Spring, que retorna um {@link Optional} de {@link ShelterEntity}. + * Então verifica-se se o {@link Optional} está vazio. Se estiver vazio, significa que nenhuma entidade foi encontrada com o ID fornecido, e o método retorna {@code null}. + * Se o {@link Optional} não estiver vazio, o método tenta mapear a {@link ShelterEntity} encontrada para uma instância de {@link ShelterContract}. + *

    + * Uma {@link ShelterCreationFailureException} pode ser lançada durante o mapeamento. Se isso acontecer, o método lança uma nova {@link ShelterEntityFailuresException} com uma mensagem de erro adequada. + * + * @param id A String que representa o ID único da entidade {@link ShelterEntity} a ser encontrada. Deve ser um valor não nulo e não vazio. + * @return Uma instância de {@link ShelterContract} que representa a entidade {@link Shelter} mapeada da {@link ShelterEntity} encontrada. Se nenhuma entidade for encontrada com o id fornecido, o método retornará null. + * @throws ShelterEntityFailuresException se ocorrer uma exceção {@link ShelterCreationFailureException} durante o mapeamento da entidade {@link ShelterEntity} para a instância de {@link ShelterContract}. + */ + @Override + default ShelterContract findEntityById(String id) { + ShelterEntity entityToMap = this.getShelterEntityById(id); + if (entityToMap == null) return null; + return this.getShelterMapper().mapFrom(entityToMap); + } + + /** + * Este método privado tem como objetivo recuperar um objeto {@link ShelterEntity} com base no id fornecido. + * Ele faz isso primeiro validando o id fornecido usando o método {@code validateId(String id)}. + * A validação garante que o id não seja nulo nem vazio e que seja um UUID válido. + * Caso contrário, uma exceção {@link ShelterEntityFailuresException} é lançada. + *

    + * Após a validação bem-sucedida do id, o método {@code findById(String id)} é chamado + * para obter o {@link Optional} de {@link ShelterEntity} correspondente ao id fornecido. + *

    + * Se o {@link Optional} estiver presente, o valor é retornado. Caso contrário, {@code null} é retornado. + * + * @param id A string que representa o UUID da entidade {@link ShelterEntity} a ser recuperada. + * Deve ser um UUID válido. Caso contrário, uma exceção {@link ShelterEntityFailuresException} será lançada. + * @return um objeto {@link ShelterEntity} correspondente ao id fornecido ou {@code null} se nenhum {@link ShelterEntity} corresponder ao id fornecido. + * @throws ShelterEntityFailuresException Se o id fornecido for nulo, vazio ou não for um UUID válido. + * @see #validateId(String) + */ + private ShelterEntity getShelterEntityById(String id) { + this.validateId(id); + Optional entity = this.findById(id); + return entity.orElse(null); + } + + /** + * Recupera todos os abrigos do banco de dados. + *

    + * Esse método recupera todas as entidades de {@link ShelterEntity} presentes no banco de dados, usando o método {@code findAll} da interface {@link CrudRepository}. + * Em seguida, realiza o mapeamento dessas entidades para o contrato de abrigo {@link ShelterContract}, usando a função {@code mapEntityList}. + * Portanto, este método é responsável por converter as entidades de abrigo representadas no banco de dados em contratos de abrigo que podem ser usados na lógica de negócios da aplicação. + *

    + * + * @return Uma lista de contratos de abrigo {@link ShelterContract}. Se não houver entidades de abrigo no banco de dados, retorna uma lista vazia. + */ + @Override + default List retrieveAll() { + List shelterEntityList = (List) this.findAll(); + return this.mapEntityList(shelterEntityList); + } + + /** + * Persiste uma instância de {@link ShelterContract} na representação do banco de dados. + *

    + * Primeiro, o método mapeia a instância de {@link ShelterContract} fornecida para seu equivalente {@link ShelterEntity}. + * A conversão é feita usando uma instância de {@link ShelterEntityMapper}. + *

    + * O {@link ShelterEntity} resultante é então passado para o método {@code save} da interface {@link CrudRepository}. + * Este método salva a entidade no banco de dados e retorna a entidade persistida. + *

    + * Finalmente, a {@link ShelterEntity} persistida é mapeada de volta para um {@link ShelterContract} usando uma instância de {@link ShelterMapper}. + * Este {@link ShelterContract} mapeado é então retornado. + *

    + * Este método é uma implementação direta da operação padrão de persistência fornecida pela interface {@link CrudRepository}. + * + * @param entity A instância de {@link ShelterContract} que será persistida. Deve ser um valor não nulo. + * @return uma instância de {@link ShelterContract} que representa a entidade persistida. + * @throws ShelterEntityFailuresException se a entidade fornecida for nula. + * @see CrudRepository + */ + @Override + default ShelterContract persist(ShelterContract entity) { + ValidationUtils.validateNotNullOrEmpty(entity, SHELTER_ERROR_MESSAGE, ShelterEntityFailuresException.class); + ShelterEntity shelterEntity = BuilderMapper.mapTo(new ShelterEntityMapper(), entity); + return BuilderMapper.mapTo(this.getShelterMapper(), this.save(shelterEntity)); + } + + /** + * Este método é usado para excluir uma entidade {@link ShelterEntity} pelo ID. + *

    + * Primeiramente, o método tenta recuperar a entidade {@link ShelterEntity} correspondente ao ID fornecido por meio + * do método {@link #getShelterEntityById(String) getShelterEntityById(String id)}. Se o método não conseguir encontrar qualquer entidade {@link ShelterEntity} + * correspondente ao ID fornecido, o método termina e não realiza nenhuma ação. + *

    + * Se o método {@link #getShelterEntityById(String) getShelterEntityById(String id)} retornar uma entidade válida, essa entidade é passada para o método + * {@link #delete(Object) delete(ShelterEntity targetEntity)}, que se encarrega de excluir a entidade do banco de dados. + *

    + * Este método é uma extensão direta do método {@code delete(ID id)} da interface {@link org.springframework.data.repository.CrudRepository}. + * + * @param id A String que representa o ID único da entidade {@link ShelterEntity} a ser excluída. + * Deve ser um valor não nulo e não vazio. + * @see ShelterEntity + * @see #getShelterEntityById(String) + */ + @Override + default void deleteEntityById(String id) { + ShelterEntity targetEntity = this.getShelterEntityById(id); + if (targetEntity == null) { + return; + } + this.delete(targetEntity); + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepository.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepository.java new file mode 100644 index 0000000..6d087f5 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepository.java @@ -0,0 +1,155 @@ +package diegosneves.github.conectardoacoes.adapters.rest.repository; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository; + +import java.util.ArrayList; +import java.util.Collections; + +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * A interface do repositório de usuário, {@link UserRepository}, estende as interfaces {@link UserContractRepository} e {@link CrudRepository}. + *

    + * + * @author diegoneves + * @Repository - Esta anotação é uma especialização da anotação @Component, permitindo detecção automática de classes. + * Isso também traduzirá qualquer exceção de tempo de execução lançada por classes de repositório, + * back-end de dados ou suporte de persistência para a exceção específica do Spring {@link org.springframework.dao.DataAccessException}. + * @see UserContractRepository + * @see CrudRepository + * @since 1.0.0 + */ +@Repository +public interface UserRepository extends UserContractRepository, CrudRepository { + + String USER_ID_ERROR_MESSAGE = "Operação não realizada. Um ID de usuário válido deve ser fornecido."; + String REQUIRED_USER_ERROR_MESSAGE = "Um usuário válido é requerido para efetuar a persistência."; + + /** + * Este método busca um usuário pelo email fornecido e retorna um {@link Optional} de {@link UserEntity}. + * Se nenhum usuário for encontrado com o email fornecido, + * este método retornará um {@link Optional} vazio. + * + * @param email O email do usuário a ser buscado. + * @return um Optional de UserEntity. + */ + Optional findByEmail(String email); + + + @Override + default UserContract findEntityById(String id) { + UserEntity userEntity = this.retrieveUserEntityById(id); + if (userEntity == null) return null; + return this.getUserMapper().mapFrom(userEntity); + } + + /** + * Este método retorna uma entidade de usuário com base no ID fornecido. + * Antes de tentar recuperar o usuário, o método valida o ID do usuário fornecido. + * + *

    Depois de validar o ID do usuário, usando o método {@link #validateUserId(String)}, este método tenta buscar a entidade do + * usuário. Se a entidade do usuário não existir, retorna null.

    + * + * @param id O ID da entidade do usuário a ser retornada. Não pode ser nulo ou uma String vazia. + * @return A {@link UserEntity} que corresponde ao ID fornecido. Se nenhuma {@link UserEntity} corresponder ao fornecido, este + * método retorna null. + * @throws UserEntityFailuresException Se o ID do usuário fornecido for nulo, vazio ou não for um UUID válido. + * @see #validateUserId(String) + */ + private UserEntity retrieveUserEntityById(String id) { + this.validateUserId(id); + Optional optionalUser = this.findById(id); + return optionalUser.orElse(null); + } + + /** + * Este método é responsável por criar e retornar uma nova instância de {@link UserMapper}. + *

    + * A classe {@link UserMapper} é uma implementação da interface {@link MapperStrategy} que fornece + * funcionalidade para mapear um objeto {@link UserEntity} (que é compatível com o modelo de dados do banco) + * para um objeto {@link User}, que representa o modelo de negócio do sistema. Assim, a classe {@link UserMapper} + * ajuda na conversão entre o modelo de dados e o modelo de negócio quando estamos lidando com informações de usuário. + * + * @return uma nova instância de {@link UserMapper}. + */ + private UserMapper getUserMapper() { + return new UserMapper(); + } + + /** + * Método de validação do ID do usuário. + * Este método realiza duas verificações principais: + *

      + *
    1. Certifica-se de que o ID do usuário não é nulo ou vazio.
    2. + *
    3. Certifica-se de que o ID do usuário é um UUID válido.
    4. + *
    + *

    + * Caso alguma dessas verificações falhe, uma {@link UserEntityFailuresException} será lançada. + * + * @param id O ID do usuário que deve ser validado. + * @throws UserEntityFailuresException Se o ID do usuário for nulo, vazio ou não for um UUID válido. + */ + private void validateUserId(String id) throws UserEntityFailuresException { + ValidationUtils.validateNotNullOrEmpty(id, USER_ID_ERROR_MESSAGE, UserEntityFailuresException.class); + try { + UuidUtils.isValidUUID(id); + } catch (UuidUtilsException e) { + throw new UserEntityFailuresException(USER_ID_ERROR_MESSAGE, e); + } + } + + @Override + default List retrieveAll() { + List allUsers = (List) this.findAll(); + return this.mapEntityList(allUsers); + } + + /** + * Este método é usado para mapear uma lista de objetos {@link UserEntity} para uma lista de objetos {@link UserContract}. + * + *

    + * Se a lista de {@link UserEntity} fornecida é nula ou vazia, o método retorna uma lista vazia imutável. Caso contrário, + * o método itera sobre esta lista, mapeando cada objeto {@link UserEntity} para sua representação como + * um objeto {@link UserContract}, usando {@link UserMapper#mapFrom(UserEntity)} para realizar a transformação. + *

    + * + * @param entities uma lista de {@link UserEntity} a serem mapeados para objetos {@link UserContract}. Pode ser nula ou vazia. + * @return uma lista de objetos {@link UserContract} correspondente aos {@link UserEntity}'s fornecidos. + * Se o {@link UserEntity} for nulo ou vazio, uma lista vazia imutável é retornada. + */ + private List mapEntityList(List entities) { + if (entities == null || entities.isEmpty()) return Collections.emptyList(); + return entities.stream().map(this.getUserMapper()::mapFrom).toList(); + } + + + @Override + default UserContract persist(UserContract entity) { + ValidationUtils.validateNotNullOrEmpty(entity, REQUIRED_USER_ERROR_MESSAGE, UserEntityFailuresException.class); + UserEntity userEntity = BuilderMapper.mapTo(new UserEntityMapper(), entity); + return BuilderMapper.mapTo(this.getUserMapper(), this.save(userEntity)); + } + + @Override + default void deleteEntityById(String id) { + UserEntity targetEntity = this.retrieveUserEntityById(id); + if (targetEntity == null) return; + this.delete(targetEntity); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/request/ShelterCreationRequest.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/request/ShelterCreationRequest.java new file mode 100644 index 0000000..ae9247c --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/request/ShelterCreationRequest.java @@ -0,0 +1,41 @@ +package diegosneves.github.conectardoacoes.adapters.rest.request; + +import diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Classe modelo para o Pedido de Criação do Abrigo {@link ShelterCreationRequest}. Esta classe é usada para a criação de um novo abrigo. + * Contém informações essenciais para a criação de um abrigo, incluindo o nome do abrigo, + * um {@link AddressDTO} representando o endereço do abrigo, e o {@code e-mail} do usuário responsável pelo abrigo. + * + *

    Exemplo de uso: + *

    + *     {@code
    + *     ShelterCreatedRequest shelterRequest = ShelterCreatedRequest.builder()
    + *     .shelterName("Little Paws")
    + *     .addressDTO(address)
    + *     .responsibleUserEmail("admin@littlepaws.com")
    + *     .build();
    + *     }
    + * 
    + * + * @author diegoneves + * @since 1.0.0 + * @see AddressDTO + */ +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ShelterCreationRequest { + + private String shelterName; + private AddressDTO address; + private String responsibleUserEmail; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/request/UserEntityCreationRequest.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/request/UserEntityCreationRequest.java new file mode 100644 index 0000000..537641a --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/request/UserEntityCreationRequest.java @@ -0,0 +1,42 @@ +package diegosneves.github.conectardoacoes.adapters.rest.request; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Esta classe representa um objeto de solicitação para a criação de uma nova entidade de usuário. + * Ela é usada principalmente para coletar detalhes sobre o novo usuário para criar um registro correspondente no banco de dados. + *

    + * Os detalhes a serem coletados incluem: + *

      + *
    • userName: o nome de usuário escolhido pelo novo usuário.
    • + *
    • email: o endereço de e-mail do novo usuário.
    • + *
    • userProfile: o tipo de perfil do usuário que classifica o novo usuário em uma de várias categorias possíveis (por exemplo, administrador, usuário regular, etc.).
    • + *
    • userPassword: a senha escolhida pelo novo usuário.
    • + *
    + *

    + * Os atributos da classe estão sujeitos a alterações conforme o processamento prossegue. + *

    + * Atenção: Esta classe faz uso das anotações Lombok para reduzir a verbosidade do código Java. + * + * @author diegoneves + * @since 1.0.0 + * @see UserProfileType + */ +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class UserEntityCreationRequest { + + private String userName; + private String email; + private UserProfileType userProfile; + private String userPassword; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/response/ShelterCreatedResponse.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/response/ShelterCreatedResponse.java new file mode 100644 index 0000000..51b8873 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/response/ShelterCreatedResponse.java @@ -0,0 +1,35 @@ +package diegosneves.github.conectardoacoes.adapters.rest.response; + +import diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO; +import diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Classe modelo {@code DTO} para a resposta de criação de um abrigo. + *

    + * Esta classe contém informações sobre a resposta da criação de um abrigo, incluindo o {@code id} do novo abrigo, + * o {@code nome} do abrigo, o {@code endereço} do abrigo, e o {@code usuário responsável} pela criação do abrigo. + *

    + * + * @author diegoneves + * @since 1.0.0 + * @see AddressDTO + * @see UserEntityDTO + */ +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class ShelterCreatedResponse { + + private String id; + private String shelterName; + private AddressDTO address; + private UserEntityDTO responsibleUser; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/response/UserEntityCreatedResponse.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/response/UserEntityCreatedResponse.java new file mode 100644 index 0000000..5353798 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/response/UserEntityCreatedResponse.java @@ -0,0 +1,41 @@ +package diegosneves.github.conectardoacoes.adapters.rest.response; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * Esta classe representa a resposta após a criação de uma entidade de usuário no sistema. + * Ela contém informações relevantes sobre o usuário que foi criado, servindo como um objeto de transferência de dados (DTO). + *

    + * Atributos: + *

      + *
    • id: Um identificador único para o usuário criado
    • + *
    • userName: O nome de usuário escolhido pelo usuário
    • + *
    • email: O endereço de e-mail fornecido pelo usuário
    • + *
    • userProfile: O tipo de perfil associado a este usuário (por exemplo, administrador, usuário, etc.)
    • + *
    + *

    + * Essa classe é construída usando o padrão de design Builder para facilitar a criação de instâncias e é adotada + * a biblioteca Lombok para evitar a verbosidade no código. + * + * @author diegoneves + * @since 1.0.0 + * @see UserProfileType + */ +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class UserEntityCreatedResponse { + + private String id; + private String userName; + private String email; + private UserProfileType userProfile; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/ShelterEntityService.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/ShelterEntityService.java new file mode 100644 index 0000000..48f0184 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/ShelterEntityService.java @@ -0,0 +1,31 @@ +package diegosneves.github.conectardoacoes.adapters.rest.service; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse; + +/** + * Interface para a criação de um novo abrigo no sistema. + *

    + * Esta interface fornece um contrato para a implementação de um serviço responsável por + * criar abrigos no sistema. + * + * @author diegoneves + * @since 1.0.0 + */ +public interface ShelterEntityService { + + /** + * Este método é responsável por criar um novo abrigo no sistema. + * Ele recebe um objeto {@link ShelterCreationRequest}, que contém as informações necessárias para criar o abrigo, + * como o nome do abrigo, o endereço e o e-mail do usuário responsável por criar o abrigo. + * + * @param request um objeto {@link ShelterCreationRequest} contendo as informações necessárias para criar um novo abrigo. + * @return um objeto {@link ShelterCreatedResponse} contendo as informações do abrigo criado. + * @throws ShelterEntityFailuresException se ocorrer algum erro durante a criação do abrigo. Isso pode acontecer + * se o usuário responsável não for encontrado, se houver um erro na criação do endereço ou + * se houver um erro na criação do abrigo em si. + */ + ShelterCreatedResponse createShelter(ShelterCreationRequest request); + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/UserEntityService.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/UserEntityService.java new file mode 100644 index 0000000..7f08bbf --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/UserEntityService.java @@ -0,0 +1,54 @@ +package diegosneves.github.conectardoacoes.adapters.rest.service; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository; +import diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; + +/** + * Definição da interface para o serviço que lida com operações relacionadas à entidade do usuário. + * + * @author diegoneves + * @since 1.0.0 + */ +public interface UserEntityService { + + /** + * Este método é usado para obter uma entidade de usuário pelo seu email. + * Primeiramente, o método verifica se o valor do parâmetro de email não é nulo ou vazio. + * Se o valor do email for nulo ou vazio, uma exceção {@link UserEntityFailuresException} é lançada ao usuário + * com uma mensagem de erro relevante. + *

    + * Se o email for válido, o método tentará encontrar uma entidade de usuário que corresponda ao email + * usando a interface {@link UserRepository}. + * Se não for encontrada uma entidade de usuário para o email fornecido, + * o método lançará uma exceção {@link UserEntityFailuresException} com uma mensagem de erro apropriada. + *

    + * + * @param email A string que representa o email do usuário que será procurado no repositório. + * @return A entidade do usuário correspondente ao email fornecido. + * @throws UserEntityFailuresException Se nenhuma entidade de usuário puder ser encontrada para o email fornecido + * ou o valor do email for nulo ou vazio. + */ + UserContract searchUserByEmail(String email) throws UserEntityFailuresException; + + + /** + * Método para criar uma nova entidade do usuário. Primeiramente, verifica se a solicitação enviada está completa + * e se os valores de seus atributos estão de acordo com a regra de negócio da aplicação. Caso contrário, + * uma exceção {@link UserEntityFailuresException} é disparada com uma mensagem de erro detalhada. + *

    + * Se os dados fornecidos estiverem corretos, o método criará um novo registro de usuário no banco de dados + * usando a interface {@link UserRepository}. Ao final, um objeto {@link UserEntityCreatedResponse} é retornado + * contendo todos os dados do novo usuário criado. + *

    + * + * @param request O objeto {@link UserEntityCreationRequest} que contém os dados necessários para a criação do novo usuário. + * @return Um objeto {@link UserEntityCreatedResponse} contendo os dados do novo usuário criado. + * @throws UserEntityFailuresException Se os dados fornecidos na solicitação estão incompletos ou inconsistentes + * ou se ocorrer algum problema durante a criação do novo usuário no banco de dados. + */ + UserEntityCreatedResponse createUserEntity(UserEntityCreationRequest request) throws UserEntityFailuresException; + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImpl.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImpl.java new file mode 100644 index 0000000..d4dbee7 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImpl.java @@ -0,0 +1,270 @@ +package diegosneves.github.conectardoacoes.adapters.rest.service.impl; + +import diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO; +import diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.adapters.rest.repository.AddressRepository; +import diegosneves.github.conectardoacoes.adapters.rest.repository.DonationRepository; +import diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository; +import diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse; +import diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService; +import diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.domain.shelter.factory.AddressFactory; +import diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException; +import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * Esta classe é responsável pela implementação dos métodos necessários para gerenciar abrigos no sistema. + * + * @author diegoneves + * @since 1.0.0 + * @see ShelterEntityService + */ +@Service +public class ShelterEntityServiceImpl implements ShelterEntityService { + + public static final String SHELTER_CREATION_ERROR_MESSAGE = "Erro na criação do Abrigo. Confirme se todos os campos do Abrigo estão corretos e tente novamente."; + public static final String ADDRESS_CREATION_ERROR = "Erro na criação do endereço. Confirme se todos os campos do endereço estão corretos e tente novamente."; + public static final String ERROR_MAPPING_ADDRESS = "Erro durante o mapeamento do endereço para persistência"; + public static final String USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR = "Ops! Não conseguimos encontrar o e-mail do usuário responsável. Por gentileza, tente novamente."; + + + private final ShelterRepository repository; + private final DonationRepository donationRepository; + private final AddressRepository addressRepository; + private final UserEntityService userEntityService; + + @Autowired + public ShelterEntityServiceImpl(ShelterRepository repository, DonationRepository donationRepository, AddressRepository addressRepository, UserEntityService userEntityService) { + this.repository = repository; + this.donationRepository = donationRepository; + this.addressRepository = addressRepository; + this.userEntityService = userEntityService; + } + + /** + * Este método é responsável por criar um novo abrigo no sistema. + * Ele recebe um objeto {@link ShelterCreationRequest}, que contém as informações necessárias para criar o abrigo, + * como o nome do abrigo, o endereço e o e-mail do usuário responsável por criar o abrigo. + *

    + * Internamente, este método realiza as seguintes operações: + *

      + *
    1. Cria uma nova instância de {@link ShelterContract} através do método createAndReturnShelterInstance, + * utilizando as informações do objeto {@link ShelterCreationRequest} fornecido.
    2. + *
    3. Mapeia o objeto {@link ShelterContract} criado para um objeto {@link ShelterEntity} e o salva no repositório + * do sistema utilizando o método {@code mapShelterAndSaveToRepository}.
    4. + *
    5. Constrói uma resposta para a criação do abrigo utilizando o objeto {@link ShelterEntity} salvo e o retorna.
    6. + *
    + * + * @param request um objeto {@link ShelterCreationRequest} contendo as informações necessárias para criar um novo abrigo. + * @return um objeto {@link ShelterCreatedResponse} contendo as informações do abrigo criado. + * @throws ShelterEntityFailuresException se ocorrer algum erro durante a criação do abrigo. Isso pode acontecer + * se o usuário responsável não for encontrado, se houver um erro na criação do endereço ou + * se houver um erro na criação do abrigo em si. + */ + @Override + public ShelterCreatedResponse createShelter(ShelterCreationRequest request) { + ShelterContract shelterContract = this.createAndReturnShelterInstance(request); + ShelterEntity shelterEntity = this.mapShelterAndSaveToRepository(shelterContract); + return constructShelterCreatedResponse(shelterEntity); + } + + /** + * Este método privado é responsável por construir uma resposta para a criação de um abrigo. + * Essa resposta é modelada pela classe {@link ShelterCreatedResponse}. + * + *

    + * O método aceita como parâmetro um objeto {@link ShelterEntity}, que representa um abrigo que foi armazenado no banco de dados. + * Este objeto é usado para extrair informações pertinentes que serão incluídas na resposta. + *

    + * + *

    + * O método segue essas principais etapas: + *

    + *
      + *
    1. Inicia a construção de um objeto {@link ShelterCreatedResponse} através do método builder().
    2. + *
    3. Configura o ID da resposta para corresponder ao ID da {@link ShelterEntity} fornecida.
    4. + *
    5. Configura o nome do abrigo na resposta para corresponder ao nome do abrigo na {@link ShelterEntity} fornecida.
    6. + *
    7. Configura o endereço na resposta para corresponder ao endereço da {@link ShelterEntity} fornecida, convertendo a + * {@link AddressEntity} para {@link AddressDTO} com o auxílio do método {@code mapTo()} da classe {@link BuilderMapper}.
    8. + *
    9. Configura o usuário responsável na resposta para corresponder ao usuário responsável na {@link ShelterEntity} fornecida, + * convertendo a {@link UserEntity} para {@link UserEntityDTO} com o auxílio do método {@code mapTo()} da classe {@link BuilderMapper}.
    10. + *
    11. Finaliza a construção do objeto {@link ShelterCreatedResponse} e o retorna.
    12. + *
    + * + * @param shelterEntity um objeto {@link ShelterEntity} que representa um abrigo armazenado no banco de dados. + * @return retorna um objeto {@link ShelterCreatedResponse} que contém as informações do abrigo recém-criado. + */ + private static ShelterCreatedResponse constructShelterCreatedResponse(ShelterEntity shelterEntity) { + return ShelterCreatedResponse.builder() + .id(shelterEntity.getId()) + .shelterName(shelterEntity.getShelterName()) + .address(BuilderMapper.mapTo(AddressDTO.class, shelterEntity.getAddress())) + .responsibleUser(BuilderMapper.mapTo(UserEntityDTO.class, shelterEntity.getResponsibleUser())) + .build(); + } + + /** + * Cria uma nova instância de {@link Shelter} e a retorna. + *

    + * Este método é responsável por criar uma nova instância de {@link Shelter} com base nas informações fornecidas no + * objeto {@link ShelterCreationRequest}. A nova instância de abrigo é criada usando o método {@code create} do + * {@link ShelterFactory}. + *

    + *

    + * Antes de criar o abrigo, o método realiza as seguintes ações: + *

      + *
    • Encontra o {@link UserContract} responsável pelo abrigo através do e-mail fornecido no + * {@link ShelterCreationRequest}, usando o método {@code findUserByResponsibleEmail}.
    • + *
    • Cria e salva um {@link Address} com base nas informações de endereço fornecidas no + * {@link ShelterCreationRequest}, usando o método {@code createAndSaveAddressFromDto}.
    • + *
    + *

    + * + * @param request um objeto {@link ShelterCreationRequest} contendo as informações para a criação do abrigo. + * @return newShelter a nova instância de {@link Shelter} criada. + * @throws ShelterEntityFailuresException se ocorrer algum erro durante a criação da entidade Shelter. Isto pode ser devido a + * um erro ao encontrar o usuário responsável, um erro ao salvar o endereço, ou um + * erro na própria criação do Shelter. + */ + private Shelter createAndReturnShelterInstance(ShelterCreationRequest request) throws ShelterEntityFailuresException { + UserContract userContract = this.findUserByResponsibleEmail(request.getResponsibleUserEmail()); + Address address = this.createAndSaveAddressFromDto(request.getAddress()); + Shelter newShelter; + try { + newShelter = ShelterFactory.create(request.getShelterName(), address, userContract); + } catch (ShelterCreationFailureException e) { + throw new ShelterEntityFailuresException(SHELTER_CREATION_ERROR_MESSAGE, e); + } + return newShelter; + } + + /** + * Este é um método privado na classe {@link ShelterEntityServiceImpl} que é responsável por procurar um usuário por meio do seu e-mail. + *

    + * O método é designado para encontrar um {@link UserContract} com base no e-mail do usuário responsável fornecido como um + * parâmetro string. + * + *

    + * O método se encarrega de chamar a função {@code searchUserByEmail} da entidade de serviço do usuário. Se for encontrada alguma + * exceção {@link UserEntityFailuresException} durante a execução da função {@code searchUserByEmail}, este método irá pegá-la e lançar + * uma nova exceção do tipo {@link ShelterEntityFailuresException} com uma mensagem {@code USER_NOT_FOUND}, acompanhada da exceção original. + *

    + * + * @param responsibleUserEmail é uma string que representa o e-mail do usuário responsável pelo abrigo que estamos + * procurando. Este parâmetro é utilizado para executar a pesquisa do usuário na entidade de serviço do usuário. + * @return retorna um objeto {@link UserContract} que representa o usuário encontrato. Este objeto contém todos os detalhes + * do usuário que foi buscado por meio de seu e-mail. + * @throws ShelterEntityFailuresException é uma exceção que é lançada se houver algum problema ao procurar o usuário + * na entidade de serviço do usuário. Esta exceção é acompanhada com a mensagem {@code USER_NOT_FOUND} que descreve o motivo do + * lançamento da exceção. + */ + private UserContract findUserByResponsibleEmail(String responsibleUserEmail) throws ShelterEntityFailuresException { + UserContract foundUser; + try { + foundUser = this.userEntityService.searchUserByEmail(responsibleUserEmail); + } catch (UserEntityFailuresException e) { + throw new ShelterEntityFailuresException(USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR, e); + } + return foundUser; + } + + /** + * Este método privado é responsável por criar e salvar um endereço a partir de um + * objeto {@link AddressDTO} fornecido, e retorna uma instância de {@link Address}. + * + *

    + * O método inicia validando se o objeto {@link AddressDTO} fornecido não é nulo ou vazio, + * lançando uma exceção {@link ShelterEntityFailuresException} com a mensagem + * {@code ADDRESS_CREATION_ERROR} se a validação falhar. + *

    + * + *

    + * Posteriormente, cria uma nova instância de {@link Address} usando a {@link AddressFactory}. + * Se ocorrer um {@link AddressCreationFailureException} durante a criação do endereço, + * o método captura a exceção e lança uma nova exceção {@link ShelterEntityFailuresException} com + * a mensagem {@code ADDRESS_CREATION_ERROR} e a exceção original anexada. + *

    + * + *

    + * Finalmente, o método usa a instância {@link Address} criada para salvar o endereço no + * repositório. O endereço criado é finalmente retornado. + *

    + * + * @param address é um objeto {@link AddressDTO} que contém as informações do endereço + * a serem salvas. + * @return Retorna uma instância de {@link Address} que representa o endereço + * que foi salvo no repositório. + * @throws ShelterEntityFailuresException se a validação do objeto {@link AddressDTO} falhar + * ou se ocorrer um erro ao criar um novo {@link Address}. + */ + private Address createAndSaveAddressFromDto(AddressDTO address) throws ShelterEntityFailuresException { + ValidationUtils.validateNotNullOrEmpty(address, ADDRESS_CREATION_ERROR, ShelterEntityFailuresException.class); + Address newAddress; + try { + newAddress = AddressFactory.create(address.getStreet(), address.getNumber(), address.getNeighborhood(), address.getCity(), address.getState(), address.getZip()); + } catch (AddressCreationFailureException e) { + throw new ShelterEntityFailuresException(ADDRESS_CREATION_ERROR, e); + } + this.mapAddressAndSaveToRepository(newAddress); + return newAddress; + } + + /** + * Este método é responsável por mapear um objeto de endereço para a entidade relevante e salvá-lo no repositório. + * Usa o {@link BuilderMapper} para mapear o endereço, depois salva no repositório. + * + * @param address - Um objeto de endereço que precisa ser mapeado e salvo. + * @throws ShelterEntityFailuresException - Se ocorrer uma exceção durante o mapeamento, será lançada uma {@link ShelterEntityFailuresException}. + * A exceção original será anexada como causa. + */ + private void mapAddressAndSaveToRepository(Address address) throws ShelterEntityFailuresException { + AddressEntity addressEntity; + try { + addressEntity = BuilderMapper.mapTo(new AddressEntityMapper(), address); + } catch (RuntimeException e) { + throw new ShelterEntityFailuresException(ERROR_MAPPING_ADDRESS, e); + } + this.addressRepository.save(addressEntity); + } + + /** + * Este método é responsável por mapear um contrato de abrigo para uma entidade de abrigo e salvá-la no repositório. + *

    + * O método primeiro tenta persistir o contrato de abrigo no repositório. + * Se a operação for bem-sucedida, ele mapeia o contrato de abrigo salvo para uma nova entidade de abrigo usando um mapeador. + * Se ocorrer uma {@link RuntimeException} durante qualquer uma dessas operações, ela é capturada e tratada lançando uma {@link ShelterEntityFailuresException}. + * + * @param shelterContract é o contrato de abrigo que será mapeado para uma entidade de abrigo e salvo. + * @return Retorna a nova entidade de abrigo que foi mapeada e salva com sucesso. + * @throws ShelterEntityFailuresException essa exceção é lançada quando ocorre um erro durante a criação da entidade de abrigo. + * A causa original da falha é encapsulada dentro desta exceção para permitir uma depuração mais eficiente. + */ + private ShelterEntity mapShelterAndSaveToRepository(ShelterContract shelterContract) { + ShelterEntity newShelterEntity; + try { + ShelterContract savedContract = this.repository.persist(shelterContract); + newShelterEntity = BuilderMapper.mapTo(new ShelterEntityMapper(), savedContract); + } catch (RuntimeException e) { + throw new ShelterEntityFailuresException(SHELTER_CREATION_ERROR_MESSAGE, e); + } + return newShelterEntity; + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImpl.java b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImpl.java new file mode 100644 index 0000000..b7aae0a --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImpl.java @@ -0,0 +1,152 @@ +package diegosneves.github.conectardoacoes.adapters.rest.service.impl; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.UserMapper; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository; +import diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse; +import diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +/** + * A classe {@link UserEntityServiceImpl} implementa a interface {@link UserEntityService} e + * lida com a lógica de negócios das operações de usuário. + * A classe é marcada como um componente do Spring com a anotação {@link Service}, + * o que permite ao Spring detectar e gerenciar as instâncias dessa classe. + *

    + * Além disso, a classe lida com cenários de erros e exceções, lançando uma exceção personalizada + * chamada {@link UserEntityFailuresException} quando um problema ocorre. + * + * @author diegoneves + * @see UserEntityService + * @see UserEntityFailuresException + * @see Service + * @since 1.0.0 + */ +@Service +public class UserEntityServiceImpl implements UserEntityService { + + public static final String INVALID_EMAIL_ERROR_MESSAGE = "Não foi informado nenhum email. Por favor, forneça um email válido."; + public static final String EMAIL_NOT_FOUND_ERROR_MESSAGE = "Não foi possivel encontrar um usuário com o email [ %s ]."; + public static final String EMAIL_ALREADY_IN_USE = "Desculpe, o endereço de email fornecido já está associado a uma conta existente. Por favor, tente com um email diferente."; + public static final String USER_CREATION_FAILURE_MESSAGE = "Ops! A criação do novo usuário não foi bem-sucedida. Por favor, certifique-se de que seus dados estão corretos e tente novamente."; + public static final String USER_PROFILE_VALIDATION_FAILURE = "A validação do Perfil do usuário fornecido falhou."; + public static final String MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE = "Por favor, forneça uma requisição de criação de usuário preenchida corretamente."; + + + private final UserRepository userRepository; + + @Autowired + public UserEntityServiceImpl(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Override + public UserContract searchUserByEmail(String email) throws UserEntityFailuresException { + ValidationUtils.validateNotNullOrEmpty(email, INVALID_EMAIL_ERROR_MESSAGE, UserEntityFailuresException.class); + UserEntity foundUser = this.userRepository.findByEmail(email).orElseThrow(() -> new UserEntityFailuresException(String.format(EMAIL_NOT_FOUND_ERROR_MESSAGE, email))); + return BuilderMapper.mapTo(new UserMapper(), foundUser); + } + + @Override + public UserEntityCreatedResponse createUserEntity(UserEntityCreationRequest request) throws UserEntityFailuresException { + ValidationUtils.validateNotNullOrEmpty(request, MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE, UserEntityFailuresException.class); + this.checkIfEmailAlreadyInUse(request.getEmail()); + UserEntity newUser = createUserEntityFromCreationRequest(request); + return BuilderMapper.mapTo(UserEntityCreatedResponse.class, this.userRepository.save(newUser)); + } + + /** + * Método auxiliar usado para converter uma instância de {@link UserEntityCreationRequest} para uma instância de {@link UserEntity}. + *

    + * Este método recebe uma solicitação de criação de entidade de usuário, gera um contrato de usuário correspondente através de + * {@link UserEntityServiceImpl#createUserFromRequest(UserEntityCreationRequest)} e usa um {@link UserEntityMapper} para mapear + * o contrato de usuário para uma entidade de usuário. + * + * @param request Uma instância de {@link UserEntityCreationRequest} representando a solicitação de criação de uma nova entidade de usuário. + * @return userEntity Uma instância de {@link UserEntity} representando a entidade de usuário recém-criada. + * @throws UserEntityFailuresException Se ocorrer um erro durante a criação do usuário ou mapeamento de contrato de usuário para entidade de usuário. + * A exceção encapsula e fornece mais detalhes sobre a natureza específica do erro. + * @see UserEntityCreationRequest + * @see UserEntity + * @see UserEntityMapper + */ + private static UserEntity createUserEntityFromCreationRequest(UserEntityCreationRequest request) { + UserContract userContract = createUserFromRequest(request); + return BuilderMapper.mapTo(new UserEntityMapper(), userContract); + } + + /** + * Método auxiliar para criar um {@link User} a partir de uma solicitação de criação de entidade de usuário {@link UserEntityCreationRequest}. + *

    + * Este método é utilizado principalmente para transformar a solicitação de criação de entidade de usuário em uma instância concreta de {@link User}. + * Ele lida com a validação da solicitação e a criação do usuário, lançando uma exceção {@link UserEntityFailuresException} caso algum problema ocorra. + * A exceção lança detalhes específicos sobre a natureza do erro. + * O perfil do usuário é validado e convertido para um tipo de enumeração {@link UserProfile} apropriado. + *

    + *

    Exceções

    + *

    + * O método lança a exceção {@link UserEntityFailuresException} nas seguintes situações: + *

      + *
    • Quando o campo userProfile da solicitação de criação de entidade de usuário está nulo.
    • + *
    • Quando ocorrer uma exceção {@link RuntimeException} durante a criação do usuário no método {@link UserFactory#create}.
    • + *
    + * Nesses casos, uma {@link UserEntityFailuresException} será lançada com uma mensagem de erro adequada. + *

    + * + * @param request uma solicitação de criação de entidade de usuário formada por userName, email, userProfile e userPassword. + * @return User uma instância de {@link User} representando o novo usuário criado. + * @throws UserEntityFailuresException lançada quando a validação do userProfile falha ou é impossível criar o usuário devido a uma {@link RuntimeException}. + * @see User + * @see UserContract + * @see UserEntityCreationRequest + */ + private static UserContract createUserFromRequest(UserEntityCreationRequest request) { + ValidationUtils.validateNotNullOrEmpty(request.getUserProfile(), USER_PROFILE_VALIDATION_FAILURE, UserEntityFailuresException.class); + UserProfile userProfile = Enum.valueOf(UserProfile.class, request.getUserProfile().name()); + UserContract createdUser; + try { + createdUser = UserFactory.create(request.getUserName(), request.getEmail(), userProfile, request.getUserPassword()); + } catch (RuntimeException e) { + throw new UserEntityFailuresException(USER_CREATION_FAILURE_MESSAGE, e); + } + return createdUser; + } + + /** + * Este método recebe como parâmetro um endereço de email no formato String e verifica se este email já está + * registrado no repositório de usuários. A verificação de registro é feita a partir do método + * {@link UserRepository#findByEmail(String)}, que retorna um {@link Optional} de {@link UserEntity}. + *

    + * Primeiro, o método utiliza a função {@link ValidationUtils#validateNotNullOrEmpty(Object, String, Class)} + * para assegurar que o email fornecido não é nulo ou vazio. + *

    + * Se a verificação retorna um {@link UserEntity}, isso significa que o endereço de email já existe na base de dados do + * sistema, neste caso, uma exceção {@link UserEntityFailuresException} é lançada com uma mensagem predefinida + * {@link #EMAIL_ALREADY_IN_USE}. + *

    + * Já se a instância de {@link UserEntity} for vazia, ou seja, se o email não foi registrado anteriormente no sistema, + * a operação prossegue normalmente sem lançar nenhuma exceção. + * + * @param email o endereço de email a ser verificado. + * @throws UserEntityFailuresException Caso o email fornecido seja nulo ou vazio, ou, caso o email já esteja em uso por um usuário existente. + */ + private void checkIfEmailAlreadyInUse(String email) { + ValidationUtils.validateNotNullOrEmpty(email, INVALID_EMAIL_ERROR_MESSAGE, UserEntityFailuresException.class); + Optional existingUser = this.userRepository.findByEmail(email); + if (existingUser.isPresent()) { + throw new UserEntityFailuresException(EMAIL_ALREADY_IN_USE); + } + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/Shelter.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/Shelter.java index ccbc438..bfd6c25 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/Shelter.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/Shelter.java @@ -74,9 +74,9 @@ private void validateData() throws ShelterCreationFailureException { } catch (UuidUtilsException e) { throw new ShelterCreationFailureException(ID_VALIDATION_FAILURE, e); } - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.shelterName, SHELTER_NAME_REQUIRED_ERROR, ShelterCreationFailureException.class); - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.address, ADDRESS_REQUIRED_ERROR, ShelterCreationFailureException.class); - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.responsibleUser, RESPONSIBLE_REQUIRED_ERROR, ShelterCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(this.shelterName, SHELTER_NAME_REQUIRED_ERROR, ShelterCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(this.address, ADDRESS_REQUIRED_ERROR, ShelterCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(this.responsibleUser, RESPONSIBLE_REQUIRED_ERROR, ShelterCreationFailureException.class); } @@ -107,19 +107,19 @@ public List getDonations() { @Override public void changeShelterName(String shelterName) throws ShelterCreationFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(shelterName, SHELTER_NAME_REQUIRED_ERROR, ShelterCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(shelterName, SHELTER_NAME_REQUIRED_ERROR, ShelterCreationFailureException.class); this.shelterName = shelterName; } @Override public void changeAddress(Address address) throws ShelterCreationFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(address, ADDRESS_REQUIRED_ERROR, ShelterCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(address, ADDRESS_REQUIRED_ERROR, ShelterCreationFailureException.class); this.address = address; } @Override public void addDonation(Donation donation) throws ShelterCreationFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(donation, DONATION_REQUIRED_ERROR, ShelterCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(donation, DONATION_REQUIRED_ERROR, ShelterCreationFailureException.class); this.donations.add(donation); } } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Address.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Address.java index 8d72060..a8699a9 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Address.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Address.java @@ -2,12 +2,14 @@ import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; import diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; import lombok.Getter; /** * Classe {@link Address} representa um endereço físico. *

    - * Um endereço é composto pela rua, número, bairro, cidade, estado e CEP (código postal). + * Um endereço é composto pelo id, rua, número, bairro, cidade, estado e CEP (código postal). * Cada um destes campos é uma string e é validado no momento da criação de um objeto {@link Address}. * Se um destes campos estiver faltando ou em branco, uma exceção {@link AddressCreationFailureException} será lançada. *

    @@ -25,7 +27,9 @@ public class Address { public static final String CITY_NAME_ERROR_MESSAGE = "Por favor, certifique-se de que o nome da cidade foi inserido corretamente."; public static final String STATE_NAME_ERROR_MESSAGE = "Por favor, certifique-se de que o nome do Estado foi inserido corretamente."; public static final String CEP_ERROR_MESSAGE = "Por favor, certifique-se de que o CEP foi inserido corretamente."; + public static final String INVALID_ID_MESSAGE = "Deve ser fornecido um ID válido"; + private final String id; private final String street; private final String number; private final String neighborhood; @@ -36,6 +40,7 @@ public class Address { /** * Construtor para a classe {@link Address}. Cada um dos parâmetros é usado para definir os detalhes de um endereço. * + * @param id A string que representa o UUID do endereço. * @param street A string que representa a rua do endereço. * @param number A string que representa o número da residência no endereço. * @param neighborhood A string que representa o bairro do endereço. @@ -48,7 +53,8 @@ public class Address { * Isso é feito através da verificação de que cada campo não seja nulo nem em branco. * Se algum campo for inválido, será lançada uma exceção {@link AddressCreationFailureException} específica para aquele campo. */ - public Address(String street, String number, String neighborhood, String city, String state, String zip) { + public Address(String id, String street, String number, String neighborhood, String city, String state, String zip) { + this.id = id; this.street = street; this.number = number; this.neighborhood = neighborhood; @@ -67,6 +73,11 @@ public Address(String street, String number, String neighborhood, String city, S * a mensagem de erro específica para aquele campo. */ private void validateData() { + try { + UuidUtils.isValidUUID(this.id); + } catch (UuidUtilsException e) { + throw new AddressCreationFailureException(INVALID_ID_MESSAGE, e); + } this.validateData(this.street, STREET_NAME_ERROR_MESSAGE); this.validateData(this.number, RESIDENCE_NUMBER_ERROR_MESSAGE); this.validateData(this.neighborhood, NEIGHBORHOOD_NAME_ERROR_MESSAGE); diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Donation.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Donation.java index 1037214..b005b69 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Donation.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/Donation.java @@ -1,6 +1,9 @@ package diegosneves.github.conectardoacoes.core.domain.shelter.entity.value; import diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; +import diegosneves.github.conectardoacoes.core.utils.ValidationUtils; import lombok.Getter; /** @@ -16,18 +19,28 @@ public class Donation { public static final String INVALID_DESCRIPTION_ERROR = "A descrição da doação está vazia ou nula"; public static final String INVALID_QUANTITY = "A quantidade deve ser maior que zero"; public static final int DEFAULT_DONATION_AMOUNT = 1; + public static final String INVALID_ID_MESSAGE = "Deve fornecer um ID válido"; - private String description; - private Integer amount; + private final String id; + private final String description; + private final Integer amount; /** - * Construtor da entidade Donation. + * Construtor para criar uma nova instância de doação. * - * @param description Descrição da doação. - * @param amount Quantidade da doação. - * @throws DonationRegisterFailureException se a descrição ou a quantidade da doação forem inválidos. + *

    + * Esse construtor aceita três argumentos que representam o id, a descrição e a quantidade da doação. + * Ele valida os argumentos fornecidos e pode lançar uma {@code DonationRegisterFailureException} + * se a descrição ou a quantidade fornecida forem inválidas. + *

    + * + * @param id O identificador único para a doação. + * @param description Descrição detalhada da doação. + * @param amount Quantidade de doação. + * @throws DonationRegisterFailureException Se a descrição é nula ou vazia, ou se a quantidade é nula. */ - public Donation(String description, Integer amount) { + public Donation(String id, String description, Integer amount) { + this.id = id; this.description = description; this.amount = this.defaultAmount(amount); this.validateData(); @@ -39,9 +52,12 @@ public Donation(String description, Integer amount) { * @throws DonationRegisterFailureException se a descrição da doação for nula ou vazia. */ private void validateData() throws DonationRegisterFailureException { - if (this.description == null || this.description.trim().isEmpty()) { - throw new DonationRegisterFailureException(INVALID_DESCRIPTION_ERROR); + try { + UuidUtils.isValidUUID(this.id); + } catch (UuidUtilsException e) { + throw new DonationRegisterFailureException(INVALID_ID_MESSAGE, e); } + ValidationUtils.validateNotNullOrEmpty(this.description, INVALID_DESCRIPTION_ERROR, DonationRegisterFailureException.class); } /** @@ -52,9 +68,7 @@ private void validateData() throws DonationRegisterFailureException { * @throws DonationRegisterFailureException se a quantia é nula. */ private Integer defaultAmount(Integer amount) throws DonationRegisterFailureException { - if (amount == null) { - throw new DonationRegisterFailureException(INVALID_QUANTITY); - } + ValidationUtils.validateNotNullOrEmpty(amount, INVALID_QUANTITY, DonationRegisterFailureException.class); return (amount < DEFAULT_DONATION_AMOUNT) ? DEFAULT_DONATION_AMOUNT : amount; } } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/factory/AddressFactory.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/factory/AddressFactory.java new file mode 100644 index 0000000..8d67834 --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/factory/AddressFactory.java @@ -0,0 +1,49 @@ +package diegosneves.github.conectardoacoes.core.domain.shelter.factory; + +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; + +/** + * Fábrica estática para a criação de instâncias da classe {@link Address}. + *

    + * Esta fábrica oculta a lógica de criação de um endereço, incluindo a geração de um UUID único para cada endereço criado. + * Ao encapsular o processo de criação de endereços dentro desta fábrica, o código externo é simplificado e a responsabilidade do controle de versões é mantida dentro da classe {@link AddressFactory} em vez de ser espalhada por várias partes do programa. + *

    + * Nota: Esta classe foi projetada para ser usada apenas para a criação de endereços. Não deve ser sub-classificada ou usada como referência. Para criar um novo endereço, use o método {@link #create} desta classe. + * + * @author diegoneves + * @since 1.0.0 + */ +public class AddressFactory { + + /** + * Construtor privado. + *

    + * Isso é usado para assegurar que nenhuma instância da classe {@link AddressFactory} seja criada. A classe {@link AddressFactory} deve ser usada apenas através de chamadas a seu método {@link #create}. + * Como tal, um objeto {@link AddressFactory} nunca deve ser instanciado. + */ + private AddressFactory() { + } + + /** + * Método estático para criação de uma nova instância de {@link Address}. + *

    + * Este método é responsável por criar uma nova instância de {@link Address}, que representa um endereço físico, utilizando + * os parâmetros fornecidos e gerando um UUID para o novo Endereço. + * + * @param street A string que representa a rua do endereço. + * @param number A string que representa o número da residência no endereço. + * @param neighborhood A string que representa o bairro do endereço. + * @param city A string que representa a cidade do endereço. + * @param state A string que representa o estado do endereço. + * @param zip A string que representa o código postal do endereço. + * @return Uma nova instância da classe {@link Address} com os parâmetros fornecidos. + * @throws AddressCreationFailureException Se algum dos parâmetros fornecidos estiver nulo ou em branco, + * conforme validado pela classe {@link Address}. + * @see Address + */ + public static Address create(String street, String number, String neighborhood, String city, String state, String zip) throws AddressCreationFailureException { + return new Address(UuidUtils.generateUuid(), street, number, neighborhood, city, state, zip); + } +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/factory/DonationFactory.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/factory/DonationFactory.java new file mode 100644 index 0000000..06971fe --- /dev/null +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/factory/DonationFactory.java @@ -0,0 +1,44 @@ +package diegosneves.github.conectardoacoes.core.domain.shelter.factory; + +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; + +/** + * Classe utilitária para fornecer funções de fábrica para a criação de instâncias {@link Donation}. + * + *

    + * Essa classe é usada para isolar a lógica de criação de uma instância de doação, garantindo que sempre seja adequada + * para uso assim que for criada. + *

    + * + *

    + * Essa classe é uma classe de utilitário e não pode ser instanciada. Ela só fornece um método estático. + *

    + * + * @author diegoneves + * @since 1.0.0 + */ +public class DonationFactory { + + /** + * Construtor privado para evitar a instânciação de uma classe de utilitário. + */ + private DonationFactory() {} + + /** + * Cria e retorna uma nova instância de doação. + * + * @param description Descrição da doação a ser criada. + * @param amount A quantidade da doação a ser criada. + * @return Uma nova instância de doação. + * + * @throws DonationRegisterFailureException Se as regras de validação da doação falharem. + * @throws UuidUtilsException Se a geração do UUID falhar. + */ + public static Donation created(String description, Integer amount) { + return new Donation(UuidUtils.generateUuid(), description, amount); + } + +} diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterRepository.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterContractRepository.java similarity index 85% rename from src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterRepository.java rename to src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterContractRepository.java index 5f77e14..d436851 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterRepository.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/shelter/shared/repository/ShelterContractRepository.java @@ -5,7 +5,7 @@ import diegosneves.github.conectardoacoes.core.repository.RepositoryContract; /** - * A interface {@link ShelterRepository} herda da interface {@link RepositoryContract}. + * A interface {@link ShelterContractRepository} herda da interface {@link RepositoryContract}. * Ela define o contrato para um repositório que persiste e recupera as entidades {@link ShelterContract}. *

    * Tem as seguintes operações básicas: @@ -24,6 +24,6 @@ * @see RepositoryContract * @see Shelter */ -public interface ShelterRepository extends RepositoryContract { +public interface ShelterContractRepository extends RepositoryContract { } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/entity/User.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/entity/User.java index 79faa7c..d0cfd77 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/entity/User.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/entity/User.java @@ -76,15 +76,15 @@ public User(String id, String userName, String email, UserProfile userProfile, S * faltando, em branco ou é inválido */ private void validateData() throws UserCreationFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.userProfile, PROFILE_NOT_PROVIDED, UserCreationFailureException.class); - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.userName, String.format(USERNAME_REQUIRED, this.userProfile), UserCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(this.userProfile, PROFILE_NOT_PROVIDED, UserCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(this.userName, String.format(USERNAME_REQUIRED, this.userProfile), UserCreationFailureException.class); try { UuidUtils.isValidUUID(this.id); } catch (UuidUtilsException e) { throw new UserCreationFailureException(USER_ID_REQUIRED, e); } - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.email, EMAIL_NOT_PROVIDED, UserCreationFailureException.class); - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.userPassword, PASSWORD_NOT_PROVIDED, UserCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(this.email, EMAIL_NOT_PROVIDED, UserCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(this.userPassword, PASSWORD_NOT_PROVIDED, UserCreationFailureException.class); } @@ -115,13 +115,13 @@ public String getEmail() { @Override public void changeUserPassword(String password) throws UserCreationFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(password, PASSWORD_NOT_PROVIDED, UserCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(password, PASSWORD_NOT_PROVIDED, UserCreationFailureException.class); this.userPassword = password; } @Override public void changeUserName(String updatedUsername) { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(updatedUsername, String.format(USERNAME_REQUIRED, this.userProfile), UserCreationFailureException.class); + ValidationUtils.validateNotNullOrEmpty(updatedUsername, String.format(USERNAME_REQUIRED, this.userProfile), UserCreationFailureException.class); this.userName = updatedUsername; } } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserRepository.java b/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserContractRepository.java similarity index 58% rename from src/main/java/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserRepository.java rename to src/main/java/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserContractRepository.java index 5f12dae..5d8cac2 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserRepository.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/domain/user/shared/repository/UserContractRepository.java @@ -4,7 +4,7 @@ import diegosneves.github.conectardoacoes.core.repository.RepositoryContract; /** - * A interface {@link UserRepository} herda de {@link RepositoryContract} que é parametrizada com {@link UserContract}. + * A interface {@link UserContractRepository} herda de {@link RepositoryContract} que é parametrizada com {@link UserContract}. * Ela fornece funcionalidades específicas ao usuário como adicionar, atualizar, deletar e procurar informações de usuários no banco de dados. * *

    Os métodos herdados de {@link RepositoryContract} devem ser implementados em uma classe de repositório de usuário para fornecer o impacto @@ -13,10 +13,10 @@ *

    Os detalhes de cada operação são como segue: * *

      - *
    • {@link RepositoryContract#save(Object) save(UserContract entity)} - Salva ou atualiza as informações de um usuário no banco de dados - *
    • {@link RepositoryContract#findById(String id) findById(String id)} - Retorna um usuário procurando pelo ID - *
    • {@link RepositoryContract#findAll() findAll()} - Retorna todos os usuários do banco de dados - *
    • {@link RepositoryContract#deleteById(String id) deleteById(String id)} - Busca e deleta o usuário pelo ID + *
    • {@link RepositoryContract#persist(Object) persist(UserContract entity)} - Salva ou atualiza as informações de um usuário no banco de dados + *
    • {@link RepositoryContract#findEntityById(String id) findEntityById(String id)} - Retorna um usuário procurando pelo ID + *
    • {@link RepositoryContract#retrieveAll() retrieveAll()} - Retorna todos os usuários do banco de dados + *
    • {@link RepositoryContract#deleteEntityById(String id) deleteEntityById(String id)} - Busca e deleta o usuário pelo ID *
    * *

    Caso as operações de pesquisa não possam encontrar usuário(s) correspondente, eles retornarão um valor nulo ou uma lista vazia. @@ -26,6 +26,6 @@ * @see RepositoryContract * @see UserContract */ -public interface UserRepository extends RepositoryContract { +public interface UserContractRepository extends RepositoryContract { } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/exception/AddressCreationFailureException.java b/src/main/java/diegosneves/github/conectardoacoes/core/exception/AddressCreationFailureException.java index 635b159..658d7cb 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/exception/AddressCreationFailureException.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/exception/AddressCreationFailureException.java @@ -21,6 +21,18 @@ * } * *

    + *

    + *

    + *     {@code
    + * try {
    + *    // código de criação de um Endereço.
    + * } catch (AlgumaExcecao e) {
    + *    throw new AdressCreationFailureException("Detalhe da falha", e);
    + * }
    + * }
    + * 
    + *

    + * * @author diegosneves * @see RuntimeException * @since 1.0.0 @@ -39,4 +51,18 @@ public AddressCreationFailureException(String message) { super(ERROR.buildMessage(message)); } + /** + * Construtor para AddressCreationFailureException. Este construtor aceita uma mensagem e uma causa {@link Throwable}. + * Ele chama o construtor da superclasse ({@link RuntimeException}), passando uma mensagem de erro construída usando o objeto {@code ERROR} e a string de mensagem fornecida, + * juntamente com a causa {@link Throwable} da exceção. + * Este construtor é particularmente útil quando uma exceção é capturada no bloco {@code try} e precisa ser envolvida em uma {@link AddressCreationFailureException}. + * A causa {@link Throwable} ajuda a manter a cadeia de exceções para uma melhor depuração. + * + * @param message O detalhe específico desta instância de falha ao criar um Endereço. + * @param cause A exceção original que causou a falha. + */ + public AddressCreationFailureException(String message, Throwable cause) { + super(ERROR.buildMessage(message), cause); + } + } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/exception/DonationRegisterFailureException.java b/src/main/java/diegosneves/github/conectardoacoes/core/exception/DonationRegisterFailureException.java index c975f44..eab59f1 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/exception/DonationRegisterFailureException.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/exception/DonationRegisterFailureException.java @@ -38,4 +38,14 @@ public DonationRegisterFailureException(String message) { super(ERROR.buildMessage(message)); } + /** + * Construtor da classe exceção que aceita uma mensagem de erro e um Throwable como causa da exceção. + * + * @param message Mensagem de erro específica para a ocorrência da exceção. + * @param cause Causa-raíz da exceção. + */ + public DonationRegisterFailureException(String message, Throwable cause) { + super(ERROR.buildMessage(message), cause); + } + } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/repository/RepositoryContract.java b/src/main/java/diegosneves/github/conectardoacoes/core/repository/RepositoryContract.java index 25b1cc9..b52d56c 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/repository/RepositoryContract.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/repository/RepositoryContract.java @@ -26,14 +26,14 @@ public interface RepositoryContract { * @param id o identificador único da entidade que deve ser procurada. * @return a entidade encontrada ou {@code null} se nenhuma entidade com o identificador especificado pôde ser encontrada. */ - T findById(String id); + T findEntityById(String id); /** * Encontra todas as entidades de um determinado tipo. * * @return uma lista contendo todas as entidades ou uma lista vazia se não houver entidades. */ - List findAll(); + List retrieveAll(); /** * Salva uma entidade. @@ -42,7 +42,7 @@ public interface RepositoryContract { * @return a entidade salva. * @throws IllegalArgumentException se a entidade passada como parâmetro for {@code null}. */ - T save(T entity); + T persist(T entity); /** * Deleta uma entidade pelo seu identificador. @@ -50,6 +50,6 @@ public interface RepositoryContract { * @param id o identificador único da entidade que deve ser deletada. * @throws NoSuchElementException se nenhuma entidade com o identificador especificado pôde ser encontrada. */ - void deleteById(String id); + void deleteEntityById(String id); } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/service/ShelterService.java b/src/main/java/diegosneves/github/conectardoacoes/core/service/ShelterService.java index 4a48ade..34717dc 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/service/ShelterService.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/service/ShelterService.java @@ -5,7 +5,7 @@ import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; import diegosneves.github.conectardoacoes.core.domain.shelter.factory.ShelterFactory; -import diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterRepository; +import diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository; import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; import diegosneves.github.conectardoacoes.core.exception.ShelterServiceFailureException; @@ -23,7 +23,7 @@ * @author diegoneves * @since 1.0.0 * @see ShelterServiceContract - * @see ShelterRepository + * @see ShelterContractRepository */ public class ShelterService implements ShelterServiceContract { @@ -32,15 +32,15 @@ public class ShelterService implements ShelterServiceContract { public static final String ERROR_MESSAGE_ADDRESS_NULL = "O Endereço fornecido não deve ser nulo"; public static final String DONATION_REQUIRED_ERROR_MESSAGE = "A Doação fornecida deve ser válida."; - private final ShelterRepository shelterRepository; + private final ShelterContractRepository shelterContractRepository; - public ShelterService(ShelterRepository shelterRepository) { - this.shelterRepository = shelterRepository; + public ShelterService(ShelterContractRepository shelterContractRepository) { + this.shelterContractRepository = shelterContractRepository; } /** * Este método cria um novo {@link ShelterContract} utilizando {@link ShelterFactory#create}. - * O novo objeto {@link Shelter} é salvo usando o método {@link ShelterRepository#save}. + * O novo objeto {@link Shelter} é salvo usando o método {@link ShelterContractRepository#persist}. * * @param shelterName O nome do abrigo como uma string. * @param address uma instancia do objeto {@link Address} representando o endereço do abrigo @@ -48,12 +48,12 @@ public ShelterService(ShelterRepository shelterRepository) { * @return um novo objeto {@link ShelterContract} * @throws ShelterCreationFailureException quando uma falha ocorre durante a criação do {@link ShelterContract} * @see ShelterFactory - * @see ShelterRepository + * @see ShelterContractRepository */ @Override public ShelterContract createShelter(String shelterName, Address address, UserContract responsibleUser) throws ShelterCreationFailureException { Shelter newShelter = ShelterFactory.create(shelterName, address, responsibleUser); - return this.shelterRepository.save(newShelter); + return this.shelterContractRepository.persist(newShelter); } /** @@ -66,12 +66,12 @@ public ShelterContract createShelter(String shelterName, Address address, UserCo @Override public ShelterContract getShelter(String shelterId) throws ShelterServiceFailureException { validateShelterId(shelterId); - return this.shelterRepository.findById(shelterId); + return this.shelterContractRepository.findEntityById(shelterId); } /** * Valida o ID do abrigo fornecido. Primeiro, verifica se o ID do abrigo é nulo ou vazio usando - * {@link ValidationUtils#checkNotNullAndNotEmptyOrThrowException}. Em seguida, tenta verificar se o ID do abrigo é um UUID válido + * {@link ValidationUtils#validateNotNullOrEmpty}. Em seguida, tenta verificar se o ID do abrigo é um UUID válido * usando {@link UuidUtils#isValidUUID}. * Se qualquer uma dessas verificações falhar, ele lançará uma {@link ShelterServiceFailureException} com uma mensagem que indica * que o ID do abrigo fornecido é inválido. @@ -80,7 +80,7 @@ public ShelterContract getShelter(String shelterId) throws ShelterServiceFailure * @throws ShelterServiceFailureException Se o ID do abrigo fornecido for nulo, vazio ou não for um UUID válido. */ private static void validateShelterId(String shelterId) throws ShelterServiceFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(shelterId, INVALID_SHELTER_ID_MESSAGE, ShelterServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(shelterId, INVALID_SHELTER_ID_MESSAGE, ShelterServiceFailureException.class); try { UuidUtils.isValidUUID(shelterId); } catch (UuidUtilsException e) { @@ -92,13 +92,13 @@ private static void validateShelterId(String shelterId) throws ShelterServiceFai * Este método é usado para alterar o nome do abrigo identificado pelo ID fornecido. *

    * Primeiro, o método valida se o novo nome não é nulo nem vazio usando - * {@link ValidationUtils#checkNotNullAndNotEmptyOrThrowException}. Se a validação falhar, + * {@link ValidationUtils#validateNotNullOrEmpty}. Se a validação falhar, * uma {@link ShelterServiceFailureException} é lançada com uma mensagem indicando que o novo nome do abrigo é inválido. *

    * O nome do abrigo recuperado é então alterado para o novo nome fornecido usando o método * {@link ShelterContract#changeShelterName}. *

    - * Finalmente, o abrigo com o nome atualizado é salvo no repositório usando {@link ShelterRepository#save}. + * Finalmente, o abrigo com o nome atualizado é salvo no repositório usando {@link ShelterContractRepository#persist}. * * @param shelterId O ID do abrigo cujo nome será alterado. Deve ser uma identificação válida de um abrigo existente. * @param newName O novo nome para o abrigo. Ele não pode ser {@code null} ou uma String vazia. @@ -107,23 +107,23 @@ private static void validateShelterId(String shelterId) throws ShelterServiceFai */ @Override public void changeShelterName(String shelterId, String newName) throws ShelterServiceFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(newName, INVALID_SHELTER_NAME_ERROR_MESSAGE, ShelterServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(newName, INVALID_SHELTER_NAME_ERROR_MESSAGE, ShelterServiceFailureException.class); ShelterContract updatedShelter = this.getShelter(shelterId); updatedShelter.changeShelterName(newName); - this.shelterRepository.save(updatedShelter); + this.shelterContractRepository.persist(updatedShelter); } /** * Este método é usado para alterar o endereço do abrigo identificado pelo ID fornecido. *

    * Primeiro, o método valida se o novo endereço não é nulo usando - * {@link ValidationUtils#checkNotNullAndNotEmptyOrThrowException}. Se a validação falhar, + * {@link ValidationUtils#validateNotNullOrEmpty}. Se a validação falhar, * uma {@link ShelterServiceFailureException} é lançada com uma mensagem indicando que o novo endereço do abrigo é inválido. *

    * O endereço do abrigo recuperado é então alterado para o novo endereço fornecido usando o método * {@link ShelterContract#changeAddress}. *

    - * Finalmente, o abrigo com o endereço atualizado é salvo no repositório usando {@link ShelterRepository#save}. + * Finalmente, o abrigo com o endereço atualizado é salvo no repositório usando {@link ShelterContractRepository#persist}. * * @param shelterId O ID do abrigo cujo endereço será alterado. Deve ser uma identificação válida de um abrigo existente. * @param address O novo endereço para o abrigo. Ele não pode ser {@code null} ou uma instância inválida de {@link Address}. @@ -132,23 +132,23 @@ public void changeShelterName(String shelterId, String newName) throws ShelterSe */ @Override public void changeAddress(String shelterId, Address address) throws ShelterServiceFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(address, ERROR_MESSAGE_ADDRESS_NULL, ShelterServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(address, ERROR_MESSAGE_ADDRESS_NULL, ShelterServiceFailureException.class); ShelterContract updatedShelter = this.getShelter(shelterId); updatedShelter.changeAddress(address); - this.shelterRepository.save(updatedShelter); + this.shelterContractRepository.persist(updatedShelter); } /** * Este método é responsável por adicionar uma {@link Donation} a um {@link ShelterContract} específico, identificado por seu id. *

    * Primeiro, ele confirma que o objeto {@link Donation} não é nulo usando - * {@link ValidationUtils#checkNotNullAndNotEmptyOrThrowException}. Se este objeto {@link Donation} for nulo, + * {@link ValidationUtils#validateNotNullOrEmpty}. Se este objeto {@link Donation} for nulo, * ele lança uma {@link ShelterServiceFailureException}. *

    * Em seguida, ele usa o id do abrigo fornecido para obter o {@link ShelterContract} correspondente. * Este {@link ShelterContract} é então atualizado adicionando a {@link Donation} fornecida. *

    - * Finalmente, o {@link ShelterContract} atualizado é salvo no repositorio usando {@link ShelterRepository#save}. + * Finalmente, o {@link ShelterContract} atualizado é salvo no repositorio usando {@link ShelterContractRepository#persist}. * * @param shelterId O ID do abrigo ao qual a doação será adicionada. Deve ser uma identificação válida de um abrigo existente. * @param donation Uma instancia do objeto {@link Donation} representando a doação a ser adicionada. @@ -157,10 +157,10 @@ public void changeAddress(String shelterId, Address address) throws ShelterServi */ @Override public void addDonation(String shelterId, Donation donation) throws ShelterServiceFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(donation, DONATION_REQUIRED_ERROR_MESSAGE, ShelterServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(donation, DONATION_REQUIRED_ERROR_MESSAGE, ShelterServiceFailureException.class); ShelterContract updatedShelter = this.getShelter(shelterId); updatedShelter.addDonation(donation); - this.shelterRepository.save(updatedShelter); + this.shelterContractRepository.persist(updatedShelter); } /** diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/service/UserService.java b/src/main/java/diegosneves/github/conectardoacoes/core/service/UserService.java index 161df95..7f9b788 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/service/UserService.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/service/UserService.java @@ -4,7 +4,7 @@ import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; import diegosneves.github.conectardoacoes.core.domain.user.factory.UserFactory; -import diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserRepository; +import diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository; import diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException; import diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException; import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; @@ -15,14 +15,14 @@ * A classe {@link UserService} implementa um contratato do serviço do usuário {@link UserServiceContract}. * Ela fornece os métodos para gerenciar usuários, incluindo criação de um novo usuário, recuperação de um usuário pelo seu ID, * alteração da senha do usuário e alteração do nome de usuário. - *

    Isso é feito por meio da interação com o repositório de usuários {@link UserRepository}, onde os dados do usuário são armazenados. + *

    Isso é feito por meio da interação com o repositório de usuários {@link UserContractRepository}, onde os dados do usuário são armazenados. *

    Os métodos implementados nesta classe realizam checagens de validação para garantir que os dados do usuário sejam válidos. * Se quaisquer dados inválidos forem fornecidos, como um ID de usuário, senha ou nome de usuário nulo ou em branco, * eles lançarão uma exceção {@link UserServiceFailureException}. * * @author diegoneves * @see UserServiceContract - * @see UserRepository + * @see UserContractRepository * @see UserServiceFailureException * @since 1.0.0 */ @@ -33,10 +33,10 @@ public class UserService implements UserServiceContract { public static final String USER_NOT_FOUND_MESSAGE = "Usuário não encontrado"; public static final String USERNAME_INVALID_ERROR_MESSAGE = "O novo nome de usuário informado é inválido."; - private final UserRepository userRepository; + private final UserContractRepository userContractRepository; - public UserService(UserRepository userRepository) { - this.userRepository = userRepository; + public UserService(UserContractRepository userContractRepository) { + this.userContractRepository = userContractRepository; } /** @@ -52,7 +52,7 @@ public UserService(UserRepository userRepository) { @Override public UserContract createUser(String username, String email, UserProfile userProfile, String password) throws UserCreationFailureException { User newUser = UserFactory.create(username, email, userProfile, password); - return this.userRepository.save(newUser); + return this.userContractRepository.persist(newUser); } /** @@ -65,7 +65,7 @@ public UserContract createUser(String username, String email, UserProfile userPr @Override public UserContract getUser(String userId) { validateUserId(userId); - return this.userRepository.findById(userId); + return this.userContractRepository.findEntityById(userId); } /** @@ -90,7 +90,7 @@ public UserContract getUser(String userId) { * informação contextual adicional quando o UUID não é válido. */ private static void validateUserId(String userId) throws UserServiceFailureException { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(userId, INVALID_IDENTIFIER_ERROR_MESSAGE, UserServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(userId, INVALID_IDENTIFIER_ERROR_MESSAGE, UserServiceFailureException.class); try { UuidUtils.isValidUUID(userId); } catch (UuidUtilsException e) { @@ -107,11 +107,11 @@ private static void validateUserId(String userId) throws UserServiceFailureExcep */ @Override public void changePassword(String userId, String newPassword) { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(newPassword, INVALID_NEW_PASSWORD_MESSAGE, UserServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(newPassword, INVALID_NEW_PASSWORD_MESSAGE, UserServiceFailureException.class); UserContract retrievedUser = this.getUser(userId); - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(retrievedUser, USER_NOT_FOUND_MESSAGE, UserServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(retrievedUser, USER_NOT_FOUND_MESSAGE, UserServiceFailureException.class); retrievedUser.changeUserPassword(newPassword); - this.userRepository.save(retrievedUser); + this.userContractRepository.persist(retrievedUser); } /** @@ -123,10 +123,10 @@ public void changePassword(String userId, String newPassword) { */ @Override public void changeUserName(String userId, String newUsername) { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(newUsername, USERNAME_INVALID_ERROR_MESSAGE, UserServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(newUsername, USERNAME_INVALID_ERROR_MESSAGE, UserServiceFailureException.class); UserContract retrievedUser = this.getUser(userId); - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(retrievedUser, USER_NOT_FOUND_MESSAGE, UserServiceFailureException.class); + ValidationUtils.validateNotNullOrEmpty(retrievedUser, USER_NOT_FOUND_MESSAGE, UserServiceFailureException.class); retrievedUser.changeUserName(newUsername); - this.userRepository.save(retrievedUser); + this.userContractRepository.persist(retrievedUser); } } diff --git a/src/main/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtils.java b/src/main/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtils.java index ae90b3d..f4824f0 100644 --- a/src/main/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtils.java +++ b/src/main/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtils.java @@ -17,21 +17,18 @@ private ValidationUtils() { } /** - * Valida se o objeto especificado é nulo ou vazio, caso seja uma instância de String. + * Valida a entrada com base nas condições para nulo e vazio (no caso de String). * Lança uma exceção com a mensagem de erro fornecida, se uma destas condições for verdadeira. * Este método pode ser utilizado para a validação de entradas onde dados são obrigatórios. * * @param o tipo de objeto a ser verificado - * @param object o objeto a ser validado + * @param input o objeto a ser validado * @param errorMessage a mensagem de erro a ser anexada à exceção em caso de falhas na validação * @param customException a classe da exceção RuntimeException a ser lançada * @throws RuntimeException se o objeto fornecido for nulo ou se fora uma instância de String e estiver vazia */ - public static void checkNotNullAndNotEmptyOrThrowException(T object, String errorMessage, Class customException) throws RuntimeException { - if (object == null) { - throwException(errorMessage, customException); - } - if (object instanceof String && ((String) object).trim().isEmpty()) { + public static void validateNotNullOrEmpty(T input, String errorMessage, Class customException) { + if (input == null || (input instanceof String && ((String) input).trim().isEmpty())) { throwException(errorMessage, customException); } } diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImplTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImplTest.java new file mode 100644 index 0000000..e6605b8 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/controller/imp/ShelterControllerImplTest.java @@ -0,0 +1,111 @@ +package diegosneves.github.conectardoacoes.adapters.rest.controller.imp; + +import com.fasterxml.jackson.databind.ObjectMapper; +import diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO; +import diegosneves.github.conectardoacoes.adapters.rest.dto.UserEntityDTO; +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse; +import diegosneves.github.conectardoacoes.adapters.rest.service.ShelterEntityService; +import lombok.SneakyThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(SpringExtension.class) +class ShelterControllerImplTest { + + public static final String SHELTER_ID = "56eec2ee-d9ca-40be-aec2-eed9ca90be0b"; + public static final String SHELTER_NAME = "Nome"; + + public static final String STREET = "Rua"; + public static final String NUMBER = "258"; + public static final String NEIGHBORHOOD = "Bairro"; + public static final String CITY = "Cidade"; + public static final String STATE = "Estado"; + public static final String ZIP = "98456123"; + + public static final String USER_ID = "3925e5e4-7e14-4a15-a5e5-e47e14ca1539"; + public static final String USER_NAME = "Usuario"; + public static final String USER_EMAIL = "email@email.com"; + + + @InjectMocks + private ShelterControllerImpl shelterController; + + @Mock + private ShelterEntityService shelterEntityService; + + private MockMvc mockMvc; + + @BeforeEach + void setUp() { + this.mockMvc = MockMvcBuilders.standaloneSetup(this.shelterController).build(); + } + + @Test + @SneakyThrows + void testCreateShelter() { + ObjectMapper objectMapper = new ObjectMapper(); + + AddressDTO addressDTO = AddressDTO.builder() + .street(STREET) + .number(NUMBER) + .neighborhood(NEIGHBORHOOD) + .city(CITY) + .state(STATE) + .zip(ZIP) + .build(); + + UserEntityDTO userDTO = UserEntityDTO.builder() + .id(USER_ID) + .userName(USER_NAME) + .email(USER_EMAIL) + .userProfile(UserProfileType.DONOR) + .build(); + + ShelterCreationRequest request = ShelterCreationRequest.builder() + .shelterName(SHELTER_NAME) + .address(addressDTO) + .responsibleUserEmail(USER_EMAIL) + .build(); + + ShelterCreatedResponse expectedResponse = ShelterCreatedResponse.builder() + .id(SHELTER_ID) + .shelterName(SHELTER_NAME) + .address(addressDTO) + .responsibleUser(userDTO) + .build(); + + when(this.shelterEntityService.createShelter(any(ShelterCreationRequest.class))).thenReturn(expectedResponse); + + String requestJson = objectMapper.writeValueAsString(request); + String expectedResponseJson = objectMapper.writeValueAsString(expectedResponse); + + this.mockMvc.perform(post("/shelter/create") + .contentType(MediaType.APPLICATION_JSON) + .content(requestJson)) + .andExpect(status().isCreated()) + .andExpect(content().json(expectedResponseJson)); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapperTest.java new file mode 100644 index 0000000..fb97f0b --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressEntityMapperTest.java @@ -0,0 +1,60 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class AddressEntityMapperTest { + + public static final String ADDRESS_ID = "4cdc1890-6c94-4d8d-9c18-906c944d8da9"; + public static final String STREET = "Rua"; + public static final String NUMBER = "123"; + public static final String NEIGHBORHOOD = "Bairro"; + public static final String CITY = "Cidade"; + public static final String STATE = "Estado"; + public static final String ZIP = "91234567"; + + + private AddressEntityMapper addressEntityMapper; + + private Address address; + + @BeforeEach + void setUp() { + this.addressEntityMapper = new AddressEntityMapper(); + this.address = new Address(ADDRESS_ID, STREET, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP); + } + + @Test + void shouldMapAddressEntityToAddress() { + AddressEntity addressEntity = this.addressEntityMapper.mapFrom(this.address); + + assertNotNull(addressEntity); + assertEquals(ADDRESS_ID, addressEntity.getId()); + assertEquals(STREET, addressEntity.getStreet()); + assertEquals(NUMBER, addressEntity.getNumber()); + assertEquals(NEIGHBORHOOD, addressEntity.getNeighborhood()); + assertEquals(CITY, addressEntity.getCity()); + assertEquals(STATE, addressEntity.getState()); + assertEquals(ZIP, addressEntity.getZip()); + } + + @Test + void shouldThrowExceptionOnMapFromNullAddress() { + this.address = null; + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressEntityMapper.mapFrom(this.address)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressEntityMapper.ADDRESS_CLASS.getSimpleName())), exception.getMessage()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapperTest.java new file mode 100644 index 0000000..a72c3c3 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/AddressMapperTest.java @@ -0,0 +1,186 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class AddressMapperTest { + + public static final String ADDRESS_ID = "5e4c5ca9-46d2-42c3-8c5c-a946d242c3dd"; + public static final String ADDRESS_STREET = "Rua"; + public static final String ADDRESS_NUMBER = "123"; + public static final String ADDRESS_NEIGHBORHOOD = "Bairro"; + public static final String ADDRESS_CITY = "Cidade"; + public static final String ADDRESS_STATE = "Estado"; + public static final String ZIP_CODE = "91234567"; + + private AddressMapper addressMapper; + + private AddressEntity addressEntity; + + @BeforeEach + void setUp() { + this.addressMapper = new AddressMapper(); + this.addressEntity = AddressEntity.builder() + .id(ADDRESS_ID) + .street(ADDRESS_STREET) + .number(ADDRESS_NUMBER) + .neighborhood(ADDRESS_NEIGHBORHOOD) + .city(ADDRESS_CITY) + .state(ADDRESS_STATE) + .zip(ZIP_CODE) + .build(); + } + + @Test + void shouldCorrectlyMapAddressEntityToAddressModel() { + Address address = this.addressMapper.mapFrom(this.addressEntity); + + assertNotNull(address); + assertEquals(ADDRESS_STREET, address.getStreet()); + assertEquals(ADDRESS_NUMBER, address.getNumber()); + assertEquals(ADDRESS_NEIGHBORHOOD, address.getNeighborhood()); + assertEquals(ADDRESS_CITY, address.getCity()); + assertEquals(ADDRESS_STATE, address.getState()); + assertEquals(ZIP_CODE, address.getZip()); + } + + @Test + void shouldThrowExceptionWhenMappingNullAddressEntity() { + this.addressEntity = null; + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingNullAddressStreet() { + this.addressEntity.setStreet(null); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingEmptyAddressStreet() { + this.addressEntity.setStreet(" "); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingNullAddressNumber() { + this.addressEntity.setNumber(null); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingEmptyAddressNumber() { + this.addressEntity.setNumber(""); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingNullAddressNeighborhood() { + this.addressEntity.setNeighborhood(null); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingEmptyAddressNeighborhood() { + this.addressEntity.setNeighborhood(""); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingNullAddressCity() { + this.addressEntity.setCity(null); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingEmptyAddressCity() { + this.addressEntity.setCity(""); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingNullAddressState() { + this.addressEntity.setState(null); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingEmptyAddressState() { + this.addressEntity.setState(""); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingNullAddressZipCode() { + this.addressEntity.setZip(null); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenMappingEmptyAddressZipCode() { + this.addressEntity.setZip(""); + + AddressEntityFailuresException exception = assertThrows(AddressEntityFailuresException.class, () -> this.addressMapper.mapFrom(this.addressEntity)); + + assertNotNull(exception); + assertEquals(AddressEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(AddressMapper.ADDRESS_ENTITY_TYPE.getSimpleName())), exception.getMessage()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapperTest.java new file mode 100644 index 0000000..50f7652 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationEntityMapperTest.java @@ -0,0 +1,53 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class DonationEntityMapperTest { + + public static final String DONATION_ID = "28387d3e-e9cc-45b9-b87d-3ee9cc35b912"; + public static final String DESCRIPTION = "Descricao"; + public static final int AMOUNT = 1; + + + private DonationEntityMapper mapper; + + private Donation donation; + + @BeforeEach + void setUp() { + this.mapper = new DonationEntityMapper(); + this.donation = new Donation(DONATION_ID, DESCRIPTION, AMOUNT); + + } + + @Test + void shouldMapToDonationEntity() { + + DonationEntity donationEntity = this.mapper.mapFrom(this.donation); + + assertNotNull(donationEntity); + assertEquals(DONATION_ID, donationEntity.getId()); + assertEquals(DESCRIPTION, donationEntity.getDescription()); + assertEquals(AMOUNT, donationEntity.getAmount()); + } + + @Test + void shouldThrowExceptionIfDonationIsNull() { + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.mapper.mapFrom(null)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(Donation.class.getSimpleName())), exception.getMessage()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapperTest.java new file mode 100644 index 0000000..7b91746 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/DonationMapperTest.java @@ -0,0 +1,126 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class DonationMapperTest { + + public static final String DONATION_ID = "047bcc50-3193-4ef1-bbcc-5031938ef1a5"; + public static final String DESCRIPTION = "Descricao"; + public static final int AMOUNT = 1; + + + private DonationMapper donationMapper; + + private DonationEntity donationEntity; + + @BeforeEach + void setUp() { + this.donationMapper = new DonationMapper(); + this.donationEntity = DonationEntity.builder() + .id(DONATION_ID) + .description(DESCRIPTION) + .amount(AMOUNT) + .build(); + } + + @Test + void shouldMapFromDonationEntityToDonationWithNegativeAmount() { + this.donationEntity.setAmount(-25); + Donation donation = this.donationMapper.mapFrom(this.donationEntity); + + assertNotNull(donation); + assertEquals(DONATION_ID, donation.getId()); + assertEquals(DESCRIPTION, donation.getDescription()); + assertEquals(AMOUNT, donation.getAmount()); + } + + @Test + void shouldMapFromDonationEntityToDonationWithZeroAmount() { + this.donationEntity.setAmount(0); + Donation donation = this.donationMapper.mapFrom(this.donationEntity); + + assertNotNull(donation); + assertEquals(DONATION_ID, donation.getId()); + assertEquals(DESCRIPTION, donation.getDescription()); + assertEquals(AMOUNT, donation.getAmount()); + } + + @Test + void shouldThrowExceptionWhenDonationEntityIsNull() { + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.donationMapper.mapFrom(null)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenDonationEntityHaveYourIdNull() { + this.donationEntity.setId(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.donationMapper.mapFrom(this.donationEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(DonationRegisterFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", "id"}) + void shouldThrowExceptionWhenDonationEntityHaveYourIdEmptyOrInvalid(String value) { + this.donationEntity.setId(value); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.donationMapper.mapFrom(this.donationEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(DonationRegisterFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenDonationEntityHaveYourDescriptionNull() { + this.donationEntity.setDescription(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.donationMapper.mapFrom(this.donationEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(DonationRegisterFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenDonationEntityHaveYourDescriptionEmpty() { + this.donationEntity.setDescription(""); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.donationMapper.mapFrom(this.donationEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(DonationRegisterFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenDonationEntityHaveYourAmountNull() { + this.donationEntity.setAmount(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.donationMapper.mapFrom(this.donationEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(DonationEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(DonationRegisterFailureException.class, exception.getCause().getClass()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapperTest.java new file mode 100644 index 0000000..4ece40c --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterEntityMapperTest.java @@ -0,0 +1,177 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import lombok.SneakyThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.Field; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@ExtendWith(MockitoExtension.class) +class ShelterEntityMapperTest { + + public static final String SHELTER_ID = "9f0b9d43-80ec-4399-8b9d-4380ecb399c7"; + public static final String SHELTER_NAME = "Abrigo"; + + public static final String USER_ID = "21f29f51-2c17-458d-b29f-512c17058d97"; + public static final String USER_NAME = "Usuario"; + public static final String USER_EMAIL = "email@teste.com"; + public static final String USER_PASSWORD = "Senha"; + + public static final String ADDRESS_ID = "501f97ac-9544-486b-9f97-ac9544486b72"; + public static final String STREET_NAME = "Rua"; + public static final String NUMBER = "123"; + public static final String NEIGHBORHOOD = "Bairro"; + public static final String CITY = "Cidade"; + public static final String STATE = "Estado"; + public static final String ZIP = "91234567"; + + public static final String DONATION_ID = "76e97240-2f2b-4a74-a972-402f2b2a74fc"; + public static final String DONATION_DESCRIPTION = "Doacao"; + public static final int DONATION_AMOUNT = 1; + + + private ShelterEntityMapper mapper; + + private Shelter shelter; + + private Donation donation; + + @BeforeEach + void setUp() { + this.mapper = new ShelterEntityMapper(); + this.donation = new Donation(DONATION_ID, DONATION_DESCRIPTION, DONATION_AMOUNT); + Address address = new Address(ADDRESS_ID, STREET_NAME, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP); + User user = new User(USER_ID, USER_NAME, USER_EMAIL, UserProfile.BENEFICIARY, USER_PASSWORD); + this.shelter = new Shelter(SHELTER_ID, SHELTER_NAME, address, user); + } + + @Test + void shouldMapToShelterEntityWithDonations() { + this.shelter.addDonation(this.donation); + ShelterEntity shelterEntity = this.mapper.mapFrom(this.shelter); + + assertNotNull(shelterEntity, "Shelter entity should not be null"); + assertEquals(SHELTER_ID, shelterEntity.getId()); + assertEquals(SHELTER_NAME, shelterEntity.getShelterName()); + assertNotNull(shelterEntity.getAddress(), "Address is null"); + assertEquals(ADDRESS_ID, shelterEntity.getAddress().getId()); + assertEquals(STREET_NAME, shelterEntity.getAddress().getStreet()); + assertEquals(NUMBER, shelterEntity.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, shelterEntity.getAddress().getNeighborhood()); + assertEquals(CITY, shelterEntity.getAddress().getCity()); + assertEquals(STATE, shelterEntity.getAddress().getState()); + assertEquals(ZIP, shelterEntity.getAddress().getZip()); + assertNotNull(shelterEntity.getResponsibleUser(), "Responsible user is null"); + assertEquals(USER_ID, shelterEntity.getResponsibleUser().getId()); + assertEquals(USER_NAME, shelterEntity.getResponsibleUser().getUserName()); + assertEquals(USER_EMAIL, shelterEntity.getResponsibleUser().getEmail()); + assertEquals(UserProfileType.BENEFICIARY, shelterEntity.getResponsibleUser().getUserProfile()); + assertEquals(USER_PASSWORD, shelterEntity.getResponsibleUser().getUserPassword()); + assertNotNull(shelterEntity.getDonations(), "donations is null"); + assertFalse(shelterEntity.getDonations().isEmpty()); + assertEquals(DONATION_ID, shelterEntity.getDonations().get(0).getId()); + assertEquals(DONATION_DESCRIPTION, shelterEntity.getDonations().get(0).getDescription()); + assertEquals(DONATION_AMOUNT, shelterEntity.getDonations().get(0).getAmount()); + } + + @Test + void shouldMapShelterToEntityWithoutDonations() { + ShelterEntity shelterEntity = this.mapper.mapFrom(this.shelter); + + assertNotNull(shelterEntity, "Shelter entity should not be null"); + assertEquals(SHELTER_ID, shelterEntity.getId()); + assertEquals(SHELTER_NAME, shelterEntity.getShelterName()); + assertNotNull(shelterEntity.getAddress(), "Address is null"); + assertEquals(ADDRESS_ID, shelterEntity.getAddress().getId()); + assertEquals(STREET_NAME, shelterEntity.getAddress().getStreet()); + assertEquals(NUMBER, shelterEntity.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, shelterEntity.getAddress().getNeighborhood()); + assertEquals(CITY, shelterEntity.getAddress().getCity()); + assertEquals(STATE, shelterEntity.getAddress().getState()); + assertEquals(ZIP, shelterEntity.getAddress().getZip()); + assertNotNull(shelterEntity.getResponsibleUser(), "Responsible user is null"); + assertEquals(USER_ID, shelterEntity.getResponsibleUser().getId()); + assertEquals(USER_NAME, shelterEntity.getResponsibleUser().getUserName()); + assertEquals(USER_EMAIL, shelterEntity.getResponsibleUser().getEmail()); + assertEquals(UserProfileType.BENEFICIARY, shelterEntity.getResponsibleUser().getUserProfile()); + assertEquals(USER_PASSWORD, shelterEntity.getResponsibleUser().getUserPassword()); + assertNotNull(shelterEntity.getDonations(), "donations is null"); + assertTrue(shelterEntity.getDonations().isEmpty()); + } + + @Test + @SneakyThrows + void testMapFromShouldHandleNullDonationsFieldInShelter() { + + Field field = this.shelter.getClass().getDeclaredField("donations"); + field.setAccessible(true); + + field.set(this.shelter, null); + + ShelterEntity shelterEntity = this.mapper.mapFrom(this.shelter); + + assertNotNull(shelterEntity, "Shelter entity should not be null"); + assertEquals(SHELTER_ID, shelterEntity.getId()); + assertEquals(SHELTER_NAME, shelterEntity.getShelterName()); + assertNotNull(shelterEntity.getAddress(), "Address is null"); + assertEquals(ADDRESS_ID, shelterEntity.getAddress().getId()); + assertEquals(STREET_NAME, shelterEntity.getAddress().getStreet()); + assertEquals(NUMBER, shelterEntity.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, shelterEntity.getAddress().getNeighborhood()); + assertEquals(CITY, shelterEntity.getAddress().getCity()); + assertEquals(STATE, shelterEntity.getAddress().getState()); + assertEquals(ZIP, shelterEntity.getAddress().getZip()); + assertNotNull(shelterEntity.getResponsibleUser(), "Responsible user is null"); + assertEquals(USER_ID, shelterEntity.getResponsibleUser().getId()); + assertEquals(USER_NAME, shelterEntity.getResponsibleUser().getUserName()); + assertEquals(USER_EMAIL, shelterEntity.getResponsibleUser().getEmail()); + assertEquals(UserProfileType.BENEFICIARY, shelterEntity.getResponsibleUser().getUserProfile()); + assertEquals(USER_PASSWORD, shelterEntity.getResponsibleUser().getUserPassword()); + assertNotNull(shelterEntity.getDonations(), "donations is null"); + assertTrue(shelterEntity.getDonations().isEmpty()); + } + + @Test + void shouldThrowExceptionWhenMappingFromNullShelter() { + this.shelter = null; + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.mapper.mapFrom(this.shelter)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntityMapper.SHELTER_CLASS.getSimpleName())), exception.getMessage()); + } + + @Test + @SneakyThrows + void shouldThrowExceptionWhenMappingFromNullShelterResponsibleUser() { + Field field = this.shelter.getClass().getDeclaredField("responsibleUser"); + field.setAccessible(true); + + field.set(this.shelter, null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.mapper.mapFrom(this.shelter)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntityMapper.SHELTER_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserEntityFailuresException.class, exception.getCause().getClass()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapperTest.java new file mode 100644 index 0000000..aea45f8 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/ShelterMapperTest.java @@ -0,0 +1,245 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.AddressEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException; +import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class ShelterMapperTest { + + private ShelterMapper shelterMapper; + + private ShelterEntity shelterEntity; + private AddressEntity addressEntity; + private UserEntity userEntity; + private DonationEntity donationEntity; + + @BeforeEach + void setUp() { + this.shelterMapper = new ShelterMapper(); + + this.addressEntity = AddressEntity.builder() + .id("0b6a4b56-9a6a-49d4-aa4b-569a6a09d49d") + .street("Rua") + .number("256") + .neighborhood("Bairro") + .city("Cidade") + .state("Estado") + .zip("97110220") + .build(); + + this.userEntity = UserEntity.builder() + .id("60306bda-1ef2-4228-b06b-da1ef26228b1") + .userName("Usuario") + .email("email@teste.com") + .userProfile(UserProfileType.BENEFICIARY) + .userPassword("Senha") + .build(); + + this.donationEntity = DonationEntity.builder() + .id("e9bca351-bdbe-4e46-bca3-51bdbe4e464f") + .description("Descricao") + .amount(10) + .build(); + + this.shelterEntity = ShelterEntity.builder() + .id("5515cf68-f172-4b6f-95cf-68f1725b6f9c") + .shelterName("Shelter Entity") + .address(this.addressEntity) + .responsibleUser(this.userEntity) + .donations(List.of(this.donationEntity)) + .build(); + + } + + @Test + void shouldMapShelterEntityToShelter() { + + ShelterContract shelter = this.shelterMapper.mapFrom(this.shelterEntity); + + assertNotNull(shelter); + assertInstanceOf(Shelter.class, shelter); + assertEquals(this.shelterEntity.getShelterName(), shelter.getShelterName()); + assertEquals(this.shelterEntity.getId(), shelter.getId()); + assertNotNull(shelter.getAddress()); + assertEquals(this.addressEntity.getStreet(), shelter.getAddress().getStreet()); + assertEquals(this.addressEntity.getNumber(), shelter.getAddress().getNumber()); + assertEquals(this.addressEntity.getNeighborhood(), shelter.getAddress().getNeighborhood()); + assertEquals(this.addressEntity.getCity(), shelter.getAddress().getCity()); + assertEquals(this.addressEntity.getState(), shelter.getAddress().getState()); + assertEquals(this.addressEntity.getZip(), shelter.getAddress().getZip()); + assertNotNull(shelter.getUser()); + assertEquals(this.userEntity.getId(), shelter.getUser().getId()); + assertEquals(this.userEntity.getUserName(), shelter.getUser().getUsername()); + assertEquals(this.userEntity.getEmail(), shelter.getUser().getEmail()); + assertEquals(this.userEntity.getUserPassword(), shelter.getUser().getUserPassword()); + assertNotNull(shelter.getUser().getUserProfile()); + assertEquals(UserProfile.BENEFICIARY, shelter.getUser().getUserProfile()); + assertNotNull(shelter.getDonations()); + assertFalse(shelter.getDonations().isEmpty()); + assertEquals(this.shelterEntity.getDonations().size(), shelter.getDonations().size()); + assertEquals(this.donationEntity.getDescription(), shelter.getDonations().get(0).getDescription()); + assertEquals(this.donationEntity.getAmount(), shelter.getDonations().get(0).getAmount()); + } + + @Test + void shouldCorrectlyMapShelterEntityToShelter() { + this.shelterEntity.setDonations(new ArrayList<>()); + + ShelterContract shelter = this.shelterMapper.mapFrom(this.shelterEntity); + + assertNotNull(shelter); + assertInstanceOf(Shelter.class, shelter); + assertEquals(this.shelterEntity.getShelterName(), shelter.getShelterName()); + assertEquals(this.shelterEntity.getId(), shelter.getId()); + assertNotNull(shelter.getAddress()); + assertEquals(this.addressEntity.getStreet(), shelter.getAddress().getStreet()); + assertEquals(this.addressEntity.getNumber(), shelter.getAddress().getNumber()); + assertEquals(this.addressEntity.getNeighborhood(), shelter.getAddress().getNeighborhood()); + assertEquals(this.addressEntity.getCity(), shelter.getAddress().getCity()); + assertEquals(this.addressEntity.getState(), shelter.getAddress().getState()); + assertEquals(this.addressEntity.getZip(), shelter.getAddress().getZip()); + assertNotNull(shelter.getUser()); + assertEquals(this.userEntity.getId(), shelter.getUser().getId()); + assertEquals(this.userEntity.getUserName(), shelter.getUser().getUsername()); + assertEquals(this.userEntity.getEmail(), shelter.getUser().getEmail()); + assertEquals(this.userEntity.getUserPassword(), shelter.getUser().getUserPassword()); + assertNotNull(shelter.getUser().getUserProfile()); + assertEquals(UserProfile.BENEFICIARY, shelter.getUser().getUserProfile()); + assertNotNull(shelter.getDonations()); + assertTrue(shelter.getDonations().isEmpty()); + } + + @Test + void shouldThrowExceptionWhenShelterEntityIsNull() { + this.shelterEntity = null; + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + } + + @ParameterizedTest + @ValueSource(strings = {"", "ID"}) + void shouldThrowExceptionWhenShelterEntityIdIsEmptyOrInvalid(String id) { + this.shelterEntity.setId(id); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(ShelterCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenShelterEntityIdIsNull() { + this.shelterEntity.setId(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(ShelterCreationFailureException.class, exception.getCause().getClass()); + } + + + @Test + void shouldThrowExceptionWhenShelterEntityNameIsEmpty() { + this.shelterEntity.setShelterName(" "); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(ShelterCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenShelterEntityNameIsNull() { + this.shelterEntity.setShelterName(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(ShelterCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenShelterEntityAddressIsNull() { + this.shelterEntity.setAddress(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(AddressEntityFailuresException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenShelterEntityResponsibleUserIsNull() { + this.shelterEntity.setResponsibleUser(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + assertEquals(UserEntityFailuresException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenShelterEntityDonationDescriptionIsNull() { + this.donationEntity.setDescription(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(Donation.class.getSimpleName())), exception.getMessage()); + assertEquals(DonationRegisterFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenShelterEntityDonationDescriptionIsEmpty() { + this.donationEntity.setDescription(" "); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, + () -> this.shelterMapper.mapFrom(this.shelterEntity)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(Donation.class.getSimpleName())), exception.getMessage()); + assertEquals(DonationRegisterFailureException.class, exception.getCause().getClass()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapperTest.java new file mode 100644 index 0000000..a5e0cd0 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserEntityMapperTest.java @@ -0,0 +1,91 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ConstructorDefaultUndefinedException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mockStatic; + +@ExtendWith(MockitoExtension.class) +class UserEntityMapperTest { + + public static final String USER_UUID = "3c489878-c78d-4117-8898-78c78d011708"; + public static final String USER_NAME = "Usuario"; + public static final String USER_EMAIL = "email@teste.com"; + public static final String USER_PASSWORD = "Senha"; + + private UserEntityMapper userEntityMapper; + + private User user; + + @BeforeEach + void setUp() { + this.userEntityMapper = new UserEntityMapper(); + this.user = new User(USER_UUID, USER_NAME, USER_EMAIL, UserProfile.DONOR, USER_PASSWORD); + } + + @Test + void shouldCorrectlyMapUserToUserEntity() { + UserEntity userEntity = this.userEntityMapper.mapFrom(this.user); + + assertNotNull(userEntity); + assertEquals(USER_UUID, userEntity.getId()); + assertEquals(USER_NAME, userEntity.getUserName()); + assertEquals(USER_EMAIL, userEntity.getEmail()); + assertEquals(USER_PASSWORD, userEntity.getUserPassword()); + assertEquals(UserProfileType.DONOR, userEntity.getUserProfile()); + } + + @Test + void shouldThrowExceptionWhenMappingNullUser() { + this.user = null; + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityMapper.mapFrom(this.user)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserEntityMapper.USER_CLASS.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowWhenBuilderMapperFailsToMapUserToUserEntity() { + + try (MockedStatic mockedBuilder = mockStatic(BuilderMapper.class)) { + + mockedBuilder.when(() -> BuilderMapper.mapTo(UserEntity.class, this.user)).thenThrow(ConstructorDefaultUndefinedException.class); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityMapper.mapFrom(this.user)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserEntityMapper.USER_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(ConstructorDefaultUndefinedException.class, exception.getCause().getClass()); + } + } + + @Test + void shouldThrowWhenBuilderMapperFailToMapUserToUserEntity() { + + try (MockedStatic mockedBuilder = mockStatic(BuilderMapper.class)) { + + mockedBuilder.when(() -> BuilderMapper.mapTo(UserEntity.class, this.user)).thenThrow(MapperFailureException.class); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityMapper.mapFrom(this.user)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserEntityMapper.USER_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(MapperFailureException.class, exception.getCause().getClass()); + } + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapperTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapperTest.java new file mode 100644 index 0000000..c7809ab --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/mapper/UserMapperTest.java @@ -0,0 +1,172 @@ +package diegosneves.github.conectardoacoes.adapters.rest.mapper; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@ExtendWith(MockitoExtension.class) +class UserMapperTest { + + public static final String USER_UUID = "a0b93a5a-be45-4339-b93a-5abe4523393a"; + public static final String USERNAME = "Usuario"; + public static final String USER_EMAIL = "email@teste.com"; + public static final String USER_PASSWORD = "Senha"; + + private UserMapper userMapper; + + private UserEntity userEntity; + + @BeforeEach + void setUp() { + this.userMapper = new UserMapper(); + this.userEntity = UserEntity.builder() + .id(USER_UUID) + .userName(USERNAME) + .email(USER_EMAIL) + .userProfile(UserProfileType.DONOR) + .userPassword(USER_PASSWORD) + .build(); + } + + @Test + void shouldMapUserEntityToUser() { + UserContract user = this.userMapper.mapFrom(this.userEntity); + + assertNotNull(user); + assertEquals(USERNAME, user.getUsername()); + assertEquals(USER_UUID, user.getId()); + assertEquals(USER_EMAIL, user.getEmail()); + assertEquals(UserProfile.DONOR, user.getUserProfile()); + assertEquals(USER_PASSWORD, user.getUserPassword()); + } + + @Test + void shouldThrowExceptionWhenUserEntityIsNull() { + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(null)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenUserProfileTypeIsNull() { + this.userEntity.setUserProfile(null); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + } + + @Test + void shouldThrowExceptionWhenUsernameIsNull() { + this.userEntity.setUserName(null); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUsernameIsEmpty() { + this.userEntity.setUserName(" "); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUserEmailIsNull() { + this.userEntity.setEmail(null); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUserEmailIsEmpty() { + this.userEntity.setEmail(""); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUserPasswordIsNull() { + this.userEntity.setUserPassword(null); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUserPasswordIsEmpty() { + this.userEntity.setUserPassword(" "); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUserEntityIdIsNull() { + this.userEntity.setId(null); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUserEntityIdIsEmpty() { + this.userEntity.setId(" "); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenUserEntityIdIsInvalid() { + this.userEntity.setId("null"); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userMapper.mapFrom(this.userEntity)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserMapper.USER_ENTITY_CLASS.getSimpleName())), exception.getMessage()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepositoryIntegrationTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepositoryIntegrationTest.java new file mode 100644 index 0000000..42f2a4f --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/repository/ShelterRepositoryIntegrationTest.java @@ -0,0 +1,410 @@ +package diegosneves.github.conectardoacoes.adapters.rest.repository; + +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.DonationEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.ShelterEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.model.ShelterEntity; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; +import lombok.SneakyThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + + +@DataJpaTest +@ExtendWith(SpringExtension.class) +class ShelterRepositoryIntegrationTest { + + public static final String ADDRESS_ID = "9f3928bc-3985-4035-b928-bc3985f035c9"; + public static final String STREET = "Rua"; + public static final String NUMBER = "123"; + public static final String NEIGHBORHOOD = "Bairro"; + public static final String CITY = "Cidade"; + public static final String STATE = "Estado"; + public static final String ZIP = "92123456"; + + public static final String SHELTER_ID = "1229ed8f-76d3-4fbd-a9ed-8f76d3ffbdf5"; + public static final String SHELTER_NAME = "Abrigo"; + + public static final String USER_ID = "574371b9-ae17-4f07-8371-b9ae175f0721"; + public static final String USER_NAME = "Fulano"; + public static final String USER_EMAIL = "email@teste.com"; + public static final String USER_PASSWORD = "Senha"; + + public static final String DONATION_ID = "bf9b8d38-c6b3-4fd6-9b8d-38c6b3bfd69f"; + public static final String DONATION_DESCRIPTION = "Descrição"; + public static final int AMOUNT = 1; + + public static final String ENTITY_ID = "b7a89acb-c03f-4f87-a89a-cbc03fef8755"; + + + @Autowired + private TestEntityManager entityManager; + + @Autowired + private ShelterRepository shelterRepository; + + private Shelter shelter; + private Address address; + private User user; + private Donation donation; + + private ShelterEntity shelterEntity; + + @BeforeEach + void setUp() { + this.address = new Address(ADDRESS_ID, STREET, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP); + this.user = new User(USER_ID, USER_NAME, USER_EMAIL, UserProfile.DONOR, USER_PASSWORD); + this.donation = new Donation(DONATION_ID, DONATION_DESCRIPTION, AMOUNT); + this.shelter = new Shelter(SHELTER_ID, SHELTER_NAME, this.address, this.user); + } + + private void persistEntity(MapperStrategy mapper, E entity) { + this.entityManager.persist(mapper.mapFrom(entity)); + this.entityManager.flush(); + } + + private void persistEntity(T entity) { + this.entityManager.persist(entity); + this.entityManager.flush(); + } + + @Test + void shouldRetrieveAndValidateShelterWithAssociationsIncludingAddressUserAndEmptyDonations() { + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + ShelterContract foundShelter = this.shelterRepository.findEntityById(SHELTER_ID); + + assertNotNull(foundShelter); + assertEquals(SHELTER_ID, foundShelter.getId()); + assertEquals(SHELTER_NAME, foundShelter.getShelterName()); + assertNotNull(foundShelter.getAddress()); + assertEquals(ADDRESS_ID, foundShelter.getAddress().getId()); + assertEquals(STREET, foundShelter.getAddress().getStreet()); + assertEquals(NUMBER, foundShelter.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, foundShelter.getAddress().getNeighborhood()); + assertEquals(CITY, foundShelter.getAddress().getCity()); + assertEquals(STATE, foundShelter.getAddress().getState()); + assertEquals(ZIP, foundShelter.getAddress().getZip()); + assertNotNull(foundShelter.getUser()); + assertEquals(USER_ID, foundShelter.getUser().getId()); + assertEquals(USER_NAME, foundShelter.getUser().getUsername()); + assertEquals(USER_EMAIL, foundShelter.getUser().getEmail()); + assertEquals(UserProfile.DONOR, foundShelter.getUser().getUserProfile()); + assertEquals(USER_PASSWORD, foundShelter.getUser().getUserPassword()); + assertNotNull(foundShelter.getDonations()); + assertTrue(foundShelter.getDonations().isEmpty()); + } + + @Test + void shouldRetrieveAndValidateShelterWithAssociationsIncludingAddressUserAndNonEmptyDonations() { + this.shelter.addDonation(this.donation); + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + ShelterContract foundShelter = this.shelterRepository.findEntityById(SHELTER_ID); + + assertNotNull(foundShelter); + assertEquals(SHELTER_ID, foundShelter.getId()); + assertEquals(SHELTER_NAME, foundShelter.getShelterName()); + assertNotNull(foundShelter.getAddress()); + assertEquals(ADDRESS_ID, foundShelter.getAddress().getId()); + assertEquals(STREET, foundShelter.getAddress().getStreet()); + assertEquals(NUMBER, foundShelter.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, foundShelter.getAddress().getNeighborhood()); + assertEquals(CITY, foundShelter.getAddress().getCity()); + assertEquals(STATE, foundShelter.getAddress().getState()); + assertEquals(ZIP, foundShelter.getAddress().getZip()); + assertNotNull(foundShelter.getUser()); + assertEquals(USER_ID, foundShelter.getUser().getId()); + assertEquals(USER_NAME, foundShelter.getUser().getUsername()); + assertEquals(USER_EMAIL, foundShelter.getUser().getEmail()); + assertEquals(UserProfile.DONOR, foundShelter.getUser().getUserProfile()); + assertEquals(USER_PASSWORD, foundShelter.getUser().getUserPassword()); + assertNotNull(foundShelter.getDonations()); + assertFalse(foundShelter.getDonations().isEmpty()); + assertEquals(1, foundShelter.getDonations().size()); + assertEquals(DONATION_ID, foundShelter.getDonations().get(0).getId()); + assertEquals(DONATION_DESCRIPTION, foundShelter.getDonations().get(0).getDescription()); + assertEquals(AMOUNT, foundShelter.getDonations().get(0).getAmount()); + } + + @Test + void shouldRetrieveShelterNull() { + this.shelter.addDonation(this.donation); + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + ShelterContract foundShelter = this.shelterRepository.findEntityById(ENTITY_ID); + + assertNull(foundShelter); + } + + @Test + void shouldThrowExceptionWhenFindingEntityByIdGivenNullId() { + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.findEntityById(null)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterRepository.INVALID_ID_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenFindingEntityByIdGivenEmptyStringId() { + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.findEntityById("")); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterRepository.INVALID_ID_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionAndHaveCauseWhenFindingEntityByIdGivenInvalidId() { + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.findEntityById("null")); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterRepository.INVALID_ID_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } + + @Test + void shouldRetrieveAllShelterContracts() { + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + List retrievedAll = this.shelterRepository.retrieveAll(); + + assertNotNull(retrievedAll); + assertFalse(retrievedAll.isEmpty()); + assertEquals(1, retrievedAll.size()); + } + + @Test + void shouldRetrieveEmptyShelterContractsList() { + + List retrievedAll = this.shelterRepository.retrieveAll(); + + assertNotNull(retrievedAll); + assertTrue(retrievedAll.isEmpty()); + } + + @Test + @SneakyThrows + void shouldReturnEmptyListWhenMapEntityListInvokedWithNull() { + Method method = ShelterRepository.class.getDeclaredMethod("mapEntityList", List.class); + method.setAccessible(true); + + List result = (List) method.invoke(this.shelterRepository, new Object[]{null}); + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void shouldThrowExceptionOnRetrieveAllWithInvalidShelterEntity() { + this.shelterEntity = new ShelterEntityMapper().mapFrom(this.shelter); + this.shelterEntity.setShelterName(""); + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(this.shelterEntity); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.retrieveAll()); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(ShelterEntity.class.getSimpleName())), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(ShelterCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldPersistAndValidateShelterIncludingAssociationsWithoutDonations() { + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + + ShelterContract persisted = this.shelterRepository.persist(this.shelter); + + assertNotNull(persisted); + assertEquals(SHELTER_ID, persisted.getId()); + assertEquals(SHELTER_NAME, persisted.getShelterName()); + assertNotNull(persisted.getAddress()); + assertEquals(ADDRESS_ID, persisted.getAddress().getId()); + assertEquals(STREET, persisted.getAddress().getStreet()); + assertEquals(NUMBER, persisted.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, persisted.getAddress().getNeighborhood()); + assertEquals(CITY, persisted.getAddress().getCity()); + assertEquals(STATE, persisted.getAddress().getState()); + assertEquals(ZIP, persisted.getAddress().getZip()); + assertNotNull(persisted.getUser()); + assertEquals(USER_ID, persisted.getUser().getId()); + assertEquals(USER_NAME, persisted.getUser().getUsername()); + assertEquals(USER_EMAIL, persisted.getUser().getEmail()); + assertEquals(UserProfile.DONOR, persisted.getUser().getUserProfile()); + assertEquals(USER_PASSWORD, persisted.getUser().getUserPassword()); + assertNotNull(persisted.getDonations()); + assertTrue(persisted.getDonations().isEmpty()); + } + + @Test + void shouldPersistAndValidateShelterIncludingAssociationsWithDonations() { + this.shelterEntity = new ShelterEntityMapper().mapFrom(this.shelter); + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(this.shelterEntity); + + ShelterContract found = this.shelterRepository.findEntityById(SHELTER_ID); + + found.addDonation(this.donation); + + ShelterContract persisted = this.shelterRepository.persist(found); + + assertNotNull(persisted); + assertEquals(SHELTER_ID, persisted.getId()); + assertEquals(SHELTER_NAME, persisted.getShelterName()); + assertNotNull(persisted.getAddress()); + assertEquals(ADDRESS_ID, persisted.getAddress().getId()); + assertEquals(STREET, persisted.getAddress().getStreet()); + assertEquals(NUMBER, persisted.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, persisted.getAddress().getNeighborhood()); + assertEquals(CITY, persisted.getAddress().getCity()); + assertEquals(STATE, persisted.getAddress().getState()); + assertEquals(ZIP, persisted.getAddress().getZip()); + assertNotNull(persisted.getUser()); + assertEquals(USER_ID, persisted.getUser().getId()); + assertEquals(USER_NAME, persisted.getUser().getUsername()); + assertEquals(USER_EMAIL, persisted.getUser().getEmail()); + assertEquals(UserProfile.DONOR, persisted.getUser().getUserProfile()); + assertEquals(USER_PASSWORD, persisted.getUser().getUserPassword()); + assertNotNull(persisted.getDonations()); + assertFalse(persisted.getDonations().isEmpty()); + assertEquals(1, persisted.getDonations().size()); + assertEquals(DONATION_ID, persisted.getDonations().get(0).getId()); + assertEquals(DONATION_DESCRIPTION, persisted.getDonations().get(0).getDescription()); + assertEquals(AMOUNT, persisted.getDonations().get(0).getAmount()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenPersistNullEntity() { + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.persist(null)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterRepository.SHELTER_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldDeleteShelterEntityAndConfirmItsDeletion() { + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + this.shelterRepository.deleteEntityById(SHELTER_ID); + + assertNull(this.shelterRepository.findById(SHELTER_ID).orElse(null)); + } + + @Test + void shouldHandleNonExistentEntityDeletionAttemptGracefully() { + + persistEntity(new AddressEntityMapper(), this.address); + persistEntity(new UserEntityMapper(), this.user); + persistEntity(new DonationEntityMapper(), this.donation); + persistEntity(new ShelterEntityMapper(), this.shelter); + + this.shelterRepository.deleteEntityById(ENTITY_ID); + + assertNull(this.shelterRepository.findById(ENTITY_ID).orElse(null)); + } + + @Test + void shouldThrowExceptionWhenIdIsEmpty() { + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.deleteEntityById("")); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterRepository.INVALID_ID_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenIdIsNull() { + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.deleteEntityById(null)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterRepository.INVALID_ID_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenIdIsInvalid() { + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.shelterRepository.deleteEntityById("null")); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterRepository.INVALID_ID_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepositoryTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepositoryTest.java new file mode 100644 index 0000000..db504e2 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/repository/UserRepositoryTest.java @@ -0,0 +1,261 @@ +package diegosneves.github.conectardoacoes.adapters.rest.repository; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.MapperFailureException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.MapperStrategy; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.UserEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; +import lombok.SneakyThrows; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@DataJpaTest +@ExtendWith(SpringExtension.class) +class UserRepositoryTest { + + public static final String USER_ID = "574371b9-ae17-4f07-8371-b9ae175f0721"; + public static final String USER_NAME = "Fulano"; + public static final String USER_EMAIL = "email@teste.com"; + public static final String USER_PASSWORD = "Senha"; + + @Autowired + private TestEntityManager entityManager; + + @Autowired + private UserRepository repository; + + private User user; + + @BeforeEach + void setUp() { + this.user = new User(USER_ID, USER_NAME, USER_EMAIL, UserProfile.DONOR, USER_PASSWORD); + } + + private void persistEntity(MapperStrategy mapper, E entity) { + this.entityManager.persist(mapper.mapFrom(entity)); + this.entityManager.flush(); + } + + private void persistEntity(T entity) { + this.entityManager.persist(entity); + this.entityManager.flush(); + } + + @Test + void shouldFindUserByEmail() { + + this.persistEntity(new UserEntityMapper(), this.user); + + Optional foundUser = this.repository.findByEmail(USER_EMAIL); + + assertFalse(foundUser.isEmpty()); + UserEntity foundUserEntity = foundUser.get(); + assertEquals(USER_ID, foundUserEntity.getId()); + assertEquals(USER_NAME, foundUserEntity.getUserName()); + assertEquals(USER_EMAIL, foundUserEntity.getEmail()); + assertEquals(UserProfileType.DONOR, foundUserEntity.getUserProfile()); + assertEquals(USER_PASSWORD, foundUserEntity.getUserPassword()); + } + + @Test + void shouldNotFindUserByEmail() { + + this.persistEntity(new UserEntityMapper(), this.user); + + Optional foundUser = this.repository.findByEmail("teste@email.com"); + + assertTrue(foundUser.isEmpty()); + } + + @Test + void shouldReturnUserWhenUserExistsInRepository() { + this.persistEntity(new UserEntityMapper(), this.user); + + UserContract foundUser = this.repository.findEntityById(USER_ID); + + assertNotNull(foundUser); + assertEquals(USER_ID, foundUser.getId()); + assertEquals(USER_NAME, foundUser.getUsername()); + assertEquals(USER_EMAIL, foundUser.getEmail()); + assertEquals(UserProfile.DONOR, foundUser.getUserProfile()); + assertEquals(USER_PASSWORD, foundUser.getUserPassword()); + } + + @Test + void shouldReturnNullWhenUserDoesNotExistInRepository() { + UserContract foundUser = this.repository.findEntityById(USER_ID); + + assertNull(foundUser); + } + + @Test + void verifyExceptionThrownWhenInvalidIdIsProviedToFindEntityById() { + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.findEntityById("USER_ID")); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserRepository.USER_ID_ERROR_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + void verifyExceptionThrownWhenEmptyIdIsProvidedToFindEntityById(String value) { + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.findEntityById(value)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserRepository.USER_ID_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void verifyExceptionThrownWhenNullIdIsProvidedToFindEntityById() { + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.findEntityById(null)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserRepository.USER_ID_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldRetrieveUserContract() { + this.persistEntity(new UserEntityMapper(), this.user); + + List userContracts = this.repository.retrieveAll(); + + assertNotNull(userContracts); + assertFalse(userContracts.isEmpty()); + assertEquals(1, userContracts.size()); + } + + @Test + void shouldReturnEmptyListWhenNoUsersPersisted() { + List userContracts = this.repository.retrieveAll(); + + assertNotNull(userContracts); + assertTrue(userContracts.isEmpty()); + } + + @Test + @SneakyThrows + void shouldReturnEmptyListWhenNullPassedToMapEntityList() { + Method method = UserRepository.class.getDeclaredMethod("mapEntityList", List.class); + method.setAccessible(true); + + List userContracts = (List) method.invoke(this.repository, new Object[]{null}); + + assertNotNull(userContracts); + assertTrue(userContracts.isEmpty()); + } + + @Test + void shouldThrowExceptionWhenUsernameIsNull() { + UserEntity userEntity = new UserEntityMapper().mapFrom(this.user); + userEntity.setUserName(null); + this.persistEntity(userEntity); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.retrieveAll()); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(MapperFailureException.ERROR.formatErrorMessage(UserEntity.class.getSimpleName())), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldPersistAndRetrieveUserAttributesCorrectly() { + UserContract persisted = this.repository.persist(this.user); + + assertNotNull(persisted); + assertEquals(USER_ID, persisted.getId()); + assertEquals(USER_NAME, persisted.getUsername()); + assertEquals(USER_EMAIL, persisted.getEmail()); + assertEquals(UserProfile.DONOR, persisted.getUserProfile()); + assertEquals(USER_PASSWORD, persisted.getUserPassword()); + } + + @Test + void shouldThrowExceptionWhenPersistNullUser() { + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.persist(null)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserRepository.REQUIRED_USER_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldDeleteUserEntityCorrectly() { + this.persistEntity(new UserEntityMapper(), this.user); + + this.repository.deleteEntityById(USER_ID); + + assertNull(this.repository.findById(USER_ID).orElse(null)); + } + + @Test + void shouldNotAffectDatabaseWhenAttemptToDeleteNonExistingUserEntity() { + this.persistEntity(new UserEntityMapper(), this.user); + String uuidNonexistent = "777e9377-526d-402c-be93-77526d402cd3"; + + this.repository.deleteEntityById(uuidNonexistent); + + assertNull(this.repository.findById(uuidNonexistent).orElse(null)); + assertNotNull(this.repository.findById(USER_ID).orElse(null)); + } + + @Test + void shouldThrowExceptionWhenDeletingEntityWithNullId() { + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.deleteEntityById(null)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserRepository.USER_ID_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + void shouldThrowExceptionWhenDeletingEntityWithInvalidId(String id) { + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.deleteEntityById(id)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserRepository.USER_ID_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenDeletingEntityWithNullIdAndCatchUuidException() { + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.repository.deleteEntityById("null")); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserRepository.USER_ID_ERROR_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImplTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImplTest.java new file mode 100644 index 0000000..fd737b9 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/ShelterEntityServiceImplTest.java @@ -0,0 +1,475 @@ +package diegosneves.github.conectardoacoes.adapters.rest.service.impl; + +import diegosneves.github.conectardoacoes.adapters.rest.dto.AddressDTO; +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.ShelterEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.AddressEntityMapper; +import diegosneves.github.conectardoacoes.adapters.rest.mapper.BuilderMapper; +import diegosneves.github.conectardoacoes.adapters.rest.model.AddressEntity; +import diegosneves.github.conectardoacoes.adapters.rest.model.DonationEntity; +import diegosneves.github.conectardoacoes.adapters.rest.repository.AddressRepository; +import diegosneves.github.conectardoacoes.adapters.rest.repository.DonationRepository; +import diegosneves.github.conectardoacoes.adapters.rest.repository.ShelterRepository; +import diegosneves.github.conectardoacoes.adapters.rest.request.ShelterCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.ShelterCreatedResponse; +import diegosneves.github.conectardoacoes.adapters.rest.service.UserEntityService; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.Shelter; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; +import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException; +import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(SpringExtension.class) +class ShelterEntityServiceImplTest { + + public static final String SHELTER_ID = "1229ed8f-76d3-4fbd-a9ed-8f76d3ffbdf5"; + public static final String SHELTER_NAME = "Abrigo"; + + public static final String USER_ID = "574371b9-ae17-4f07-8371-b9ae175f0721"; + public static final String USER_NAME = "Fulano"; + public static final String USER_EMAIL = "email@email.com"; + public static final String USER_PASSWORD = "Senha"; + + public static final String ADDRESS_ID = "9f3928bc-3985-4035-b928-bc3985f035c9"; + public static final String STREET = "Rua"; + public static final String NUMBER = "298"; + public static final String NEIGHBORHOOD = "Bairro"; + public static final String CITY = "Cidade"; + public static final String STATE = "Estado"; + public static final String ZIP = "98456123"; + + public static final String DONATION_ID = "bf9b8d38-c6b3-4fd6-9b8d-38c6b3bfd69f"; + public static final String DONATION_DESCRIPTION = "Descrição"; + public static final int AMOUNT = 1; + + public static final String ENTITY_ID = "b7a89acb-c03f-4f87-a89a-cbc03fef8755"; + + + @InjectMocks + private ShelterEntityServiceImpl service; + + @Mock + private ShelterRepository repository; + + @Mock + private UserEntityService userEntityService; + + @Mock + private DonationRepository donationRepository; + + @Mock + private AddressRepository addressRepository; + + @Captor + private ArgumentCaptor shelterCaptor; + + @Captor + private ArgumentCaptor addressCaptor; + + private ShelterCreationRequest request; + private AddressDTO addressDTO; + private User user; + private Shelter shelter; + private Address address; + private Donation donation; + + @BeforeEach + void setUp() { + this.addressDTO = AddressDTO.builder() + .street(STREET) + .number(NUMBER) + .neighborhood(NEIGHBORHOOD) + .city(CITY) + .state(STATE) + .zip(ZIP) + .build(); + + this.request = ShelterCreationRequest.builder() + .shelterName(SHELTER_NAME) + .address(this.addressDTO) + .responsibleUserEmail(USER_EMAIL) + .build(); + + this.address = new Address(ADDRESS_ID, STREET, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP); + this.user = new User(USER_ID, USER_NAME, USER_EMAIL, UserProfile.DONOR, USER_PASSWORD); + this.donation = new Donation(DONATION_ID, DONATION_DESCRIPTION, AMOUNT); + this.shelter = new Shelter(SHELTER_ID, SHELTER_NAME, this.address, this.user); + } + + @Test + void shouldCreateShelter() { + AddressEntity addressEntity = new AddressEntityMapper().mapFrom(this.address); + when(this.userEntityService.searchUserByEmail(USER_EMAIL)).thenReturn(this.user); + when(this.addressRepository.save(any(AddressEntity.class))).thenReturn(addressEntity); + when(this.repository.persist(any(ShelterContract.class))).thenReturn(this.shelter); + + ShelterCreatedResponse response = this.service.createShelter(this.request); + + verify(this.userEntityService, times(1)).searchUserByEmail(USER_EMAIL); + verify(this.addressRepository, times(1)).save(addressCaptor.capture()); + verify(this.repository, times(1)).persist(shelterCaptor.capture()); + verify(this.donationRepository, never()).save(any(DonationEntity.class)); + + assertNotNull(response); + assertEquals(SHELTER_ID, response.getId()); + assertEquals(SHELTER_NAME, response.getShelterName()); + assertEquals(STREET, response.getAddress().getStreet()); + assertEquals(NUMBER, response.getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, response.getAddress().getNeighborhood()); + assertEquals(CITY, response.getAddress().getCity()); + assertEquals(STATE, response.getAddress().getState()); + assertEquals(ZIP, response.getAddress().getZip()); + assertEquals(USER_ID, response.getResponsibleUser().getId()); + assertEquals(USER_NAME, response.getResponsibleUser().getUserName()); + assertEquals(USER_EMAIL, response.getResponsibleUser().getEmail()); + assertNotNull(response.getResponsibleUser().getUserProfile()); + assertEquals(UserProfileType.DONOR, response.getResponsibleUser().getUserProfile()); + assertNotNull(shelterCaptor.getValue()); + assertTrue(UuidUtils.isValidUUID(shelterCaptor.getValue().getId())); + assertEquals(SHELTER_NAME, shelterCaptor.getValue().getShelterName()); + assertNotNull(shelterCaptor.getValue().getDonations()); + assertTrue(shelterCaptor.getValue().getDonations().isEmpty()); + assertNotNull(shelterCaptor.getValue().getAddress()); + assertNotNull(addressCaptor.getValue()); + assertTrue(UuidUtils.isValidUUID(addressCaptor.getValue().getId())); + assertEquals(STREET, shelterCaptor.getValue().getAddress().getStreet()); + assertEquals(NUMBER, shelterCaptor.getValue().getAddress().getNumber()); + assertEquals(NEIGHBORHOOD, shelterCaptor.getValue().getAddress().getNeighborhood()); + assertEquals(CITY, shelterCaptor.getValue().getAddress().getCity()); + assertEquals(STATE, shelterCaptor.getValue().getAddress().getState()); + assertEquals(ZIP, shelterCaptor.getValue().getAddress().getZip()); + assertNotNull(shelterCaptor.getValue().getUser()); + assertTrue(UuidUtils.isValidUUID(shelterCaptor.getValue().getUser().getId())); + assertEquals(USER_NAME, shelterCaptor.getValue().getUser().getUsername()); + assertEquals(USER_EMAIL, shelterCaptor.getValue().getUser().getEmail()); + assertEquals(UserProfile.DONOR, shelterCaptor.getValue().getUser().getUserProfile()); + assertEquals(USER_PASSWORD, shelterCaptor.getValue().getUser().getUserPassword()); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + void shouldThrowExceptionWhenShelterNameIsBlank(String shelterName) { + this.request.setShelterName(shelterName); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.SHELTER_CREATION_ERROR_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(ShelterCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenShelterNameIsNull() { + this.request.setShelterName(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.SHELTER_CREATION_ERROR_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(ShelterCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoIsNullInCreateShelter() { + this.request.setAddress(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoStreetNameIsNullInCreateShelter() { + this.addressDTO.setStreet(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", ""}) + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoStreetNameIsBlankInCreateShelter(String addressStreet) { + this.addressDTO.setStreet(addressStreet); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoNumberIsNullInCreateShelter() { + this.addressDTO.setNumber(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", ""}) + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoNumberIsBlankInCreateShelter(String value) { + this.addressDTO.setNumber(value); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoNeighborhoodIsNullInCreateShelter() { + this.addressDTO.setNeighborhood(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", ""}) + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoNeighborhoodIsBlankInCreateShelter(String value) { + this.addressDTO.setNeighborhood(value); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoCityIsNullInCreateShelter() { + this.addressDTO.setCity(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", ""}) + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoCityIsBlankInCreateShelter(String value) { + this.addressDTO.setCity(value); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoStateIsNullInCreateShelter() { + this.addressDTO.setState(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", ""}) + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoStateIsBlankInCreateShelter(String value) { + this.addressDTO.setState(value); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoZipCodeIsNullInCreateShelter() { + this.addressDTO.setZip(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", ""}) + void shouldThrowShelterEntityFailuresExceptionWhenAddressDtoZipCodeIsBlankInCreateShelter(String value) { + this.addressDTO.setZip(value); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ADDRESS_CREATION_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(AddressCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + void shouldThrowExceptionWhenResponsibleUserEmailIsBlank(String value) { + this.request.setResponsibleUserEmail(value); + when(this.userEntityService.searchUserByEmail(anyString())).thenThrow(UserEntityFailuresException.class); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UserEntityFailuresException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenResponsibleUserEmailIsNull() { + this.request.setResponsibleUserEmail(null); + when(this.userEntityService.searchUserByEmail(null)).thenThrow(UserEntityFailuresException.class); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.repository, never()).persist(any(ShelterContract.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.USER_RESPONSIBLE_EMAIL_NOT_FOUND_ERROR), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UserEntityFailuresException.class, exception.getCause().getClass()); + } + + + @Test + void mapAddressAndSaveToRepositoryThrowsExceptionWhenAddressIsNull() { + + try (MockedStatic mockedBuilder = mockStatic(BuilderMapper.class)) { + + mockedBuilder.when(() -> BuilderMapper.mapTo(any(AddressEntityMapper.class), any(Address.class))).thenThrow(IllegalArgumentException.class); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.addressRepository, never()).save(any(AddressEntity.class)); + verify(this.repository, never()).persist(any(ShelterContract.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.ERROR_MAPPING_ADDRESS), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(IllegalArgumentException.class, exception.getCause().getClass()); + } + } + + @Test + void mapShelterAndSaveToRepositoryThrowsExceptionWhenAddressIsNull() { + + when(this.userEntityService.searchUserByEmail(anyString())).thenReturn(this.user); + when(this.repository.persist(any(ShelterContract.class))).thenReturn(null); + + ShelterEntityFailuresException exception = assertThrows(ShelterEntityFailuresException.class, () -> this.service.createShelter(this.request)); + + verify(this.addressRepository, times(1)).save(any(AddressEntity.class)); + verify(this.repository, times(1)).persist(any(ShelterContract.class)); + + assertNotNull(exception); + assertEquals(ShelterEntityFailuresException.ERROR.formatErrorMessage(ShelterEntityServiceImpl.SHELTER_CREATION_ERROR_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(IllegalArgumentException.class, exception.getCause().getClass()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImplTest.java b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImplTest.java new file mode 100644 index 0000000..999d3a7 --- /dev/null +++ b/src/test/java/diegosneves/github/conectardoacoes/adapters/rest/service/impl/UserEntityServiceImplTest.java @@ -0,0 +1,294 @@ +package diegosneves.github.conectardoacoes.adapters.rest.service.impl; + +import diegosneves.github.conectardoacoes.adapters.rest.enums.UserProfileType; +import diegosneves.github.conectardoacoes.adapters.rest.exception.UserEntityFailuresException; +import diegosneves.github.conectardoacoes.adapters.rest.model.UserEntity; +import diegosneves.github.conectardoacoes.adapters.rest.repository.UserRepository; +import diegosneves.github.conectardoacoes.adapters.rest.request.UserEntityCreationRequest; +import diegosneves.github.conectardoacoes.adapters.rest.response.UserEntityCreatedResponse; +import diegosneves.github.conectardoacoes.core.domain.user.entity.User; +import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; +import diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException; +import diegosneves.github.conectardoacoes.core.utils.UuidUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(SpringExtension.class) +class UserEntityServiceImplTest { + + public static final String USER_ID = "f5f3c02d-2863-46a0-b3c0-2d286336a0a2"; + public static final String USERNAME = "Fulano"; + public static final String USER_EMAIL = "email@test.com"; + public static final String USER_PASSWORD = "Senha"; + + + @InjectMocks + private UserEntityServiceImpl userEntityService; + + @Mock + private UserRepository userRepository; + + @Captor + private ArgumentCaptor userEntityCaptor; + + private UserEntity userEntity; + private UserEntityCreationRequest request; + + @BeforeEach + void setUp() { + this.userEntity = UserEntity.builder() + .id(USER_ID) + .userName(USERNAME) + .email(USER_EMAIL) + .userProfile(UserProfileType.BENEFICIARY) + .userPassword(USER_PASSWORD) + .build(); + + this.request = UserEntityCreationRequest.builder() + .userName(USERNAME) + .email(USER_EMAIL) + .userProfile(UserProfileType.DONOR) + .userPassword(USER_PASSWORD) + .build(); + } + + @Test + void shouldReturnUserEntityByEmail() { + when(this.userRepository.findByEmail(USER_EMAIL)).thenReturn(Optional.ofNullable(this.userEntity)); + + User entity = (User) this.userEntityService.searchUserByEmail("email@test.com"); + + verify(this.userRepository, times(1)).findByEmail(anyString()); + + assertNotNull(entity); + assertEquals(USER_ID, entity.getId()); + assertEquals(USERNAME, entity.getUsername()); + assertEquals(USER_EMAIL, entity.getEmail()); + assertEquals(UserProfile.BENEFICIARY, entity.getUserProfile()); + assertEquals(USER_PASSWORD, entity.getUserPassword()); + } + + @Test + void shouldThrowExceptionWhenUserNotFound() { + String email = "email@teste.com"; + when(this.userRepository.findByEmail(USER_EMAIL)).thenReturn(Optional.ofNullable(this.userEntity)); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.searchUserByEmail(email)); + + verify(this.userRepository, times(1)).findByEmail(anyString()); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(String.format(UserEntityServiceImpl.EMAIL_NOT_FOUND_ERROR_MESSAGE, email)), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenEmailIsEmpty() { + String email = ""; + when(this.userRepository.findByEmail(USER_EMAIL)).thenReturn(Optional.ofNullable(this.userEntity)); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.searchUserByEmail(email)); + + verify(this.userRepository, never()).findByEmail(anyString()); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.INVALID_EMAIL_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenEmailIsNull() { + when(this.userRepository.findByEmail(USER_EMAIL)).thenReturn(Optional.ofNullable(this.userEntity)); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.searchUserByEmail(null)); + + verify(this.userRepository, never()).findByEmail(anyString()); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.INVALID_EMAIL_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldCreateUserEntity() { + this.userEntity.setUserProfile(UserProfileType.DONOR); + when(this.userRepository.findByEmail(USER_EMAIL)).thenReturn(Optional.empty()); + when(this.userRepository.save(any(UserEntity.class))).thenReturn(this.userEntity); + + UserEntityCreatedResponse actual = this.userEntityService.createUserEntity(this.request); + + verify(this.userRepository, times(1)).findByEmail(USER_EMAIL); + verify(this.userRepository, times(1)).save(this.userEntityCaptor.capture()); + + assertNotNull(actual); + UserEntity captorValue = this.userEntityCaptor.getValue(); + assertNotNull(captorValue); + assertTrue(UuidUtils.isValidUUID(captorValue.getId())); + assertEquals(USERNAME, captorValue.getUserName()); + assertEquals(USER_EMAIL, captorValue.getEmail()); + assertEquals(USER_PASSWORD, captorValue.getUserPassword()); + assertEquals(UserProfileType.DONOR, captorValue.getUserProfile()); + assertEquals(USER_ID, actual.getId()); + assertEquals(USERNAME, actual.getUserName()); + assertEquals(USER_EMAIL, actual.getEmail()); + assertEquals(UserProfileType.DONOR, actual.getUserProfile()); + } + + @Test + void shouldThrowExceptionWhenEmailAlreadyExists() { + when(this.userRepository.findByEmail(USER_EMAIL)).thenReturn(Optional.ofNullable(this.userEntity)); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, times(1)).findByEmail(USER_EMAIL); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.EMAIL_ALREADY_IN_USE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenRequestUserEmailIsNull() { + this.request.setEmail(null); + when(this.userRepository.findByEmail(anyString())).thenReturn(Optional.empty()); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, never()).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.INVALID_EMAIL_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + void shouldThrowExceptionWhenRequestUserEmailIsBlank(String requestUserEmail) { + this.request.setEmail(requestUserEmail); + when(this.userRepository.findByEmail(anyString())).thenReturn(Optional.empty()); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, never()).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.INVALID_EMAIL_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenRequestUsernameIsNull() { + this.request.setUserName(null); + when(this.userRepository.findByEmail(anyString())).thenReturn(Optional.empty()); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, times(1)).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.USER_CREATION_FAILURE_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + void shouldThrowExceptionWhenRequestUsernameIsBlank(String requestUserValue) { + this.request.setUserName(requestUserValue); + when(this.userRepository.findByEmail(anyString())).thenReturn(Optional.empty()); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, times(1)).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.USER_CREATION_FAILURE_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenRequestUserPasswordIsNull() { + this.request.setUserPassword(null); + when(this.userRepository.findByEmail(anyString())).thenReturn(Optional.empty()); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, times(1)).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.USER_CREATION_FAILURE_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + void shouldThrowExceptionWhenRequestUserPasswordIsBlank(String requestUserValue) { + this.request.setUserPassword(requestUserValue); + when(this.userRepository.findByEmail(anyString())).thenReturn(Optional.empty()); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, times(1)).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.USER_CREATION_FAILURE_MESSAGE), exception.getMessage()); + assertNotNull(exception.getCause()); + assertEquals(UserCreationFailureException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionWhenRequestUserProfileIsNull() { + this.request.setUserProfile(null); + when(this.userRepository.findByEmail(anyString())).thenReturn(Optional.empty()); + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(this.request)); + + verify(this.userRepository, times(1)).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.USER_PROFILE_VALIDATION_FAILURE), exception.getMessage()); + assertNull(exception.getCause()); + } + + @Test + void shouldThrowExceptionWhenRequestIsNull() { + + UserEntityFailuresException exception = assertThrows(UserEntityFailuresException.class, () -> this.userEntityService.createUserEntity(null)); + + verify(this.userRepository, never()).findByEmail(anyString()); + verify(this.userRepository, never()).save(any(UserEntity.class)); + + assertNotNull(exception); + assertEquals(UserEntityFailuresException.ERROR.formatErrorMessage(UserEntityServiceImpl.MISSING_USER_ENTITY_REQUEST_ERROR_MESSAGE), exception.getMessage()); + assertNull(exception.getCause()); + } + +} diff --git a/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/ShelterTest.java b/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/ShelterTest.java index 53ce521..93e9582 100644 --- a/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/ShelterTest.java +++ b/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/ShelterTest.java @@ -26,6 +26,9 @@ class ShelterTest { private static final String UUID_TEST = "4658a51c-3840-453e-bc69-e2b4cff191a4"; public static final String UUID_ERROR_MESSAGE = "UUID deve ser informado"; + public static final String DONATION_ID = "6a43fefb-5035-4a9d-83fe-fb5035ea9de7"; + public static final String DESCRIPTION = "Doação"; + public static final String ADDRESS_ID = "23dc581a-0900-4a62-9c58-1a09008a62a9"; private Shelter shelter; private Address address; @@ -33,20 +36,20 @@ class ShelterTest { @BeforeEach void setUp() { - this.address = new Address("Rua", "377", "Bairro", "Sapucaia", "RS", "93000000"); + this.address = new Address(ADDRESS_ID, "Rua", "377", "Bairro", "Sapucaia", "RS", "93000000"); this.user = new User(UuidUtils.generateUuid(), "User", "teste@teste.com", UserProfile.BENEFICIARY, "senha"); this.shelter = new Shelter(UUID_TEST, "Abrigo", this.address, this.user); } @Test void shouldCreateShelterWithGivenDetails() { - Shelter shelter = ShelterFactory.create("Casa 1", this.address, this.user); + Shelter shelterTeste = ShelterFactory.create("Casa 1", this.address, this.user); - assertNotNull(shelter); - assertTrue(UuidUtils.isValidUUID(shelter.getId())); - assertEquals("Casa 1", shelter.getShelterName()); - assertEquals(this.address, shelter.getAddress()); - assertEquals(this.user, shelter.getUser()); + assertNotNull(shelterTeste); + assertTrue(UuidUtils.isValidUUID(shelterTeste.getId())); + assertEquals("Casa 1", shelterTeste.getShelterName()); + assertEquals(this.address, shelterTeste.getAddress()); + assertEquals(this.user, shelterTeste.getUser()); } @Test @@ -161,7 +164,7 @@ void shouldChangeShelterName() { @Test @SneakyThrows void shouldChangeAddress() { - Address newAddress = new Address("Rua", "3924", "Bairro2", "Esteio", "RS", "94000000"); + Address newAddress = new Address(ADDRESS_ID, "Rua", "3924", "Bairro2", "Esteio", "RS", "94000000"); Field field = Shelter.class.getDeclaredField("address"); field.setAccessible(true); @@ -185,7 +188,7 @@ void shouldThrowExceptionWhenChangeAddressWithNullAddress() { @Test @SneakyThrows void shouldAddDonation() { - Donation newDonation = new Donation("Doação", 1); + Donation newDonation = new Donation(DONATION_ID, DESCRIPTION, 1); this.shelter.addDonation(newDonation); diff --git a/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/AddressTest.java b/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/AddressTest.java index 17e187c..548ccbf 100644 --- a/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/AddressTest.java +++ b/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/AddressTest.java @@ -1,8 +1,11 @@ package diegosneves.github.conectardoacoes.core.domain.shelter.entity.value; import diegosneves.github.conectardoacoes.core.exception.AddressCreationFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.junit.jupiter.MockitoExtension; import static org.junit.jupiter.api.Assertions.*; @@ -11,22 +14,53 @@ class AddressTest { + public static final String ADDRESS_ID = "f3a7d3c9-16a9-41fd-a7d3-c916a981fd2f"; + public static final String STREET = "Rua"; + public static final String NUMBER = "123"; + public static final String NEIGHBORHOOD = "centro"; + public static final String CITY = "cidade"; + public static final String STATE = "Estado"; + public static final String ZIP = "93200100"; + @Test void validateAddressFields() { - Address address = new Address("Rua", "123", "centro", "cidade", "Estado", "93200100"); - - assertEquals("Rua", address.getStreet()); - assertEquals("123", address.getNumber()); - assertEquals("centro", address.getNeighborhood()); - assertEquals("93200100", address.getZip()); - assertEquals("cidade", address.getCity()); - assertEquals("Estado", address.getState()); + Address address = new Address(ADDRESS_ID, STREET, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP); + + assertEquals(ADDRESS_ID, address.getId()); + assertEquals(STREET, address.getStreet()); + assertEquals(NUMBER, address.getNumber()); + assertEquals(NEIGHBORHOOD, address.getNeighborhood()); + assertEquals(ZIP, address.getZip()); + assertEquals(CITY, address.getCity()); + assertEquals(STATE, address.getState()); } + @ParameterizedTest + @ValueSource(strings = {"", "id"}) + void shouldThrowExceptionForEmptyOrInvalidAddressId(String value) { + + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(value, STREET, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP)); + + assertNotNull(exception); + assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.INVALID_ID_MESSAGE), exception.getMessage()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } + + @Test + void shouldThrowExceptionForNullAddressId() { + + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(null, STREET, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP)); + + assertNotNull(exception); + assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.INVALID_ID_MESSAGE), exception.getMessage()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } + + @Test void shouldThrowExceptionForEmptyStreetName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("", "123", "centro", "cidade", "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "", NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.STREET_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -35,7 +69,7 @@ void shouldThrowExceptionForEmptyStreetName() { @Test void shouldThrowExceptionForNullStreetName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(null, "123", "centro", "cidade", "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID,null, NUMBER, NEIGHBORHOOD, CITY, STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.STREET_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -44,7 +78,7 @@ void shouldThrowExceptionForNullStreetName() { @Test void shouldThrowExceptionForEmptyNumber() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("Rua", " ", "centro", "cidade", "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, STREET, " ", NEIGHBORHOOD, CITY, STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.RESIDENCE_NUMBER_ERROR_MESSAGE), exception.getMessage()); @@ -53,7 +87,7 @@ void shouldThrowExceptionForEmptyNumber() { @Test void shouldThrowExceptionForNullNumber() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("null", null, "centro", "cidade", "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "null", null, NEIGHBORHOOD, CITY, STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.RESIDENCE_NUMBER_ERROR_MESSAGE), exception.getMessage()); @@ -62,7 +96,7 @@ void shouldThrowExceptionForNullNumber() { @Test void shouldThrowExceptionForEmptyNeighborhoodName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("Rua", "123", "", "cidade", "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, STREET, NUMBER, "", CITY, STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.NEIGHBORHOOD_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -71,7 +105,7 @@ void shouldThrowExceptionForEmptyNeighborhoodName() { @Test void shouldThrowExceptionForNullNeighborhoodName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("null", "123", null, "cidade", "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "null", NUMBER, null, CITY, STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.NEIGHBORHOOD_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -80,7 +114,7 @@ void shouldThrowExceptionForNullNeighborhoodName() { @Test void shouldThrowExceptionForEmptyCityName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("rua", "123", "centro", " ", "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "rua", NUMBER, NEIGHBORHOOD, " ", STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.CITY_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -89,7 +123,7 @@ void shouldThrowExceptionForEmptyCityName() { @Test void shouldThrowExceptionForNullCityName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("null", "123", "centro", null, "Estado", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "null", NUMBER, NEIGHBORHOOD, null, STATE, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.CITY_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -98,7 +132,7 @@ void shouldThrowExceptionForNullCityName() { @Test void shouldThrowExceptionForEmptyStateName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("rua", "123", "centro", "cidade", " ", "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "rua", NUMBER, NEIGHBORHOOD, CITY, " ", ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.STATE_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -107,7 +141,7 @@ void shouldThrowExceptionForEmptyStateName() { @Test void shouldThrowExceptionForNullStateName() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("null", "123", "centro", "cidade", null, "93200100")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "null", NUMBER, NEIGHBORHOOD, CITY, null, ZIP)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.STATE_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -116,7 +150,7 @@ void shouldThrowExceptionForNullStateName() { @Test void shouldThrowExceptionForEmptyZipCode() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("rua", "123", "centro", "cidade", "Estado", "")); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "rua", NUMBER, NEIGHBORHOOD, CITY, STATE, "")); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.CEP_ERROR_MESSAGE), exception.getMessage()); @@ -125,7 +159,7 @@ void shouldThrowExceptionForEmptyZipCode() { @Test void shouldThrowExceptionForNullZipCode() { - AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address("null", "123", "centro", "cidade", "Estado", null)); + AddressCreationFailureException exception = assertThrows(AddressCreationFailureException.class, () -> new Address(ADDRESS_ID, "null", NUMBER, NEIGHBORHOOD, CITY, STATE, null)); assertNotNull(exception); assertEquals(AddressCreationFailureException.ERROR.buildMessage(Address.CEP_ERROR_MESSAGE), exception.getMessage()); diff --git a/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/DonationTest.java b/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/DonationTest.java index 1bd570d..41ae4c1 100644 --- a/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/DonationTest.java +++ b/src/test/java/diegosneves/github/conectardoacoes/core/domain/shelter/entity/value/DonationTest.java @@ -2,8 +2,11 @@ import diegosneves.github.conectardoacoes.core.enums.ExceptionDetails; import diegosneves.github.conectardoacoes.core.exception.DonationRegisterFailureException; +import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.junit.jupiter.MockitoExtension; import static org.junit.jupiter.api.Assertions.*; @@ -11,44 +14,66 @@ @ExtendWith(MockitoExtension.class) class DonationTest { + public static final String DONATION_ID = "5945ced6-9f60-4c75-85ce-d69f60fc75c4"; + public static final String DONATION_DESCRIPTION = "Item 01"; + public static final int DONATION_AMOUNT = 2; + @Test void donationObjectShouldBeInitializedWithCorrectValues() { - Donation donation = new Donation("Item 01", 2); + Donation donation = new Donation(DONATION_ID, DONATION_DESCRIPTION, DONATION_AMOUNT); assertNotNull(donation); - assertEquals("Item 01", donation.getDescription()); - assertEquals(2, donation.getAmount()); + assertEquals(DONATION_ID, donation.getId()); + assertEquals(DONATION_DESCRIPTION, donation.getDescription()); + assertEquals(DONATION_AMOUNT, donation.getAmount()); } @Test void donationObjectShouldBeInitializedWithDefaultAmountWhenGivenAmountIsZero() { - Donation donation = new Donation("Item 02", 0); + Donation donation = new Donation(DONATION_ID, DONATION_DESCRIPTION, 0); assertNotNull(donation); - assertEquals("Item 02", donation.getDescription()); + assertEquals(DONATION_ID, donation.getId()); + assertEquals(DONATION_DESCRIPTION, donation.getDescription()); assertEquals(Donation.DEFAULT_DONATION_AMOUNT, donation.getAmount()); } @Test void shouldNotBeInitializedWithNullDescription() { - DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation(null, 1)); + DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation(DONATION_ID,null, 1)); assertNotNull(exception); assertEquals(ExceptionDetails.DONATION_CREATION_ERROR.buildMessage(Donation.INVALID_DESCRIPTION_ERROR), exception.getMessage()); } @Test void shouldNotBeInitializedWithEmptyDescription() { - DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation(" ", 1)); + DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation(DONATION_ID," ", -1)); assertNotNull(exception); assertEquals(ExceptionDetails.DONATION_CREATION_ERROR.buildMessage(Donation.INVALID_DESCRIPTION_ERROR), exception.getMessage()); } @Test void shouldNotBeInitializedWithNullAmount() { - DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation("null", null)); + DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation(DONATION_ID,"null", null)); assertNotNull(exception); assertEquals(ExceptionDetails.DONATION_CREATION_ERROR.buildMessage(Donation.INVALID_QUANTITY), exception.getMessage()); } + @Test + void shouldNotBeInitializedWithNullId() { + DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation(null, DONATION_DESCRIPTION, DONATION_AMOUNT)); + assertNotNull(exception); + assertEquals(ExceptionDetails.DONATION_CREATION_ERROR.buildMessage(Donation.INVALID_ID_MESSAGE), exception.getMessage()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @ValueSource(strings = {" ", "null"}) + void shouldNotBeInitializedWithEmptyOrInvalidId(String id) { + DonationRegisterFailureException exception = assertThrows(DonationRegisterFailureException.class, () -> new Donation(id, DONATION_DESCRIPTION, DONATION_AMOUNT)); + assertNotNull(exception); + assertEquals(ExceptionDetails.DONATION_CREATION_ERROR.buildMessage(Donation.INVALID_ID_MESSAGE), exception.getMessage()); + assertEquals(UuidUtilsException.class, exception.getCause().getClass()); + } } diff --git a/src/test/java/diegosneves/github/conectardoacoes/core/service/ShelterServiceTest.java b/src/test/java/diegosneves/github/conectardoacoes/core/service/ShelterServiceTest.java index 4e2da2e..0709079 100644 --- a/src/test/java/diegosneves/github/conectardoacoes/core/service/ShelterServiceTest.java +++ b/src/test/java/diegosneves/github/conectardoacoes/core/service/ShelterServiceTest.java @@ -4,7 +4,7 @@ import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Address; import diegosneves.github.conectardoacoes.core.domain.shelter.entity.value.Donation; -import diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterRepository; +import diegosneves.github.conectardoacoes.core.domain.shelter.shared.repository.ShelterContractRepository; import diegosneves.github.conectardoacoes.core.domain.user.entity.User; import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; @@ -14,16 +14,23 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.lang.reflect.Field; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.never; @@ -35,11 +42,14 @@ class ShelterServiceTest { public static final String SHELTER_IDENTIFIER = "89142bda-7b0c-4421-af28-f9cadb316024"; + public static final String SHELTER_NAME = "Abrigo"; + public static final String USER_UUID = "0ed6e6a1-882c-4d2d-83ee-67034ee1ab9f"; public static final String USERNAME = "Fulano"; public static final String USER_EMAIL = "teste@email.com"; public static final String USER_PASSWORD = "senha"; - public static final String SHELTER_NAME = "Abrigo"; + + public static final String ADDRESS_ID = "b6912f61-312b-48c2-912f-61312b38c249"; public static final String ADDRESS_STREET = "Rua"; public static final String BUILDING_NUMBER = "54"; public static final String NEIGHBORHOOD = "Bairro"; @@ -47,11 +57,15 @@ class ShelterServiceTest { public static final String STATE_ABBREVIATION = "RS"; public static final String SHELTER_ZIPCODE = "95000000"; + public static final String DONATION_ID = "8df29915-a43d-4dc2-b299-15a43d9dc2b2"; + public static final String DONATED_ITEM = "item"; + public static final int AMOUNT = 1; + @InjectMocks private ShelterService service; @Mock - private ShelterRepository repository; + private ShelterContractRepository repository; @Captor private ArgumentCaptor shelterCaptor; @@ -63,17 +77,17 @@ class ShelterServiceTest { @BeforeEach void setUp() { this.user = new User(USER_UUID, USERNAME, USER_EMAIL, UserProfile.BENEFICIARY, USER_PASSWORD); - this.address = new Address(ADDRESS_STREET, BUILDING_NUMBER, NEIGHBORHOOD, SHELTER_CITY, STATE_ABBREVIATION, SHELTER_ZIPCODE); + this.address = new Address(ADDRESS_ID, ADDRESS_STREET, BUILDING_NUMBER, NEIGHBORHOOD, SHELTER_CITY, STATE_ABBREVIATION, SHELTER_ZIPCODE); this.shelter = new Shelter(SHELTER_IDENTIFIER, SHELTER_NAME, this.address, this.user); } @Test void shouldReturnShelterContract() { - when(this.repository.save(any(ShelterContract.class))).thenReturn(this.shelter); + when(this.repository.persist(any(ShelterContract.class))).thenReturn(this.shelter); ShelterContract actual = this.service.createShelter(SHELTER_NAME, this.address, this.user); - verify(this.repository, times(1)).save(this.shelterCaptor.capture()); + verify(this.repository, times(AMOUNT)).persist(this.shelterCaptor.capture()); assertNotNull(actual); assertNotNull(this.shelterCaptor.getValue()); @@ -91,7 +105,7 @@ void shouldThrowShelterCreationFailureExceptionWhenShelterNameIsNull() { Exception actual = assertThrows(Exception.class, () -> this.service.createShelter(null, this.address, this.user)); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(actual); assertEquals(ShelterCreationFailureException.class, actual.getClass()); @@ -103,7 +117,7 @@ void shouldThrowShelterCreationFailureExceptionWhenShelterNameIsEmpty() { Exception actual = assertThrows(Exception.class, () -> this.service.createShelter("", this.address, this.user)); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(actual); assertEquals(ShelterCreationFailureException.class, actual.getClass()); @@ -115,7 +129,7 @@ void shouldThrowShelterCreationFailureExceptionWhenShelterAddressIsNull() { Exception actual = assertThrows(Exception.class, () -> this.service.createShelter(SHELTER_NAME, null, this.user)); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(actual); assertEquals(ShelterCreationFailureException.class, actual.getClass()); @@ -127,7 +141,7 @@ void shouldThrowShelterCreationFailureExceptionWhenShelterUserIsNull() { Exception actual = assertThrows(Exception.class, () -> this.service.createShelter(SHELTER_NAME, this.address, null)); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(actual); assertEquals(ShelterCreationFailureException.class, actual.getClass()); @@ -135,11 +149,11 @@ void shouldThrowShelterCreationFailureExceptionWhenShelterUserIsNull() { @Test void shouldRetrieveShelterContractUsingGivenShelterIdentifier() { - when(this.repository.findById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); + when(this.repository.findEntityById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); ShelterContract actual = this.service.getShelter(SHELTER_IDENTIFIER); - verify(this.repository, times(1)).findById(SHELTER_IDENTIFIER); + verify(this.repository, times(AMOUNT)).findEntityById(SHELTER_IDENTIFIER); assertNotNull(actual); assertEquals(this.shelter, actual); @@ -147,11 +161,11 @@ void shouldRetrieveShelterContractUsingGivenShelterIdentifier() { @Test void shouldRetrieveNullShelterContractUsingGivenShelterIdentifier() { - when(this.repository.findById(SHELTER_IDENTIFIER)).thenReturn(null); + when(this.repository.findEntityById(SHELTER_IDENTIFIER)).thenReturn(null); ShelterContract actual = this.service.getShelter(SHELTER_IDENTIFIER); - verify(this.repository, times(1)).findById(SHELTER_IDENTIFIER); + verify(this.repository, times(AMOUNT)).findEntityById(SHELTER_IDENTIFIER); assertNull(actual); } @@ -161,7 +175,7 @@ void shouldThrowExceptionWhenGivenNullShelterId() { ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.getShelter(null)); - verify(this.repository, never()).findById(anyString()); + verify(this.repository, never()).findEntityById(anyString()); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -172,7 +186,7 @@ void shouldThrowExceptionWhenGivenEmptyShelterId() { ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.getShelter("")); - verify(this.repository, never()).findById(anyString()); + verify(this.repository, never()).findEntityById(anyString()); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -183,7 +197,7 @@ void shouldThrowExceptionWhenGivenInvalidShelterId() { ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.getShelter("idInvalid")); - verify(this.repository, never()).findById(anyString()); + verify(this.repository, never()).findEntityById(anyString()); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -193,12 +207,12 @@ void shouldThrowExceptionWhenGivenInvalidShelterId() { @Test void shouldChangeShelterNameWhenGivenValidShelterIdentifier() { String newShelterName = "newShelterName"; - when(this.repository.findById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); + when(this.repository.findEntityById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); this.service.changeShelterName(SHELTER_IDENTIFIER, newShelterName); - verify(this.repository, times(1)).findById(SHELTER_IDENTIFIER); - verify(this.repository, times(1)).save(this.shelterCaptor.capture()); + verify(this.repository, times(AMOUNT)).findEntityById(SHELTER_IDENTIFIER); + verify(this.repository, times(AMOUNT)).persist(this.shelterCaptor.capture()); assertNotNull(shelterCaptor.getValue()); Shelter updatedShelter = this.shelterCaptor.getValue(); @@ -215,8 +229,8 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterNameIsEmpty() { ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.changeShelterName(SHELTER_IDENTIFIER, newShelterName)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -228,8 +242,8 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterNameIsNull() { ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.changeShelterName(SHELTER_IDENTIFIER, null)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_NAME_ERROR_MESSAGE), exception.getMessage()); @@ -241,8 +255,8 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsInvalidOnChangeShel ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.changeShelterName("SHELTER_IDENTIFIER", SHELTER_NAME)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -251,13 +265,13 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsInvalidOnChangeShel @Test void shouldUpdateAndSaveShelterAddressGivenValidShelterId() { - Address addressUpdate = new Address(ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); - when(this.repository.findById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); + Address addressUpdate = new Address(ADDRESS_ID, ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); + when(this.repository.findEntityById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); this.service.changeAddress(SHELTER_IDENTIFIER, addressUpdate); - verify(this.repository, times(1)).findById(SHELTER_IDENTIFIER); - verify(this.repository, times(1)).save(this.shelterCaptor.capture()); + verify(this.repository, times(AMOUNT)).findEntityById(SHELTER_IDENTIFIER); + verify(this.repository, times(AMOUNT)).persist(this.shelterCaptor.capture()); assertNotNull(shelterCaptor.getValue()); Shelter updatedShelter = this.shelterCaptor.getValue(); @@ -270,13 +284,13 @@ void shouldUpdateAndSaveShelterAddressGivenValidShelterId() { @Test void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsEmptyOnChangeAddress() { - Address addressUpdate = new Address(ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); + Address addressUpdate = new Address(ADDRESS_ID, ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.changeAddress("", addressUpdate)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -284,13 +298,13 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsEmptyOnChangeAddres @Test void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsNullOnChangeAddress() { - Address addressUpdate = new Address(ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); + Address addressUpdate = new Address(ADDRESS_ID, ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.changeAddress(null, addressUpdate)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -298,13 +312,13 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsNullOnChangeAddress @Test void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsInvalidOnChangeAddress() { - Address addressUpdate = new Address(ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); + Address addressUpdate = new Address(ADDRESS_ID, ADDRESS_STREET, "377", NEIGHBORHOOD, "Esteio", STATE_ABBREVIATION, SHELTER_ZIPCODE); ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.changeAddress("SHELTER_IDENTIFIER", addressUpdate)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -317,8 +331,8 @@ void shouldThrowShelterServiceFailureExceptionWhenNewAddressIsNullOnChangeAddres ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.changeAddress(SHELTER_IDENTIFIER, null)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.ERROR_MESSAGE_ADDRESS_NULL), exception.getMessage()); @@ -326,31 +340,31 @@ void shouldThrowShelterServiceFailureExceptionWhenNewAddressIsNullOnChangeAddres @Test void shouldAddDonationToShelter() { - Donation donation = new Donation("item", 1); + Donation donation = new Donation(DONATION_ID, DONATED_ITEM, AMOUNT); - when(this.repository.findById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); + when(this.repository.findEntityById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); this.service.addDonation(SHELTER_IDENTIFIER, donation); - verify(this.repository, times(1)).findById(SHELTER_IDENTIFIER); - verify(this.repository, times(1)).save(this.shelterCaptor.capture()); + verify(this.repository, times(1)).findEntityById(SHELTER_IDENTIFIER); + verify(this.repository, times(1)).persist(this.shelterCaptor.capture()); assertNotNull(shelterCaptor.getValue()); Shelter updatedShelter = this.shelterCaptor.getValue(); assertFalse(updatedShelter.getDonations().isEmpty()); - assertEquals(1, updatedShelter.getDonations().size()); + assertEquals(AMOUNT, updatedShelter.getDonations().size()); assertEquals(donation, updatedShelter.getDonations().get(0)); } @Test void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsNullOnAddDonation() { - Donation donation = new Donation("item", 1); + Donation donation = new Donation(DONATION_ID, DONATED_ITEM, AMOUNT); ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.addDonation(null, donation)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -358,13 +372,13 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsNullOnAddDonation() @Test void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsEmptyOnAddDonation() { - Donation donation = new Donation("item", 1); + Donation donation = new Donation(DONATION_ID, DONATED_ITEM, AMOUNT); ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.addDonation(" ", donation)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -372,13 +386,13 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsEmptyOnAddDonation( @Test void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsInvalidOnAddDonation() { - Donation donation = new Donation("item", 1); + Donation donation = new Donation(DONATION_ID, DONATED_ITEM, AMOUNT); ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.addDonation("SHELTER_IDENTIFIER", donation)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); @@ -391,8 +405,8 @@ void shouldThrowShelterServiceFailureExceptionWhenDonationIsNullOnAddDonation() ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.addDonation(SHELTER_IDENTIFIER, null)); - verify(this.repository, never()).findById(anyString()); - verify(this.repository, never()).save(any(ShelterContract.class)); + verify(this.repository, never()).findEntityById(anyString()); + verify(this.repository, never()).persist(any(ShelterContract.class)); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.DONATION_REQUIRED_ERROR_MESSAGE), exception.getMessage()); @@ -400,27 +414,27 @@ void shouldThrowShelterServiceFailureExceptionWhenDonationIsNullOnAddDonation() @Test void shouldReturnListOfDonations() { - Donation donation = new Donation("item", 1); + Donation donation = new Donation(DONATION_ID, DONATED_ITEM, AMOUNT); this.shelter.addDonation(donation); - when(this.repository.findById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); + when(this.repository.findEntityById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); List list = this.service.getDonations(SHELTER_IDENTIFIER); - verify(this.repository, times(1)).findById(SHELTER_IDENTIFIER); + verify(this.repository, times(1)).findEntityById(SHELTER_IDENTIFIER); assertNotNull(list); assertFalse(this.shelter.getDonations().isEmpty()); - assertEquals(1, list.size()); + assertEquals(AMOUNT, list.size()); assertEquals(donation, list.get(0)); } @Test void shouldReturnListOfDonationsEmpty() { - when(this.repository.findById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); + when(this.repository.findEntityById(SHELTER_IDENTIFIER)).thenReturn(this.shelter); List list = this.service.getDonations(SHELTER_IDENTIFIER); - verify(this.repository, times(1)).findById(SHELTER_IDENTIFIER); + verify(this.repository, times(1)).findEntityById(SHELTER_IDENTIFIER); assertNotNull(list); assertTrue(this.shelter.getDonations().isEmpty()); @@ -431,29 +445,19 @@ void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsNullOnGetDonations( ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.getDonations(null)); - verify(this.repository, never()).findById(anyString()); - - assertNotNull(exception); - assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); - } - - @Test - void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsEmptyOnGetDonations() { - - ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.getDonations("")); - - verify(this.repository, never()).findById(anyString()); + verify(this.repository, never()).findEntityById(anyString()); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); } - @Test - void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsInvalidOnGetDonations() { + @ParameterizedTest + @ValueSource(strings = {"", "SHELTER_IDENTIFIER"}) + void shouldThrowShelterServiceFailureExceptionWhenShelterIdIsEmptyOrInvalidOnGetDonations(String shelterIdentifier) { - ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.getDonations("SHELTER_IDENTIFIER")); + ShelterServiceFailureException exception = assertThrows(ShelterServiceFailureException.class, () -> this.service.getDonations(shelterIdentifier)); - verify(this.repository, never()).findById(anyString()); + verify(this.repository, never()).findEntityById(anyString()); assertNotNull(exception); assertEquals(ShelterServiceFailureException.ERROR.buildMessage(ShelterService.INVALID_SHELTER_ID_MESSAGE), exception.getMessage()); diff --git a/src/test/java/diegosneves/github/conectardoacoes/core/service/UserServiceTest.java b/src/test/java/diegosneves/github/conectardoacoes/core/service/UserServiceTest.java index 9c9054b..3341449 100644 --- a/src/test/java/diegosneves/github/conectardoacoes/core/service/UserServiceTest.java +++ b/src/test/java/diegosneves/github/conectardoacoes/core/service/UserServiceTest.java @@ -1,12 +1,9 @@ package diegosneves.github.conectardoacoes.core.service; -import diegosneves.github.conectardoacoes.core.domain.shelter.entity.ShelterContract; import diegosneves.github.conectardoacoes.core.domain.user.entity.User; import diegosneves.github.conectardoacoes.core.domain.user.entity.UserContract; import diegosneves.github.conectardoacoes.core.domain.user.entity.value.UserProfile; -import diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserRepository; -import diegosneves.github.conectardoacoes.core.enums.ExceptionDetails; -import diegosneves.github.conectardoacoes.core.exception.ShelterCreationFailureException; +import diegosneves.github.conectardoacoes.core.domain.user.shared.repository.UserContractRepository; import diegosneves.github.conectardoacoes.core.exception.UserCreationFailureException; import diegosneves.github.conectardoacoes.core.exception.UserServiceFailureException; import diegosneves.github.conectardoacoes.core.exception.UuidUtilsException; @@ -19,7 +16,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -46,7 +42,7 @@ class UserServiceTest { private UserService userService; @Mock - private UserRepository userRepository; + private UserContractRepository userContractRepository; @Captor private ArgumentCaptor userCaptor; @@ -60,11 +56,11 @@ void setUp() { @Test void shouldCreateUserAndReturnCreatedUser() { - when(this.userRepository.save(any(UserContract.class))).thenReturn(this.user); + when(this.userContractRepository.persist(any(UserContract.class))).thenReturn(this.user); UserContract actual = this.userService.createUser(USERNAME, USER_EMAIL, UserProfile.BENEFICIARY, USER_PASSWORD); - verify(this.userRepository, times(1)).save(this.userCaptor.capture()); + verify(this.userContractRepository, times(1)).persist(this.userCaptor.capture()); assertNotNull(this.userCaptor.getValue()); User returnedUser = this.userCaptor.getValue(); @@ -87,7 +83,7 @@ void shouldThrowUserCreationFailureExceptionWhenUsernameIsNull() { Exception actual = assertThrows(Exception.class, () -> this.userService.createUser(null, USER_EMAIL, UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.class, actual.getClass()); @@ -99,7 +95,7 @@ void shouldThrowUserCreationFailureExceptionWhenUsernameIsEmpty() { Exception actual = assertThrows(Exception.class, () -> this.userService.createUser(" ", USER_EMAIL, UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.class, actual.getClass()); @@ -111,7 +107,7 @@ void shouldThrowUserCreationFailureExceptionWhenUserEmailIsNull() { Exception actual = assertThrows(Exception.class, () -> this.userService.createUser(USERNAME, null, UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.class, actual.getClass()); @@ -123,7 +119,7 @@ void shouldThrowUserCreationFailureExceptionWhenUserEmailIsEmpty() { Exception actual = assertThrows(Exception.class, () -> this.userService.createUser(USERNAME, "", UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.class, actual.getClass()); @@ -135,7 +131,7 @@ void shouldThrowUserCreationFailureExceptionWhenUserProfileIsNull() { Exception actual = assertThrows(Exception.class, () -> this.userService.createUser(USERNAME, USER_EMAIL, null, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.class, actual.getClass()); @@ -147,7 +143,7 @@ void shouldThrowUserCreationFailureExceptionWhenUserPasswordIsNull() { Exception actual = assertThrows(Exception.class, () -> this.userService.createUser(USERNAME, USER_EMAIL, UserProfile.BENEFICIARY, null)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.class, actual.getClass()); @@ -159,7 +155,7 @@ void shouldThrowUserCreationFailureExceptionWhenUserPasswordIsEmpty() { Exception actual = assertThrows(Exception.class, () -> this.userService.createUser(USERNAME, USER_EMAIL, UserProfile.BENEFICIARY, " ")); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.class, actual.getClass()); @@ -171,7 +167,7 @@ void shouldThrowExceptionWhenUsernameIsNullOnCreateUser() { UserCreationFailureException actual = assertThrows(UserCreationFailureException.class, () -> this.userService.createUser(null, USER_EMAIL, UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.ERROR.buildMessage(String.format(User.USERNAME_REQUIRED, UserProfile.BENEFICIARY)), actual.getMessage()); @@ -183,7 +179,7 @@ void shouldThrowExceptionWhenUsernameIsEmptyOnCreateUser() { UserCreationFailureException actual = assertThrows(UserCreationFailureException.class, () -> this.userService.createUser(" ", USER_EMAIL, UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.ERROR.buildMessage(String.format(User.USERNAME_REQUIRED, UserProfile.BENEFICIARY)), actual.getMessage()); @@ -195,7 +191,7 @@ void shouldThrowExceptionWhenEmailIsNullOnCreateUser() { UserCreationFailureException actual = assertThrows(UserCreationFailureException.class, () -> this.userService.createUser(USERNAME, null, UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.ERROR.buildMessage(User.EMAIL_NOT_PROVIDED), actual.getMessage()); @@ -207,7 +203,7 @@ void shouldThrowExceptionWhenEmailIsEmptyOnCreateUser() { UserCreationFailureException actual = assertThrows(UserCreationFailureException.class, () -> this.userService.createUser(USERNAME, "", UserProfile.BENEFICIARY, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.ERROR.buildMessage(User.EMAIL_NOT_PROVIDED), actual.getMessage()); @@ -219,7 +215,7 @@ void shouldThrowExceptionWhenUserProfileIsNullOnCreateUser() { UserCreationFailureException actual = assertThrows(UserCreationFailureException.class, () -> this.userService.createUser(USERNAME, USER_EMAIL, null, USER_PASSWORD)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.ERROR.buildMessage(User.PROFILE_NOT_PROVIDED), actual.getMessage()); @@ -231,7 +227,7 @@ void shouldThrowExceptionWhenPasswordIsNullOnCreateUser() { UserCreationFailureException actual = assertThrows(UserCreationFailureException.class, () -> this.userService.createUser(USERNAME, USER_EMAIL, UserProfile.BENEFICIARY, null)); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.ERROR.buildMessage(User.PASSWORD_NOT_PROVIDED), actual.getMessage()); @@ -243,7 +239,7 @@ void shouldThrowExceptionWhenPasswordIsEmptyOnCreateUser() { UserCreationFailureException actual = assertThrows(UserCreationFailureException.class, () -> this.userService.createUser(USERNAME, USER_EMAIL, UserProfile.BENEFICIARY, " ")); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(actual); assertEquals(UserCreationFailureException.ERROR.buildMessage(User.PASSWORD_NOT_PROVIDED), actual.getMessage()); @@ -251,11 +247,11 @@ void shouldThrowExceptionWhenPasswordIsEmptyOnCreateUser() { @Test void shouldGetUserById() { - when(this.userRepository.findById(USER_UUID)).thenReturn(this.user); + when(this.userContractRepository.findEntityById(USER_UUID)).thenReturn(this.user); UserContract actual = this.userService.getUser(USER_UUID); - verify(this.userRepository, times(1)).findById(USER_UUID); + verify(this.userContractRepository, times(1)).findEntityById(USER_UUID); assertNotNull(actual); assertEquals(this.user, actual); @@ -263,11 +259,11 @@ void shouldGetUserById() { @Test void shouldReturnNullWhenUserNotFoundOnGetUser() { - when(this.userRepository.findById(USER_IDENTIFIER)).thenReturn(null); + when(this.userContractRepository.findEntityById(USER_IDENTIFIER)).thenReturn(null); UserContract actual = this.userService.getUser(USER_IDENTIFIER); - verify(this.userRepository, times(1)).findById(USER_IDENTIFIER); + verify(this.userContractRepository, times(1)).findEntityById(USER_IDENTIFIER); assertNull(actual); } @@ -277,7 +273,7 @@ void shouldThrowUserServiceFailureExceptionWhenNullUserIdProvidedOnGetUser() { UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.getUser(null)); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -288,7 +284,7 @@ void shouldThrowUserServiceFailureExceptionWhenEmptyUserIdProvidedOnGetUser() { UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.getUser(" ")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -299,7 +295,7 @@ void shouldThrowUserServiceFailureExceptionWhenInvalidUserIdProvidedOnGetUser() UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.getUser("id")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -309,12 +305,12 @@ void shouldThrowUserServiceFailureExceptionWhenInvalidUserIdProvidedOnGetUser() @Test void shouldChangeUserPasswordAndPersistTheChange() { String newPassword = "newPassword"; - when(this.userRepository.findById(USER_UUID)).thenReturn(this.user); + when(this.userContractRepository.findEntityById(USER_UUID)).thenReturn(this.user); this.userService.changePassword(USER_UUID, newPassword); - verify(this.userRepository, times(1)).findById(USER_UUID); - verify(this.userRepository, times(1)).save(this.userCaptor.capture()); + verify(this.userContractRepository, times(1)).findEntityById(USER_UUID); + verify(this.userContractRepository, times(1)).persist(this.userCaptor.capture()); assertNotNull(userCaptor.getValue()); User updatedUser = userCaptor.getValue(); @@ -331,8 +327,8 @@ void shouldThrowUserServiceFailureExceptionWhenNewPasswordIsNull() { UserServiceFailureException exception = assertThrows(UserServiceFailureException.class, () -> this.userService.changePassword(USER_UUID, null)); - verify(this.userRepository, never()).findById(USER_UUID); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).findEntityById(USER_UUID); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(exception); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_NEW_PASSWORD_MESSAGE), exception.getMessage()); @@ -345,8 +341,8 @@ void shouldThrowUserServiceFailureExceptionWhenNewPasswordIsEmpty() { UserServiceFailureException exception = assertThrows(UserServiceFailureException.class, () -> this.userService.changePassword(USER_UUID, newPassword)); - verify(this.userRepository, never()).findById(USER_UUID); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).findEntityById(USER_UUID); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(exception); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_NEW_PASSWORD_MESSAGE), exception.getMessage()); @@ -355,13 +351,13 @@ void shouldThrowUserServiceFailureExceptionWhenNewPasswordIsEmpty() { @Test void shouldThrowUserServiceFailureExceptionWhenUserNotFound() { String newPassword = "newPassword"; - when(this.userRepository.findById(USER_UUID)).thenReturn(null); + when(this.userContractRepository.findEntityById(USER_UUID)).thenReturn(null); UserServiceFailureException exception = assertThrows(UserServiceFailureException.class, () -> this.userService.changePassword(USER_UUID, newPassword)); - verify(this.userRepository, times(1)).findById(USER_UUID); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, times(1)).findEntityById(USER_UUID); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(exception); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.USER_NOT_FOUND_MESSAGE), exception.getMessage()); @@ -372,7 +368,7 @@ void shouldThrowUserServiceFailureExceptionWhenNullUserIdProvidedOnChangePasswor UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.changePassword(null, "newPassword")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -383,7 +379,7 @@ void shouldThrowUserServiceFailureExceptionWhenEmptyUserIdProvidedOnChangePasswo UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.changePassword(" ", "newPassword")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -394,7 +390,7 @@ void shouldThrowUserServiceFailureExceptionWhenInvalidUserIdProvidedOnChangePass UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.changePassword("Invalid", "newPassword")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -404,12 +400,12 @@ void shouldThrowUserServiceFailureExceptionWhenInvalidUserIdProvidedOnChangePass @Test void shouldChangeUsernameAndPersistTheChange() { String newUsername = "newUsername"; - when(this.userRepository.findById(USER_UUID)).thenReturn(this.user); + when(this.userContractRepository.findEntityById(USER_UUID)).thenReturn(this.user); this.userService.changeUserName(USER_UUID, newUsername); - verify(this.userRepository, times(1)).findById(USER_UUID); - verify(this.userRepository, times(1)).save(this.userCaptor.capture()); + verify(this.userContractRepository, times(1)).findEntityById(USER_UUID); + verify(this.userContractRepository, times(1)).persist(this.userCaptor.capture()); assertNotNull(userCaptor.getValue()); User updatedUser = userCaptor.getValue(); @@ -426,8 +422,8 @@ void shouldThrowUserServiceFailureExceptionWhenNewUsernameIsNull() { UserServiceFailureException exception = assertThrows(UserServiceFailureException.class, () -> this.userService.changeUserName(USER_UUID, null)); - verify(this.userRepository, never()).findById(USER_UUID); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).findEntityById(USER_UUID); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(exception); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.USERNAME_INVALID_ERROR_MESSAGE), exception.getMessage()); @@ -440,8 +436,8 @@ void shouldThrowUserServiceFailureExceptionWhenNewUsernameIsEmpty() { UserServiceFailureException exception = assertThrows(UserServiceFailureException.class, () -> this.userService.changeUserName(USER_UUID, newUsername)); - verify(this.userRepository, never()).findById(USER_UUID); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, never()).findEntityById(USER_UUID); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(exception); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.USERNAME_INVALID_ERROR_MESSAGE), exception.getMessage()); @@ -450,13 +446,13 @@ void shouldThrowUserServiceFailureExceptionWhenNewUsernameIsEmpty() { @Test void shouldThrowUserServiceFailureExceptionWhenUserNotFoundOnChangeUsername() { String newUsername = "newUsername"; - when(this.userRepository.findById(USER_UUID)).thenReturn(null); + when(this.userContractRepository.findEntityById(USER_UUID)).thenReturn(null); UserServiceFailureException exception = assertThrows(UserServiceFailureException.class, () -> this.userService.changeUserName(USER_UUID, newUsername)); - verify(this.userRepository, times(1)).findById(USER_UUID); - verify(this.userRepository, never()).save(any(UserContract.class)); + verify(this.userContractRepository, times(1)).findEntityById(USER_UUID); + verify(this.userContractRepository, never()).persist(any(UserContract.class)); assertNotNull(exception); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.USER_NOT_FOUND_MESSAGE), exception.getMessage()); @@ -468,7 +464,7 @@ void shouldThrowUserServiceFailureExceptionWhenNullUserIdProvidedOnChangeUsernam UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.changeUserName(null, "newUsername")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -480,7 +476,7 @@ void shouldThrowUserServiceFailureExceptionWhenEmptyUserIdProvidedOnChangeUserna UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.changeUserName(" ", "newUsername")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); @@ -492,7 +488,7 @@ void shouldThrowUserServiceFailureExceptionWhenInvalidUserIdProvidedOnChangeUser UserServiceFailureException actual = assertThrows(UserServiceFailureException.class, () -> this.userService.changeUserName("ID", "newUsername")); - verify(this.userRepository, never()).findById(anyString()); + verify(this.userContractRepository, never()).findEntityById(anyString()); assertNotNull(actual); assertEquals(UserServiceFailureException.ERROR.buildMessage(UserService.INVALID_IDENTIFIER_ERROR_MESSAGE), actual.getMessage()); diff --git a/src/test/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtilsTest.java b/src/test/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtilsTest.java index 1cbe45d..fb3e5ec 100644 --- a/src/test/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtilsTest.java +++ b/src/test/java/diegosneves/github/conectardoacoes/core/utils/ValidationUtilsTest.java @@ -28,7 +28,7 @@ void setUp() { void isNullOrEmpty() { this.value = "Teste"; try { - ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.value, EMPTY_VALUE_ERROR, IllegalArgumentException.class); + ValidationUtils.validateNotNullOrEmpty(this.value, EMPTY_VALUE_ERROR, IllegalArgumentException.class); } catch (Exception e) { fail(UNEXPECTED_EXCEPTION); } @@ -38,7 +38,7 @@ void isNullOrEmpty() { void checkStringNotNull() { this.value = null; IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, - () -> ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.value, NULL_VALUE_ERROR_MESSAGE, IllegalArgumentException.class)); + () -> ValidationUtils.validateNotNullOrEmpty(this.value, NULL_VALUE_ERROR_MESSAGE, IllegalArgumentException.class)); assertNotNull(exception); assertEquals(NULL_VALUE_ERROR_MESSAGE, exception.getMessage()); @@ -49,7 +49,7 @@ void checkStringNotNullWithValidateUtilsException() { this.value = null; ValidationUtilsException exception = assertThrows(ValidationUtilsException.class, - () -> ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.value, NULL_VALUE_ERROR_MESSAGE, NoMethodFoundException.class)); + () -> ValidationUtils.validateNotNullOrEmpty(this.value, NULL_VALUE_ERROR_MESSAGE, NoMethodFoundException.class)); assertNotNull(exception); assertEquals(ValidationUtilsException.ERROR.buildMessage(NoMethodFoundException.class.getSimpleName()), exception.getMessage()); @@ -59,7 +59,7 @@ void checkStringNotNullWithValidateUtilsException() { void checkStringNotEmptyWithValidateUtilsException() { ValidationUtilsException exception = assertThrows(ValidationUtilsException.class, - () -> ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.value, EMPTY_VALUE_ERROR, NoMethodFoundException.class)); + () -> ValidationUtils.validateNotNullOrEmpty(this.value, EMPTY_VALUE_ERROR, NoMethodFoundException.class)); assertNotNull(exception); assertEquals(ValidationUtilsException.ERROR.buildMessage(NoMethodFoundException.class.getSimpleName()), exception.getMessage()); @@ -68,7 +68,7 @@ void checkStringNotEmptyWithValidateUtilsException() { @Test void checkStringNotEmpty() { IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, - () -> ValidationUtils.checkNotNullAndNotEmptyOrThrowException(this.value, EMPTY_VALUE_ERROR, IllegalArgumentException.class)); + () -> ValidationUtils.validateNotNullOrEmpty(this.value, EMPTY_VALUE_ERROR, IllegalArgumentException.class)); assertNotNull(exception); assertEquals(EMPTY_VALUE_ERROR, exception.getMessage());