diff --git a/acquisition/.gitignore b/acquisition/.gitignore
deleted file mode 100644
index 4ea51ba3..00000000
--- a/acquisition/.gitignore
+++ /dev/null
@@ -1,35 +0,0 @@
-HELP.md
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-mvnw
-mvnw.cmd
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
diff --git a/acquisition/pom.xml b/acquisition/pom.xml
deleted file mode 100644
index f468af6d..00000000
--- a/acquisition/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
- 4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.4.2
-
-
- com.example
- acquisition
- 0.0.1-SNAPSHOT
- acquisition
- Microserviço de Vendas
-
- 1.8
- 2020.0.1
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
-
- org.springframework.boot
- spring-boot-starter-amqp
-
-
-
- mysql
- mysql-connector-java
- runtime
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
-
-
-
- org.springframework.boot
- spring-boot-devtools
- runtime
- true
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- io.springfox
- springfox-swagger2
- 2.9.2
-
-
- io.springfox
- springfox-swagger2
- 2.9.2
-
-
- io.springfox
- springfox-swagger-ui
- 2.9.2
-
-
- org.projectlombok
- lombok
-
-
- org.modelmapper
- modelmapper
- 2.3.5
- compile
-
-
- org.modelmapper
- modelmapper
- 2.3.5
- compile
-
-
- org.projectlombok
- lombok
-
-
- org.projectlombok
- lombok
-
-
-
-
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
diff --git a/acquisition/src/main/java/com/example/acquisition/AcquisitionApplication.java b/acquisition/src/main/java/com/example/acquisition/AcquisitionApplication.java
deleted file mode 100644
index b14514aa..00000000
--- a/acquisition/src/main/java/com/example/acquisition/AcquisitionApplication.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.example.acquisition;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@SpringBootApplication
-@EnableSwagger2
-public class AcquisitionApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(AcquisitionApplication.class, args);
- }
-
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/config/AppConf.java b/acquisition/src/main/java/com/example/acquisition/config/AppConf.java
deleted file mode 100644
index fbd133b6..00000000
--- a/acquisition/src/main/java/com/example/acquisition/config/AppConf.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.example.acquisition.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@Configuration
-public class AppConf implements WebMvcConfigurer {
-
- @Override
- public void addCorsMappings(CorsRegistry registry) {
- registry.addMapping("/**")
- .allowedOrigins("http://localhost:3000")
- .allowedMethods("PUT", "GET", "POST", "DELETE");
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/config/MessageConfig.java b/acquisition/src/main/java/com/example/acquisition/config/MessageConfig.java
deleted file mode 100644
index 682dcff3..00000000
--- a/acquisition/src/main/java/com/example/acquisition/config/MessageConfig.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.example.acquisition.config;
-
-import org.springframework.amqp.core.Exchange;
-import org.springframework.amqp.core.ExchangeBuilder;
-import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
-import org.springframework.amqp.support.converter.MessageConverter;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class MessageConfig {
-
- @Value("${crud.rabbitmq.exchange}")
- String exchange;
-
- @Bean
- public Exchange declareExchange() {
- return ExchangeBuilder.directExchange(exchange).durable(true).build();
- }
-
- @Bean
- public MessageConverter jsonMessageConverter() {
- return new Jackson2JsonMessageConverter();
- }
-
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/controller/AcquisitionController.java b/acquisition/src/main/java/com/example/acquisition/controller/AcquisitionController.java
deleted file mode 100644
index 8ce67e30..00000000
--- a/acquisition/src/main/java/com/example/acquisition/controller/AcquisitionController.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.example.acquisition.controller;
-
-import com.example.acquisition.enums.Status;
-import com.example.acquisition.service.ValidaCpfServiceImp;
-import com.example.acquisition.service.ValidaRendaServiceImp;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import io.swagger.annotations.ApiOperation;
-import java.time.LocalDate;
-import java.util.List;
-import com.example.acquisition.model.Acquisition;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-import com.example.acquisition.interfaces.services.IAcquisitionService;
-import com.example.acquisition.interfaces.services.IPropertyService;
-import com.example.acquisition.interfaces.services.IUserService;
-
-@RestController
-@RequestMapping("/acquisition")
-public class AcquisitionController {
-
- ValidaRendaServiceImp vrenda;
- private IAcquisitionService acquisitionService;
- private IPropertyService propertyService;
- private IUserService userService;
-
- public AcquisitionController(IAcquisitionService service, IPropertyService propertyService, IUserService userService) {
- this.acquisitionService = service;
- this.propertyService = propertyService;
- this.userService = userService;
- }
-
- @PostMapping("/save")
- @ApiOperation(value = "Salva uma compra")
- public ResponseEntity saveAcquisition(Long idProperty, Long idUser) {
- Property property = propertyService.findPropertyById(idProperty);
- User user = userService.findUserById(idUser);
- Acquisition acquisition = null;
-
- userService.validateUser(user, property);
-
- acquisition = Acquisition.builder()
- .data(LocalDate.now())
- .property(property)
- .user(user)
- .value(property.getPrice())
- .build();
-
- acquisitionService.save(acquisition);
- property.setStatus(Status.SOLD);
- propertyService.updateProperty(property);
- return ResponseEntity.status(HttpStatus.CREATED).body(acquisition);
- }
-
- @GetMapping("/user/find/{id}")
- @ApiOperation(value = "Encontra acquisitions através do id de um usuário")
- public ResponseEntity> getAcquisitionsByUserId(@PathVariable("id") Long id) {
- User user = userService.findUserById(id);
- List acquisitions = acquisitionService.findAllAcquisitionsByUser(user);
- return new ResponseEntity<>(acquisitions, HttpStatus.OK);
- }
-
- @GetMapping("/property/find/{id}")
- @ApiOperation(value = "Encontra acquisitions através do id de um imóvel")
- public ResponseEntity> getAcquisitionsByPropertyId(@PathVariable("id") Long id) {
- Property property = propertyService.findPropertyById(id);
- Acquisition acquisition = acquisitionService.findAcquisitionByProperty(property);
- return new ResponseEntity<>(acquisition, HttpStatus.OK);
- }
-
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/dto/AcquisitionDTO.java b/acquisition/src/main/java/com/example/acquisition/dto/AcquisitionDTO.java
deleted file mode 100644
index af63fbfc..00000000
--- a/acquisition/src/main/java/com/example/acquisition/dto/AcquisitionDTO.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.example.acquisition.dto;
-
-
-import java.util.Date;
-
-public class AcquisitionDTO {
-
- private Long id;
- private Date data;
- private Double value;
- private Long idProperty;
- private Long idUser;
-
- public AcquisitionDTO() {
- }
- public AcquisitionDTO(Long id, Date data, Double value, Long idProperty, Long idUser) {
- this.id = id;
- this.data = data;
- this.value = value;
- this.idProperty = idProperty;
- this.idUser = idUser;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public Date getData() {
- return data;
- }
-
- public void setData(Date data) {
- this.data = data;
- }
-
- public Long getIdProperty() {
- return idProperty;
- }
-
- public void setIdProperty(Long idProperty) {
- this.idProperty = idProperty;
- }
-
- public Long getIdUser() {
- return idUser;
- }
-
- public void setIdUser(Long idUser) {
- this.idUser = idUser;
- }
-
- public Double getValue() {
- return value;
- }
-
- public void setValue(Double value) {
- this.value = value;
- }
-
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/enums/Status.java b/acquisition/src/main/java/com/example/acquisition/enums/Status.java
deleted file mode 100644
index 4461461f..00000000
--- a/acquisition/src/main/java/com/example/acquisition/enums/Status.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.example.acquisition.enums;
-
-public enum Status {
- SOLD,
- AVAILABLE
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/exceptions/ValidacaoException.java b/acquisition/src/main/java/com/example/acquisition/exceptions/ValidacaoException.java
deleted file mode 100644
index 8b312734..00000000
--- a/acquisition/src/main/java/com/example/acquisition/exceptions/ValidacaoException.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.example.acquisition.exceptions;
-
-public class ValidacaoException extends RuntimeException {
-
- public ValidacaoException(String message){
- super(message);
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IAcquisitionService.java b/acquisition/src/main/java/com/example/acquisition/interfaces/services/IAcquisitionService.java
deleted file mode 100644
index ecbfbfb3..00000000
--- a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IAcquisitionService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.example.acquisition.interfaces.services;
-
-import java.util.List;
-import com.example.acquisition.model.Acquisition;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-
-public interface IAcquisitionService{
- void save(Acquisition acquisition);
- List findAllAcquisitionsByUser(User user);
- Acquisition findAcquisitionByProperty(Property property);
- Acquisition findAcquisitionById(Long id);
-
- /*Boolean validarCpf(User user);
- Boolean validaRenda(User user, Property property);
- Double calculaParteDoLucroPraImobiliaria(AcquisitionDTO acquisiton);
- Double calcularValorIPTU(AcquisitionDTO acquisition);*/
- //void calculaSeguro(Acquisition acquisition);
-
- //void calculaSeguro(Acquisition acquisition);
- //void validaRenda(User user);
- //Boolean possuiFiador(User user);
-
-
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IPropertyService.java b/acquisition/src/main/java/com/example/acquisition/interfaces/services/IPropertyService.java
deleted file mode 100644
index 815e4bca..00000000
--- a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IPropertyService.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.example.acquisition.interfaces.services;
-
-import com.example.acquisition.model.Property;
-
-public interface IPropertyService{
- Property findPropertyById(Long id);
- Double calculaParcela(Property property);
- void updateProperty(Property property);
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IUserService.java b/acquisition/src/main/java/com/example/acquisition/interfaces/services/IUserService.java
deleted file mode 100644
index de1d48fa..00000000
--- a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IUserService.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.example.acquisition.interfaces.services;
-
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-
-public interface IUserService{
-
- User findUserById(Long id);
-
- void validateUser(User user, Property property);
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IValidacaoService.java b/acquisition/src/main/java/com/example/acquisition/interfaces/services/IValidacaoService.java
deleted file mode 100644
index 346f5d68..00000000
--- a/acquisition/src/main/java/com/example/acquisition/interfaces/services/IValidacaoService.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.example.acquisition.interfaces.services;
-
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-
-import java.util.Collection;
-
-public interface IValidacaoService {
-
- void validate(User user, Property property);
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/model/Acquisition.java b/acquisition/src/main/java/com/example/acquisition/model/Acquisition.java
deleted file mode 100644
index 22d5d8a4..00000000
--- a/acquisition/src/main/java/com/example/acquisition/model/Acquisition.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.example.acquisition.model;
-
-import java.io.Serializable;
-import java.time.LocalDate;
-
-import lombok.Builder;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.JoinColumn;
-import javax.persistence.FetchType;
-
-import org.springframework.format.annotation.DateTimeFormat;
-
-@Entity
-@Builder
-public class Acquisition implements Serializable{
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Long id;
-
- @DateTimeFormat(pattern = "MM/dd/yyy")
- @Column(name = "data", nullable = false)
- private LocalDate data;
-
- @Column(name = "value", nullable = false)
- private Double value;
-
- @OneToOne(fetch = FetchType.EAGER)
- @JoinColumn(name = "id_property")
- private Property property;
-
- @OneToOne(fetch = FetchType.EAGER)
- @JoinColumn(name = "id_user")
- private User user;
-
- public Acquisition() {
- }
-
- public Acquisition(Long id, LocalDate data, Double value,Property property,User user) {
- this.id = id;
- this.data = data;
- this.value = value;
- this.property = property;
- this.user = user;
- }
-
- public Long getId() {
- return id;
- }
-
- public LocalDate getData() {
- return data;
- }
-
- public void setData(LocalDate localDate) {
- this.data = localDate;
- }
-
- public Property getProperty() {
- return property;
- }
-
- public void setProperty(Property property) {
- this.property = property;
- }
-
- public User getUser() {
- return user;
- }
-
- public void setUser(User user) {
- this.user = user;
- }
-
- public Double getValue() {
- return value;
- }
-
- public void setValue(Double value) {
- this.value = value;
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/model/Property.java b/acquisition/src/main/java/com/example/acquisition/model/Property.java
deleted file mode 100644
index d342ab4e..00000000
--- a/acquisition/src/main/java/com/example/acquisition/model/Property.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.example.acquisition.model;
-
-
-import com.example.acquisition.enums.Status;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.NoArgsConstructor;
-import lombok.experimental.SuperBuilder;
-
-import javax.persistence.*;
-
-@Entity
-@SuperBuilder
-public class Property {
-
- @Id
- private Long id;
-
- @Column(name = "price")
- private double price;
-
- @Column(name = "status")
- @Enumerated(EnumType.STRING)
- private Status status;
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public double getPrice() {
- return price;
- }
-
- public void setPrice(double price) {
- this.price = price;
- }
-
- public Status getStatus() { return status; }
-
- public void setStatus(Status status) { this.status = status; }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/model/User.java b/acquisition/src/main/java/com/example/acquisition/model/User.java
deleted file mode 100644
index f60b660f..00000000
--- a/acquisition/src/main/java/com/example/acquisition/model/User.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.example.acquisition.model;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-
-@Entity
-@Builder
-@AllArgsConstructor
-public class User {
-
- @Id
- private Long id;
-
- @Column(name = "name")
- private String name;
-
- @Column(name = "cpf")
- private String cpf;
-
- @Column(name = "renda")
- private Double renda;
-
- public Double getRenda() {
- return renda;
- }
-
- public void setRenda(Double renda) {
- this.renda = renda;
- }
-
- public User(String name) {
- this.name = name;
- }
-
- public User() {
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getCpf() {
- return cpf;
- }
-
- public void setCpf(String cpf) {
- this.cpf = cpf;
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/receiver/PropertyReceiver.java b/acquisition/src/main/java/com/example/acquisition/receiver/PropertyReceiver.java
deleted file mode 100644
index 49417abd..00000000
--- a/acquisition/src/main/java/com/example/acquisition/receiver/PropertyReceiver.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.example.acquisition.receiver;
-
-
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.messaging.handler.annotation.Payload;
-import org.springframework.stereotype.Component;
-
-import com.example.acquisition.model.Property;
-import com.example.acquisition.repository.PropertyRepository;
-
-
-
-
-@Component
-public class PropertyReceiver {
-
- private PropertyRepository propertyRepository;
-
-
- @Autowired
- public PropertyReceiver(PropertyRepository propertyRepository) {
- this.propertyRepository = propertyRepository;
- }
-
- @RabbitListener(queues = {"${crud.rabbitmq.queueProperty}"})
- public void receive(@Payload Property property) {
- propertyRepository.save(property);
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/receiver/UserReceiver.java b/acquisition/src/main/java/com/example/acquisition/receiver/UserReceiver.java
deleted file mode 100644
index 6cc5eeed..00000000
--- a/acquisition/src/main/java/com/example/acquisition/receiver/UserReceiver.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.example.acquisition.receiver;
-
-
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.messaging.handler.annotation.Payload;
-import org.springframework.stereotype.Component;
-
-import com.example.acquisition.model.User;
-import com.example.acquisition.repository.UserRepository;
-
-
-@Component
-public class UserReceiver {
-
- private UserRepository userRepository;
-
- @Autowired
- public UserReceiver(UserRepository userRepository) {
- this.userRepository = userRepository;
- }
-
- @RabbitListener(queues = {"${crud.rabbitmq.queueUser}"})
- public void receive(@Payload User user) {
- userRepository.save(user);
- }
-
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/repository/AcquisitionRepository.java b/acquisition/src/main/java/com/example/acquisition/repository/AcquisitionRepository.java
deleted file mode 100644
index 365a4924..00000000
--- a/acquisition/src/main/java/com/example/acquisition/repository/AcquisitionRepository.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.example.acquisition.repository;
-
-import lombok.NoArgsConstructor;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-import com.example.acquisition.model.Acquisition;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-
-@Repository
-public interface AcquisitionRepository extends JpaRepository {
-
- List findAllAcquisitionsByUser(User user);
-
- Acquisition findAcquisitionByProperty(Property property);
-
- Acquisition findAcquisitionById(Long id);
-
-}
\ No newline at end of file
diff --git a/acquisition/src/main/java/com/example/acquisition/repository/PropertyRepository.java b/acquisition/src/main/java/com/example/acquisition/repository/PropertyRepository.java
deleted file mode 100644
index 11c04e58..00000000
--- a/acquisition/src/main/java/com/example/acquisition/repository/PropertyRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.example.acquisition.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import com.example.acquisition.model.Property;
-
-@Repository
-public interface PropertyRepository extends JpaRepository {
- Property findPropertyById(Long id);
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/repository/UserRepository.java b/acquisition/src/main/java/com/example/acquisition/repository/UserRepository.java
deleted file mode 100644
index b570a01f..00000000
--- a/acquisition/src/main/java/com/example/acquisition/repository/UserRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.example.acquisition.repository;
-
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import com.example.acquisition.model.User;
-
-
-public interface UserRepository extends JpaRepository {
- User findUserById(Long id);
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/service/ValidaCpfServiceImp.java b/acquisition/src/main/java/com/example/acquisition/service/ValidaCpfServiceImp.java
deleted file mode 100644
index ceaec84b..00000000
--- a/acquisition/src/main/java/com/example/acquisition/service/ValidaCpfServiceImp.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.example.acquisition.service;
-
-import java.util.InputMismatchException;
-import com.example.acquisition.exceptions.ValidacaoException;
-import com.example.acquisition.interfaces.services.IValidacaoService;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-
-public class ValidaCpfServiceImp implements IValidacaoService {
-
- public static boolean isCPF(String CPF) {
- CPF = CPF.replaceAll("\\.", "").replaceAll("\\/","").replaceAll("\\-","");
-
- if (CPF.equals("00000000000") ||
- CPF.equals("11111111111") ||
- CPF.equals("22222222222") || CPF.equals("33333333333") ||
- CPF.equals("44444444444") || CPF.equals("55555555555") ||
- CPF.equals("66666666666") || CPF.equals("77777777777") ||
- CPF.equals("88888888888") || CPF.equals("99999999999") ||
- (CPF.length() != 11))
- return(false);
- char dig10, dig11;
- int sm, i, r, num, peso;
-
- try {
- sm = 0;
- peso = 10;
- for (i=0; i<9; i++) {
- num = (int)(CPF.charAt(i) - 48);
- sm = sm + (num * peso);
- peso = peso - 1;
- }
- r = 11 - (sm % 11);
- if ((r == 10) || (r == 11))
- dig10 = '0';
- else dig10 = (char)(r + 48); // converte no respectivo caractere numerico
-
- sm = 0;
- peso = 11;
- for(i=0; i<10; i++) {
- num = (int)(CPF.charAt(i) - 48);
- sm = sm + (num * peso);
- peso = peso - 1;
- }
-
- r = 11 - (sm % 11);
- if ((r == 10) || (r == 11))
- dig11 = '0';
- else dig11 = (char)(r + 48);
-
- // Verifica se os digitos calculados conferem com os digitos informados.
- if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10)))
- return(true);
- else return(false);
- } catch (InputMismatchException erro) {
- return(false);
- }
- }
-
- @Override
- public void validate(User user, Property property) throws ValidacaoException {
- if(isCPF(user.getCpf()) != true) {
- throw new ValidacaoException("Seu CPF é inválido!");
- }
- }
-
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/service/ValidaRendaServiceImp.java b/acquisition/src/main/java/com/example/acquisition/service/ValidaRendaServiceImp.java
deleted file mode 100644
index 45ced4df..00000000
--- a/acquisition/src/main/java/com/example/acquisition/service/ValidaRendaServiceImp.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.example.acquisition.service;
-
-import com.example.acquisition.exceptions.ValidacaoException;
-import com.example.acquisition.interfaces.services.IPropertyService;
-import com.example.acquisition.interfaces.services.IValidacaoService;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-
-public class ValidaRendaServiceImp implements IValidacaoService {
-
- private IPropertyService propertyService;
-
- @Override
- public void validate(User user, Property property) throws ValidacaoException { //tem mais coisas pra levar em conta, mais pra frente REVER!!!
- if(user.getRenda() * 0.3 < propertyService.calculaParcela(property)){
- throw new ValidacaoException("Sua renda mensal é insuficiente para a compra!");
- }
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/service/ValidaStatusServiceImp.java b/acquisition/src/main/java/com/example/acquisition/service/ValidaStatusServiceImp.java
deleted file mode 100644
index d7bfd221..00000000
--- a/acquisition/src/main/java/com/example/acquisition/service/ValidaStatusServiceImp.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.example.acquisition.service;
-
-import com.example.acquisition.enums.Status;
-import com.example.acquisition.exceptions.ValidacaoException;
-import com.example.acquisition.interfaces.services.IPropertyService;
-import com.example.acquisition.interfaces.services.IValidacaoService;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-
-public class ValidaStatusServiceImp implements IValidacaoService {
-
- private IPropertyService propertyService;
-
- @Override
- public void validate(User user, Property property) throws ValidacaoException {
- if(!property.getStatus().equals(Status.AVAILABLE)) {
- throw new ValidacaoException("Essa casa não esta disponível, ja foi vendida!");
- }
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/service/impl/AcquisitionServiceImp.java b/acquisition/src/main/java/com/example/acquisition/service/impl/AcquisitionServiceImp.java
deleted file mode 100644
index d4d6b710..00000000
--- a/acquisition/src/main/java/com/example/acquisition/service/impl/AcquisitionServiceImp.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.example.acquisition.service.impl;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import java.util.List;
-
-import com.example.acquisition.model.Acquisition;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-import com.example.acquisition.repository.AcquisitionRepository;
-import com.example.acquisition.interfaces.services.IAcquisitionService;
-
-@Service
-public class AcquisitionServiceImp implements IAcquisitionService{
-
- private AcquisitionRepository acquisitionRepository;
-
- @Autowired
- public AcquisitionServiceImp(AcquisitionRepository repository) {
- this.acquisitionRepository = repository;
- }
-
- @Override
- public void save(Acquisition acquisition) {
- acquisitionRepository.save(acquisition);
- }
-
- @Override
- public List findAllAcquisitionsByUser(User user) {
- return acquisitionRepository.findAllAcquisitionsByUser(user);
- }
-
- @Override
- public Acquisition findAcquisitionByProperty(Property property) {
- return acquisitionRepository.findAcquisitionByProperty(property);
- }
-
- @Override
- public Acquisition findAcquisitionById(Long id) {
- return acquisitionRepository.findAcquisitionById(id);
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/service/impl/PropertyServiceImp.java b/acquisition/src/main/java/com/example/acquisition/service/impl/PropertyServiceImp.java
deleted file mode 100644
index f62468c5..00000000
--- a/acquisition/src/main/java/com/example/acquisition/service/impl/PropertyServiceImp.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.example.acquisition.service.impl;
-
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.example.acquisition.model.Property;
-import com.example.acquisition.repository.PropertyRepository;
-import com.example.acquisition.interfaces.services.IPropertyService;
-
-@Service
-public class PropertyServiceImp implements IPropertyService{
-
- private PropertyRepository propertyRepository;
- private final double PERCENTUAL = 0.3;
-
- @Autowired
- public PropertyServiceImp(PropertyRepository repository) {
- this.propertyRepository = repository;
- }
-
- @Override
- public Property findPropertyById(Long id) {
- return propertyRepository.findPropertyById(id);
- }
-
- @Override
- public Double calculaParcela(Property property){
- double parcela = property.getPrice() * PERCENTUAL;
- return parcela;
- }
-
- @Override
- public void updateProperty(Property property) {
- propertyRepository.save(property);
- }
-}
diff --git a/acquisition/src/main/java/com/example/acquisition/service/impl/UserServiceImp.java b/acquisition/src/main/java/com/example/acquisition/service/impl/UserServiceImp.java
deleted file mode 100644
index 5873c7da..00000000
--- a/acquisition/src/main/java/com/example/acquisition/service/impl/UserServiceImp.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.example.acquisition.service.impl;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import com.example.acquisition.exceptions.ValidacaoException;
-import com.example.acquisition.service.ValidaCpfServiceImp;
-import com.example.acquisition.service.ValidaRendaServiceImp;
-import com.example.acquisition.service.ValidaStatusServiceImp;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.stereotype.Service;
-import com.example.acquisition.model.Property;
-import com.example.acquisition.model.User;
-import com.example.acquisition.repository.UserRepository;
-import com.example.acquisition.interfaces.services.IUserService;
-import com.example.acquisition.interfaces.services.IValidacaoService;
-
-@Service
-public class UserServiceImp implements IUserService{
- List validations = Arrays.asList(
- new ValidaCpfServiceImp(),
- new ValidaStatusServiceImp()
- );
- @Autowired
- private UserRepository userRepository;
-
- @Autowired
- public UserServiceImp(UserRepository repository) {
- this.userRepository = repository;
- }
-
- @Override
- public User findUserById(Long id) {
- return userRepository.findUserById(id);
- }
-
- public void validateUser(User user, Property property) throws ValidacaoException {
- validations.forEach(element->element.validate(user, property));
- }
-
-}
diff --git a/acquisition/src/main/resources/application.yml b/acquisition/src/main/resources/application.yml
deleted file mode 100644
index 31919347..00000000
--- a/acquisition/src/main/resources/application.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-server:
- port: 8084
- servlet:
- context-path: /acquisitionService
-
-spring:
- application:
- name: acquisitionService
- jpa:
- show-sql: false
- hibernate:
- ddl-auto: update
- properties:
- hibernate:
- dialect: org.hibernate.dialect.MySQL8Dialect
- jmx:
- enabled: false
- datasource:
- url: jdbc:mysql://localhost:3306/aquisition?useTimezone=true&serverTimezone=UTC
- username: root
- password: admin
-
- rabbitmq:
- host: localhost
- port: 5672
- username: guest
- password: guest
-
-crud:
- rabbitmq:
- exchange: crud.exchange
- queueProperty: crud.acquisition.property
- queueUser: crud.acquisition.user
-
-eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:8087/discovery/eureka
-
diff --git a/acquisition/src/test/java/com/example/acquisition/repository/AcquisitionRepositoryTest.java b/acquisition/src/test/java/com/example/acquisition/repository/AcquisitionRepositoryTest.java
deleted file mode 100644
index 215df714..00000000
--- a/acquisition/src/test/java/com/example/acquisition/repository/AcquisitionRepositoryTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.example.acquisition.repository;
-
-import com.example.acquisition.model.Acquisition;
-import com.example.acquisition.util.AcquisitionCreator;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.Optional;
-
-class AcquisitionRepositoryTest {
-
- @Autowired
- private AcquisitionRepository acquisitionRepository;
-
- @Test
- void saveAcquisition(){
- Acquisition acquisitionToBeSaved = AcquisitionCreator.createAcquisitionToSaved();
- Acquisition acquisitionSaved = acquisitionRepository.save(acquisitionToBeSaved);
-
- Assertions.assertThat(acquisitionSaved).isNotNull();
- Assertions.assertThat(acquisitionSaved.getId()).isNotNull();
-
- }
-
- @Test
- @DisplayName("Save updates acquisition when Successful")
- void save_AcquisitionUser_WhenSuccessful(){
- Acquisition acquisitionToBeSaved = AcquisitionCreator.createAcquisitionToSaved();
- Acquisition acquisitionSaved = this.acquisitionRepository.save(acquisitionToBeSaved);
-
- Acquisition acquisitionUpdated = this.acquisitionRepository.save(acquisitionSaved);
- Assertions.assertThat(acquisitionSaved).isNotNull();
- Assertions.assertThat(acquisitionSaved.getId()).isNotNull();
- Assertions.assertThat(acquisitionUpdated.getId()).isEqualTo(acquisitionToBeSaved.getId());
- }
-
- @Test
- @DisplayName("Deletes removes acquisition when Successful")
- void delete_RemovesAcquisition_WhenSuccessful(){
- Acquisition acquisitionToBeSaved = AcquisitionCreator.createAcquisitionToSaved();
- Acquisition acquisitionSaved = this.acquisitionRepository.save(acquisitionToBeSaved);
-
- this.acquisitionRepository.delete(acquisitionSaved);
- Optional userOptional = this.acquisitionRepository.findById(acquisitionSaved.getId());
- Assertions.assertThat(userOptional).isEmpty();
-
- }
-
- @Test
- @DisplayName("Find by acquisition when Successful")
- void find_ByAcquisition_WhenSuccessful(){
- Acquisition acquisitionToBeSaved = AcquisitionCreator.createAcquisitionToSaved();
- Acquisition acquisitionSaved = this.acquisitionRepository.save(acquisitionToBeSaved);
- Acquisition acquisitionFind = this.acquisitionRepository.findAcquisitionById(acquisitionSaved.getId());
-
- Assertions.assertThat(acquisitionFind).isNotNull();
- Assertions.assertThat(acquisitionFind.getId()).isNotNull();
-
- }
-
-}
\ No newline at end of file
diff --git a/acquisition/src/test/java/com/example/acquisition/service/impl/AcquisitionServiceImpTest.java b/acquisition/src/test/java/com/example/acquisition/service/impl/AcquisitionServiceImpTest.java
deleted file mode 100644
index e0bfdff6..00000000
--- a/acquisition/src/test/java/com/example/acquisition/service/impl/AcquisitionServiceImpTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.example.acquisition.service.impl;
-
-import com.example.acquisition.model.Acquisition;
-import com.example.acquisition.repository.AcquisitionRepository;
-import com.example.acquisition.repository.UserRepository;
-import com.example.acquisition.util.AcquisitionCreator;
-import com.example.acquisition.util.AcquisitionPut;
-import com.netflix.discovery.converters.Auto;
-import lombok.extern.slf4j.Slf4j;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.ArgumentMatchers;
-import org.mockito.BDDMockito;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-import java.util.Arrays;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-@ExtendWith(SpringExtension.class)
-@Slf4j
-class AcquisitionServiceImpTest {
-
- @InjectMocks
- private AcquisitionServiceImp acquisitionServiceImp;
- @Mock
- private AcquisitionRepository acquisitionRepository;
-
- @BeforeEach
- void setUp(){
- BDDMockito.when(acquisitionRepository.save(ArgumentMatchers.any(Acquisition.class)))
- .thenReturn(AcquisitionCreator.createValidUpdateAcquisition());
-
- BDDMockito.doNothing().when(acquisitionRepository).delete(ArgumentMatchers.any(Acquisition.class));
- }
-
-
- @Test
- @DisplayName("Save acquisition when successful")
- void save() {
-
- Assertions.assertThatCode(() -> acquisitionServiceImp.save(AcquisitionPut.createAcquisitionPutRequestBody()))
- .doesNotThrowAnyException();
- }
-
- @Test
- void findAcquisitionByProperty() {
- acquisitionRepository.save(AcquisitionCreator.createValidAcquisition());
- Long expectedId = AcquisitionCreator.createValidAcquisition().getId();
-
- Acquisition acquisition = acquisitionServiceImp.findAcquisitionById(AcquisitionCreator.createValidAcquisition().getId());
- Assertions.assertThat(acquisition)
- .isNotNull();
- Assertions.assertThat(acquisition.getId()).isNotNull().isEqualTo(expectedId);
- }
-}
\ No newline at end of file
diff --git a/acquisition/src/test/java/com/example/acquisition/util/AcquisitionCreator.java b/acquisition/src/test/java/com/example/acquisition/util/AcquisitionCreator.java
deleted file mode 100644
index 5834c001..00000000
--- a/acquisition/src/test/java/com/example/acquisition/util/AcquisitionCreator.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.example.acquisition.util;
-
-import com.example.acquisition.model.Acquisition;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class AcquisitionCreator {
-
- public static Acquisition createAcquisitionToSaved() {
- return Acquisition.builder()
- .value(1123.0)
- .user(null)
- .property(PropertyCreator.createPropertyToSaved())
- .build();
- }
-
- public static Acquisition createValidAcquisition() {
- return Acquisition.builder()
- .value(1111.0)
- .user(UserCreator.createUserToSaved())
- .property(PropertyCreator.createPropertyToTest1())
- .build();
- }
-
- public static Acquisition createValidUpdateAcquisition() {
- return Acquisition.builder()
- .value(1121.0)
- .user(null)
- .property(null)
- .build();
- }
-
-}
diff --git a/acquisition/src/test/java/com/example/acquisition/util/AcquisitionPut.java b/acquisition/src/test/java/com/example/acquisition/util/AcquisitionPut.java
deleted file mode 100644
index 6adeb32e..00000000
--- a/acquisition/src/test/java/com/example/acquisition/util/AcquisitionPut.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.example.acquisition.util;
-
-import com.example.acquisition.model.Acquisition;
-
-public class AcquisitionPut {
- public static Acquisition createAcquisitionPutRequestBody() {
- return Acquisition.builder()
- .id(AcquisitionCreator.createValidUpdateAcquisition().getId())
- .property(AcquisitionCreator.createValidUpdateAcquisition().getProperty())
- .build();
- }
-}
diff --git a/acquisition/src/test/java/com/example/acquisition/util/PropertyCreator.java b/acquisition/src/test/java/com/example/acquisition/util/PropertyCreator.java
deleted file mode 100644
index 147c029c..00000000
--- a/acquisition/src/test/java/com/example/acquisition/util/PropertyCreator.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.example.acquisition.util;
-
-import com.example.acquisition.model.Property;
-
-public class PropertyCreator {
- public static Property createPropertyToSaved() {
- return Property.builder()
- .id(133L)
- .price(133.0)
- .build();
- }
-
- public static Property createPropertyToTest1() {
- return Property.builder()
- .id(134L)
- .price(133.0)
- .build();
- }
-
- public static Property createPropertyToTest2() {
- return Property.builder()
- .id(135L)
- .price(133.0)
- .build();
- }
-}
diff --git a/acquisition/src/test/java/com/example/acquisition/util/UserCreator.java b/acquisition/src/test/java/com/example/acquisition/util/UserCreator.java
deleted file mode 100644
index 1171bf9a..00000000
--- a/acquisition/src/test/java/com/example/acquisition/util/UserCreator.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.example.acquisition.util;
-
-import com.example.acquisition.model.User;
-
-public class UserCreator {
- public static User createUserToSaved() {
- return User.builder()
- .name("João")
- .renda(12321.0)
- .cpf(String.valueOf(12312414))
- .id(13L)
- .build();
- }
-}
diff --git a/auth/.gitignore b/auth/.gitignore
deleted file mode 100644
index babf039f..00000000
--- a/auth/.gitignore
+++ /dev/null
@@ -1,35 +0,0 @@
-HELP.md
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-mvnw.cmd
-mvnw
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
diff --git a/auth/pom.xml b/auth/pom.xml
deleted file mode 100644
index 2021de13..00000000
--- a/auth/pom.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
- 4.0.0
-
- com.example
- auth
- 0.0.1-SNAPSHOT
- Microserviço de Autenticação
-
- auth
-
-
- 1.8
- com.example.auth.AuthApplication
- 2020.0.1
-
-
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.4.2
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
-
- org.springframework.boot
- spring-boot-devtools
- true
-
-
-
- org.springframework.security
- spring-security-test
- test
-
-
-
- mysql
- mysql-connector-java
-
-
-
- io.jsonwebtoken
- jjwt
- 0.9.1
-
-
-
- io.springfox
- springfox-swagger2
- 2.9.2
-
-
-
- io.springfox
- springfox-swagger-ui
- 2.9.2
-
-
-
- org.modelmapper
- modelmapper
- 2.3.5
-
-
-
- org.springframework.boot
- spring-boot-starter-amqp
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
-
-
-
-
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
diff --git a/auth/src/main/java/com/example/auth/AuthApplication.java b/auth/src/main/java/com/example/auth/AuthApplication.java
deleted file mode 100644
index 2eb56030..00000000
--- a/auth/src/main/java/com/example/auth/AuthApplication.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.example.auth;
-
-import org.modelmapper.ModelMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.context.annotation.Bean;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import com.example.auth.model.Role;
-import com.example.auth.model.User;
-import com.example.auth.service.UserService;
-
-@SpringBootApplication
-@EnableDiscoveryClient
-public class AuthApplication implements CommandLineRunner {
-
- @Autowired
- UserService userService;
-
- public static void main(String[] args) {
- SpringApplication.run(AuthApplication.class, args);
- }
-
- @Bean
- public ModelMapper modelMapper() {
- return new ModelMapper();
- }
-
- @Override
- public void run(String... params) throws Exception {
- User admin = new User();
- admin.setUsername("admin");
- admin.setPassword("admin");
- admin.setEmail("admin@email.com");
- admin.setRoles(new ArrayList(Arrays.asList(Role.ROLE_ADMIN)));
-
- userService.signup(admin);
-
- User client = new User();
- client.setUsername("client");
- client.setPassword("client");
- client.setEmail("client@email.com");
- client.setRoles(new ArrayList(Arrays.asList(Role.ROLE_CLIENT)));
-
- userService.signup(client);
- }
-
-}
diff --git a/auth/src/main/java/com/example/auth/configuration/AppConf.java b/auth/src/main/java/com/example/auth/configuration/AppConf.java
deleted file mode 100644
index 02c2b492..00000000
--- a/auth/src/main/java/com/example/auth/configuration/AppConf.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.example.auth.configuration;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@Configuration
-public class AppConf implements WebMvcConfigurer {
-
- @Override
- public void addCorsMappings(CorsRegistry registry) {
- registry.addMapping("/**")
- .allowedOrigins("http://localhost:3000")
- .allowedMethods("PUT", "GET", "POST", "DELETE");
-
- }
-}
diff --git a/auth/src/main/java/com/example/auth/configuration/MessageConfig.java b/auth/src/main/java/com/example/auth/configuration/MessageConfig.java
deleted file mode 100644
index f7c9fcab..00000000
--- a/auth/src/main/java/com/example/auth/configuration/MessageConfig.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.example.auth.configuration;
-
-import org.springframework.amqp.core.Exchange;
-import org.springframework.amqp.core.ExchangeBuilder;
-import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
-import org.springframework.amqp.support.converter.MessageConverter;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class MessageConfig {
-
- @Value("${auth.rabbitmq.exchange}")
- String exchange;
-
- @Bean
- public Exchange declareExchange() {
- return ExchangeBuilder.directExchange(exchange).durable(true).build();
- }
-
- @Bean
- public MessageConverter jsonMessageConverter() {
- return new Jackson2JsonMessageConverter();
- }
-}
diff --git a/auth/src/main/java/com/example/auth/configuration/SwaggerConfig.java b/auth/src/main/java/com/example/auth/configuration/SwaggerConfig.java
deleted file mode 100644
index 44f4b06b..00000000
--- a/auth/src/main/java/com/example/auth/configuration/SwaggerConfig.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.example.auth.configuration;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import com.google.common.base.Predicates;
-
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.ApiKey;
-import springfox.documentation.service.AuthorizationScope;
-import springfox.documentation.service.Contact;
-import springfox.documentation.service.SecurityReference;
-import springfox.documentation.service.Tag;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContext;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class SwaggerConfig {
-
- @Bean
- public Docket api() {
- return new Docket(DocumentationType.SWAGGER_2)
- .select()
- .apis(RequestHandlerSelectors.any())
- .paths(Predicates.not(PathSelectors.regex("/error")))
- .build()
- .apiInfo(metadata())
- .useDefaultResponseMessages(false)
- .securitySchemes(Collections.singletonList(apiKey()))
- .securityContexts(Collections.singletonList(securityContext()))
- .tags(new Tag("users", "Operações sobre usuários"))
- .genericModelSubstitutes(Optional.class);
-
- }
-
- private ApiInfo metadata() {
- return new ApiInfoBuilder()
- .title("API de autenticação com JSON Web Token")
- .description("Esse é um exemplo de serviço de autenticação JWT. Você pode aprender mais sobre JWT em [https://jwt.io/](https://jwt.io/). Para este exemplo, você pode usar os usuários `admin` ou` client` (senha: admin e client respectivamente) para testar os filtros de autorização. Depois de ter logado com sucesso e obtido o token, você deve clicar no botão superior direito `Authorize` e começá-lo com o prefixo \" Bearer \".")
- .version("1.0.0")
- .license("MIT License").licenseUrl("http://opensource.org/licenses/MIT")
- .contact(new Contact("Lucas Alexandre Fell", "https://github.com/fell-lucas", "lucasafell@gmail.com"))
- .build();
- }
-
- private ApiKey apiKey() {
- return new ApiKey("Authorization", "Authorization", "header");
- }
-
- private SecurityContext securityContext() {
- return SecurityContext.builder()
- .securityReferences(defaultAuth())
- .forPaths(PathSelectors.any())
- .build();
- }
-
- private List defaultAuth() {
- AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
- AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
- authorizationScopes[0] = authorizationScope;
- return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));
- }
-
-}
diff --git a/auth/src/main/java/com/example/auth/controller/UserController.java b/auth/src/main/java/com/example/auth/controller/UserController.java
deleted file mode 100644
index cbf1e99f..00000000
--- a/auth/src/main/java/com/example/auth/controller/UserController.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.example.auth.controller;
-
-import javax.servlet.http.HttpServletRequest;
-
-import com.example.auth.dto.CompleteUserDTO;
-import com.example.auth.dto.UserDTO;
-import com.example.auth.exception.CustomHttpException;
-import com.example.auth.model.User;
-import com.example.auth.sender.SignupSender;
-import com.example.auth.service.UserService;
-
-import org.modelmapper.ModelMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-import io.swagger.annotations.Authorization;
-
-@RestController
-@RequestMapping("/users")
-@Api(tags = "users")
-public class UserController {
-
- @Autowired
- private UserService userService;
-
- @Autowired
- private SignupSender signupSender;
-
- @Autowired
- private ModelMapper modelMapper;
-
- @PostMapping("/signin")
- @ApiOperation(value = "${UserController.signin}")
- @ApiResponses(value = {
- @ApiResponse(code = 400, message = "Algo deu errado"),
- @ApiResponse(code = 422, message = "Nome/senha inválidos")
- })
- public ResponseEntity login(
- @ApiParam("Email") @RequestParam String email,
- @ApiParam("Senha") @RequestParam String password) {
- try {
- String token = userService.signin(email, password);
- return new ResponseEntity<>(token, HttpStatus.OK);
- } catch (CustomHttpException e) {
- return new ResponseEntity<>(e.getMessage(), e.getHttpStatus());
- }
- }
-
- @PostMapping("/signup")
- @ApiOperation(value = "${UserController.signup}")
- @ApiResponses(value = {
- @ApiResponse(code = 400, message = "Algo deu errado"),
- @ApiResponse(code = 422, message = "Email em uso"),
- })
- public ResponseEntity signup(@ApiParam("Usuário cadastrando") @RequestBody CompleteUserDTO user) {
- // cria um usuario basico para salvar aqui no microsserviço de autenticação
- // (usuario, email e senha)
- // o usuario real vai para a fila do rabbit para ser consumido pelo CRUD
- User basicUser = new User();
- basicUser.setUsername(user.getUsername());
- basicUser.setEmail(user.getEmail());
- basicUser.setPassword(user.getPassword());
- basicUser.setRoles(user.getRoles());
- try {
- String token = userService.signup(basicUser);
- signupSender.sendMessage(user);
- return new ResponseEntity<>(token, HttpStatus.OK);
- } catch (CustomHttpException e) {
- return new ResponseEntity<>(e.getMessage(), e.getHttpStatus());
- }
- }
-
- @DeleteMapping(value = "/{email}")
- @PreAuthorize("hasRole('ROLE_ADMIN')")
- @ApiOperation(value = "${UserController.delete}", authorizations = {@Authorization(value = "apiKey")})
- @ApiResponses(value = {
- @ApiResponse(code = 400, message = "Algo deu errado"),
- @ApiResponse(code = 403, message = "Acesso negado"),
- @ApiResponse(code = 404, message = "O usuário não existe"),
- @ApiResponse(code = 500, message = "Token JWT expirado ou inválido")
- })
- public String delete(
- @ApiParam("Email") @PathVariable String email) {
- userService.delete(email);
- return email;
- }
-
- @GetMapping(value = "/{email}")
- @PreAuthorize("hasRole('ROLE_ADMIN')")
- @ApiOperation(value = "${UserController.search}", response = UserDTO.class, authorizations = {@Authorization(value = "apiKey")})
- @ApiResponses(value = {
- @ApiResponse(code = 400, message = "Algo deu errado"),
- @ApiResponse(code = 403, message = "Acesso negado"),
- @ApiResponse(code = 404, message = "O usuário não existe"),
- @ApiResponse(code = 500, message = "Token JWT expirado ou inválido")
- })
- public UserDTO search(
- @ApiParam("Email") @PathVariable String email) {
- return modelMapper.map(userService.search(email), UserDTO.class);
- }
-
- @GetMapping(value = "/me")
- @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_CLIENT')")
- @ApiOperation(value = "${UserController.me}", response = UserDTO.class, authorizations = {@Authorization(value = "apiKey")})
- @ApiResponses(value = {
- @ApiResponse(code = 400, message = "Algo deu errado"),
- @ApiResponse(code = 403, message = "Acesso negado"),
- @ApiResponse(code = 500, message = "Token JWT expirado ou inválido")
- })
- public UserDTO whoami(HttpServletRequest req) {
- return modelMapper.map(userService.whoami(req), UserDTO.class);
- }
-
- @GetMapping("/refresh")
- @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_CLIENT')")
- @ApiOperation(value = "${UserController.refresh}", response = UserDTO.class, authorizations = {@Authorization(value = "apiKey")})
- @ApiResponses(value = {
- @ApiResponse(code = 400, message = "Algo deu errado"),
- @ApiResponse(code = 403, message = "Acesso negado"),
- })
- public String refresh(HttpServletRequest req) {
- return userService.refresh(req.getRemoteUser());
- }
-}
diff --git a/auth/src/main/java/com/example/auth/dto/CompleteUserDTO.java b/auth/src/main/java/com/example/auth/dto/CompleteUserDTO.java
deleted file mode 100644
index 05c66d80..00000000
--- a/auth/src/main/java/com/example/auth/dto/CompleteUserDTO.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.example.auth.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.List;
-
-import com.example.auth.model.Role;
-
-public class CompleteUserDTO {
-
- @ApiModelProperty(position = 0)
- private String username;
- @ApiModelProperty(position = 1)
- private String email;
- @ApiModelProperty(position = 2)
- private String password;
- @ApiModelProperty(position = 3)
- private String cpf;
- @ApiModelProperty(position = 4)
- private String phone;
- @ApiModelProperty(position = 5)
- private String address;
- @ApiModelProperty(position = 6)
- List roles;
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public String getCpf() {
- return cpf;
- }
-
- public void setCpf(String cpf) {
- this.cpf = cpf;
- }
-
- public String getPhone() {
- return phone;
- }
-
- public void setPhone(String phone) {
- this.phone = phone;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- public List getRoles() {
- return roles;
- }
-
- public void setRoles(List roles) {
- this.roles = roles;
- }
-
-}
diff --git a/auth/src/main/java/com/example/auth/dto/UserDTO.java b/auth/src/main/java/com/example/auth/dto/UserDTO.java
deleted file mode 100644
index 5b04664c..00000000
--- a/auth/src/main/java/com/example/auth/dto/UserDTO.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.example.auth.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.List;
-
-import com.example.auth.model.Role;
-
-public class UserDTO {
-
- @ApiModelProperty(position = 0)
- private String username;
- @ApiModelProperty(position = 1)
- private String email;
- @ApiModelProperty(position = 2)
- private String password;
- @ApiModelProperty(position = 3)
- List roles;
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public List getRoles() {
- return roles;
- }
-
- public void setRoles(List roles) {
- this.roles = roles;
- }
-}
diff --git a/auth/src/main/java/com/example/auth/exception/CustomHttpException.java b/auth/src/main/java/com/example/auth/exception/CustomHttpException.java
deleted file mode 100644
index eda4e22f..00000000
--- a/auth/src/main/java/com/example/auth/exception/CustomHttpException.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.example.auth.exception;
-
-import org.springframework.http.HttpStatus;
-
-public class CustomHttpException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- private final String message;
- private final HttpStatus httpStatus;
-
- public CustomHttpException(String message, HttpStatus httpStatus) {
- this.message = message;
- this.httpStatus = httpStatus;
- }
-
- @Override
- public String getMessage() {
- return message;
- }
-
- public HttpStatus getHttpStatus() {
- return httpStatus;
- }
-}
diff --git a/auth/src/main/java/com/example/auth/model/Role.java b/auth/src/main/java/com/example/auth/model/Role.java
deleted file mode 100644
index e9f3781f..00000000
--- a/auth/src/main/java/com/example/auth/model/Role.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.example.auth.model;
-
-import org.springframework.security.core.GrantedAuthority;
-
-public enum Role implements GrantedAuthority {
- ROLE_ADMIN, ROLE_CLIENT;
-
- public String getAuthority() {
- return name();
- }
-
-}
diff --git a/auth/src/main/java/com/example/auth/model/User.java b/auth/src/main/java/com/example/auth/model/User.java
deleted file mode 100644
index 17c05862..00000000
--- a/auth/src/main/java/com/example/auth/model/User.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.example.auth.model;
-
-import java.util.List;
-
-import javax.persistence.Column;
-import javax.persistence.ElementCollection;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.validation.constraints.Size;
-
-
-@Entity
-public class User {
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Integer id;
-
- @Size(min = 2, max = 255, message = "Tamanho mínimo do nome: 2 caracteres")
- @Column(nullable = false)
- private String username;
-
- @Column(unique = true, nullable = false)
- private String email;
-
- @Size(min = 8, message = "Tamanho mínimo da senha: 8 caracteres")
- private String password;
-
- @ElementCollection(fetch = FetchType.EAGER)
- List roles;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public List getRoles(){
- return roles;
- }
-
- public void setRoles(List roles) {
- this.roles = roles;
- }
-
-}
diff --git a/auth/src/main/java/com/example/auth/repository/UserRepository.java b/auth/src/main/java/com/example/auth/repository/UserRepository.java
deleted file mode 100644
index c86e4b52..00000000
--- a/auth/src/main/java/com/example/auth/repository/UserRepository.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.example.auth.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import javax.transaction.Transactional;
-
-import com.example.auth.model.User;
-
-public interface UserRepository extends JpaRepository {
-
- boolean existsByEmail(String email);
-
- User findByEmail(String username);
-
- @Transactional
- void deleteByEmail(String username);
-}
diff --git a/auth/src/main/java/com/example/auth/security/JwtTokenFilter.java b/auth/src/main/java/com/example/auth/security/JwtTokenFilter.java
deleted file mode 100644
index bd819573..00000000
--- a/auth/src/main/java/com/example/auth/security/JwtTokenFilter.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.example.auth.security;
-
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.example.auth.exception.CustomHttpException;
-
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.web.filter.OncePerRequestFilter;
-
-public class JwtTokenFilter extends OncePerRequestFilter {
-
- private JwtTokenProvider jwtTokenProvider;
-
- public JwtTokenFilter(JwtTokenProvider jwtTokenProvider) {
- this.jwtTokenProvider = jwtTokenProvider;
- }
-
- @Override
- protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
- String token = jwtTokenProvider.resolveToken(request);
- try {
- if (token != null && jwtTokenProvider.validateToken(token)) {
- Authentication auth = jwtTokenProvider.getAuthentication(token);
- SecurityContextHolder.getContext().setAuthentication(auth);
- }
- } catch (CustomHttpException ex) {
- SecurityContextHolder.clearContext();
- response.sendError(ex.getHttpStatus().value(), ex.getMessage());
- return;
- }
-
- filterChain.doFilter(request, response);
- }
-}
diff --git a/auth/src/main/java/com/example/auth/security/JwtTokenFilterConfigurer.java b/auth/src/main/java/com/example/auth/security/JwtTokenFilterConfigurer.java
deleted file mode 100644
index d9d0e97f..00000000
--- a/auth/src/main/java/com/example/auth/security/JwtTokenFilterConfigurer.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.example.auth.security;
-
-import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.web.DefaultSecurityFilterChain;
-import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-
-public class JwtTokenFilterConfigurer extends SecurityConfigurerAdapter {
-
- private JwtTokenProvider jwtTokenProvider;
-
- public JwtTokenFilterConfigurer(JwtTokenProvider jwtTokenProvider) {
- this.jwtTokenProvider = jwtTokenProvider;
- }
-
- @Override
- public void configure(HttpSecurity http) throws Exception {
- JwtTokenFilter customFilter = new JwtTokenFilter(jwtTokenProvider);
- http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
- }
-}
diff --git a/auth/src/main/java/com/example/auth/security/JwtTokenProvider.java b/auth/src/main/java/com/example/auth/security/JwtTokenProvider.java
deleted file mode 100644
index 68492be8..00000000
--- a/auth/src/main/java/com/example/auth/security/JwtTokenProvider.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.example.auth.security;
-
-import java.util.Base64;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import javax.annotation.PostConstruct;
-import javax.servlet.http.HttpServletRequest;
-
-import com.example.auth.exception.CustomHttpException;
-import com.example.auth.model.Role;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.stereotype.Component;
-
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.JwtException;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.SignatureAlgorithm;
-
-@Component
-public class JwtTokenProvider {
-
- @Value("${security.jwt.token.secret_key:key_microservices}")
- private String secretKey;
-
- @Value("${security.jwt.token.expire_time:3600000}")
- private long validityInMilliseconds = 3600000; // 1 hora
-
- @Autowired
- private MyUserDetails myUserDetails;
-
- @PostConstruct
- protected void init() {
- secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
- }
-
- public String createToken(String username, List roles) {
-
- Claims claims = Jwts.claims().setSubject(username);
- claims.put("auth", roles.stream()
- .map(s -> new SimpleGrantedAuthority(s.getAuthority()))
- .filter(Objects::nonNull)
- .collect(Collectors.toList()));
-
- Date now = new Date();
- Date validity = new Date(now.getTime() + validityInMilliseconds);
-
- return Jwts.builder()
- .setClaims(claims)
- .setIssuedAt(now)
- .setExpiration(validity)
- .signWith(SignatureAlgorithm.HS256, secretKey)
- .compact();
- }
-
- public Authentication getAuthentication(String token) {
- UserDetails userDetails = myUserDetails.loadUserByUsername(getUsername(token));
-
- return new UsernamePasswordAuthenticationToken(userDetails, "", userDetails.getAuthorities());
- }
-
- public String getUsername(String token) {
- return Jwts.parser()
- .setSigningKey(secretKey)
- .parseClaimsJws(token)
- .getBody()
- .getSubject();
- }
-
- public String resolveToken(HttpServletRequest req) {
- String bearerToken = req.getHeader("Authorization");
- if(bearerToken != null && bearerToken.startsWith("Bearer ")) {
- return bearerToken.substring(7);
- }
- return null;
- }
-
- public boolean validateToken(String token) {
- try {
- Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);
- return true;
- } catch (JwtException | IllegalArgumentException e) {
- throw new CustomHttpException("Token JWT inválido ou expirado", HttpStatus.INTERNAL_SERVER_ERROR);
- }
- }
-}
diff --git a/auth/src/main/java/com/example/auth/security/MyUserDetails.java b/auth/src/main/java/com/example/auth/security/MyUserDetails.java
deleted file mode 100644
index 5969e599..00000000
--- a/auth/src/main/java/com/example/auth/security/MyUserDetails.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.example.auth.security;
-
-import com.example.auth.model.User;
-import com.example.auth.repository.UserRepository;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.stereotype.Service;
-
-@Service
-public class MyUserDetails implements UserDetailsService {
-
- @Autowired
- private UserRepository userRepository;
-
- @Override
- public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
- final User user = userRepository.findByEmail(email);
-
- if(user == null) {
- throw new UsernameNotFoundException("Usuário '" + email + "' não encontrado");
- }
-
- return org.springframework.security.core.userdetails.User
- .withUsername(email)
- .password(user.getPassword())
- .authorities(user.getRoles())
- .accountExpired(false)
- .accountLocked(false)
- .credentialsExpired(false)
- .disabled(false)
- .build();
- }
-
-}
diff --git a/auth/src/main/java/com/example/auth/security/WebSecurityConfig.java b/auth/src/main/java/com/example/auth/security/WebSecurityConfig.java
deleted file mode 100644
index 91dcbf9f..00000000
--- a/auth/src/main/java/com/example/auth/security/WebSecurityConfig.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.example.auth.security;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.builders.WebSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.config.http.SessionCreationPolicy;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-@Configuration
-@EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true)
-public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
-
- @Autowired
- private JwtTokenProvider jwtTokenProvider;
-
- @Override
- protected void configure(HttpSecurity http) throws Exception {
-
- // Disable CSRF (cross site request forgery) not applicable to JWT
- http.csrf().disable();
-
- // No session will be created or used by spring security
- http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
-
- // Entry points
- http.authorizeRequests().antMatchers("/users/signin").permitAll().antMatchers("/users/signup").permitAll()
- .anyRequest().authenticated();
-
- // If a user try to access a resource without having enough permissions
- http.exceptionHandling().accessDeniedPage("/login");
-
- http.formLogin().usernameParameter("email").permitAll().and().logout().permitAll();
-
- // Apply JWT
- http.apply(new JwtTokenFilterConfigurer(jwtTokenProvider));
- }
-
- @Override
- public void configure(WebSecurity web) throws Exception {
- // Allow swagger to be accessed without authentication
- web.ignoring().antMatchers("/v2/api-docs").antMatchers("/swagger-resources/**").antMatchers("/swagger-ui.html")
- .antMatchers("/configuration/**").antMatchers("/webjars/**").antMatchers("/public");
- }
-
- @Bean
- public PasswordEncoder passwordEncoder() {
- return new BCryptPasswordEncoder(12);
- }
-
- @Override
- @Bean
- public AuthenticationManager authenticationManagerBean() throws Exception {
- return super.authenticationManagerBean();
- }
-}
diff --git a/auth/src/main/java/com/example/auth/sender/SignupSender.java b/auth/src/main/java/com/example/auth/sender/SignupSender.java
deleted file mode 100644
index 23001680..00000000
--- a/auth/src/main/java/com/example/auth/sender/SignupSender.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.example.auth.sender;
-
-import com.example.auth.dto.CompleteUserDTO;
-
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-@Component
-public class SignupSender {
-
- @Value("${auth.rabbitmq.exchange}")
- String exchange;
-
- @Value("${auth.rabbitmq.routingKeySignup}")
- String routingKey;
-
- public RabbitTemplate rabbitTemplate;
-
- @Autowired
- public SignupSender(RabbitTemplate rabbitTemplate) {
- this.rabbitTemplate = rabbitTemplate;
- }
-
- public void sendMessage(CompleteUserDTO user) {
- rabbitTemplate.convertAndSend(exchange, routingKey, user);
- }
-}
diff --git a/auth/src/main/java/com/example/auth/service/UserService.java b/auth/src/main/java/com/example/auth/service/UserService.java
deleted file mode 100644
index 2716623a..00000000
--- a/auth/src/main/java/com/example/auth/service/UserService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.example.auth.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Service;
-
-import javax.servlet.http.HttpServletRequest;
-
-import com.example.auth.exception.CustomHttpException;
-import com.example.auth.model.User;
-import com.example.auth.repository.UserRepository;
-import com.example.auth.security.JwtTokenProvider;
-
-@Service
-public class UserService {
-
- @Autowired
- private UserRepository userRepository;
-
- @Autowired
- private PasswordEncoder passwordEncoder;
-
- @Autowired
- private JwtTokenProvider jwtTokenProvider;
-
- @Autowired
- private AuthenticationManager authenticationManager;
-
- public String signin(String email, String password) {
- try {
- authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(email, password));
- return jwtTokenProvider.createToken(email, userRepository.findByEmail(email).getRoles());
- } catch(AuthenticationException e) {
- throw new CustomHttpException("Combinação de email/senha inválida.", HttpStatus.UNPROCESSABLE_ENTITY);
- }
- }
-
- public String signup(User user) {
- if (!userRepository.existsByEmail(user.getEmail())) {
- user.setPassword(passwordEncoder.encode(user.getPassword()));
- userRepository.save(user);
- return jwtTokenProvider.createToken(user.getEmail(), user.getRoles());
- } else {
- throw new CustomHttpException("Email já cadastrado.", HttpStatus.UNPROCESSABLE_ENTITY);
- }
- }
-
- public void delete(String username) {
- userRepository.deleteByEmail(username);
- }
-
- public User search(String username) {
- User user = userRepository.findByEmail(username);
- if(user == null) {
- throw new CustomHttpException("O usuário não existe.", HttpStatus.NOT_FOUND);
- }
- return user;
- }
-
- public User whoami(HttpServletRequest req) {
- return userRepository.findByEmail(jwtTokenProvider.getUsername(jwtTokenProvider.resolveToken(req)));
- }
-
- public String refresh(String username) {
- return jwtTokenProvider.createToken(username, userRepository.findByEmail(username).getRoles());
- }
-
-}
diff --git a/auth/src/main/resources/application.yml b/auth/src/main/resources/application.yml
deleted file mode 100644
index 18856db7..00000000
--- a/auth/src/main/resources/application.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-server:
- port: 8083
- servlet:
- context-path: /authService
-
-spring:
- datasource:
- url: jdbc:mysql://localhost:3306/auth_db?useTimezone=true&serverTimezone=UTC
- username: root
- password: admin
- tomcat:
- max-wait: 20000
- max-active: 50
- max-idle: 20
- min-idle: 15
- application:
- name: authService
- jpa:
- hibernate:
- ddl-auto: create
- properties:
- hibernate:
- dialect: org.hibernate.dialect.MySQL8Dialect
- format_sql: true
- id:
- new_generator_mappings: false
- rabbitmq:
- host: localhost
- port: 5672
- username: admin
- password: admin
-
-eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:8087/discovery/eureka
-
-auth:
- rabbitmq:
- exchange: auth.exchange
- routingKeySignup: auth.signup.routingKey
-
-security:
- jwt:
- token:
- secret_key: key_microservices
- expire_time: 300000 # 5 minutos
-
-UserController:
- signin: Autentica usuário e retorna seu token JWT.
- signup: Cria usuário e retorna seu token JWT
- delete: Apaga usuário específico de acordo com ID
- search: Retorna usuário específico de acordo com ID
- me: Retorna dados do usuário atual
- refresh: Reinicia o tempo do token JWT
\ No newline at end of file
diff --git a/cadastral/pom.xml b/cadastral/pom.xml
index 3a09d9fd..801f2caf 100644
--- a/cadastral/pom.xml
+++ b/cadastral/pom.xml
@@ -89,6 +89,14 @@
org.springframework.boot
spring-boot-starter-data-mongodb
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
diff --git a/cadastral/src/main/java/com/unipampa/crud/config/security/SecurityConfig.java b/cadastral/src/main/java/com/unipampa/crud/config/security/SecurityConfig.java
new file mode 100644
index 00000000..459c9cc1
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/config/security/SecurityConfig.java
@@ -0,0 +1,68 @@
+package com.unipampa.crud.config.security;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.Customizer;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.SecurityFilterChain;
+
+@Configuration
+@EnableMethodSecurity
+public class SecurityConfig {
+
+ private static final String HOST = "HOST";
+ private static final String ADMIN = "ADMINISTRATOR";
+ private static final String GUEST = "GUEST";
+ @Autowired
+ private UserDetailsServiceImpl userDetailsService;
+
+ private static final String[] PUBLIC_MATCHERS = {
+ "/users/**"
+ };
+
+ @Bean
+ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
+ http.authorizeHttpRequests(auth -> auth
+ .requestMatchers(HttpMethod.POST, PUBLIC_MATCHERS).permitAll()
+ .requestMatchers("/accommodations/images/**").permitAll()
+ .requestMatchers(HttpMethod.POST, "/accommodations/**").hasAnyRole(HOST, ADMIN)
+ .requestMatchers(HttpMethod.GET, "/accommodations/**").hasAnyRole(HOST, GUEST, ADMIN)
+ .requestMatchers(HttpMethod.GET, "/accommodations/{id}").hasAnyRole(HOST, GUEST, ADMIN)
+ .requestMatchers(HttpMethod.PUT, "/accommodations/{id}").hasAnyRole(HOST, ADMIN)
+ .requestMatchers(HttpMethod.DELETE, "/accommodations/{id}").hasAnyRole(HOST, ADMIN)
+
+ .requestMatchers(HttpMethod.GET, "/users").hasRole(ADMIN)
+ .requestMatchers(HttpMethod.GET, "/users/email/**").hasAnyRole(ADMIN, HOST, GUEST)
+ .requestMatchers(HttpMethod.GET, "/users/{id}").hasAnyRole(ADMIN, HOST, GUEST)
+ .requestMatchers(HttpMethod.PUT, "/users/{id}").hasAnyRole(ADMIN, HOST, GUEST)
+ .requestMatchers(HttpMethod.DELETE, "/users/{id}").hasAnyRole(ADMIN, HOST, GUEST)
+
+ .anyRequest().authenticated()
+ )
+ .httpBasic(Customizer.withDefaults())
+ .csrf(AbstractHttpConfigurer::disable);
+ return http.build();
+ }
+
+ @Bean
+ public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
+ AuthenticationManagerBuilder builder = http.getSharedObject(AuthenticationManagerBuilder.class);
+ builder.userDetailsService(userDetailsService)
+ .passwordEncoder(passwordEncoder());
+ return builder.build();
+ }
+
+
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return new BCryptPasswordEncoder();
+ }
+}
\ No newline at end of file
diff --git a/cadastral/src/main/java/com/unipampa/crud/config/security/SecurityUtil.java b/cadastral/src/main/java/com/unipampa/crud/config/security/SecurityUtil.java
new file mode 100644
index 00000000..8f305f72
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/config/security/SecurityUtil.java
@@ -0,0 +1,34 @@
+package com.unipampa.crud.config.security;
+
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+public class SecurityUtil {
+
+ public static String getAuthenticatedUserId() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+
+ if (authentication != null && authentication.getPrincipal() instanceof UserDatailsImpl userDetails) {
+ return userDetails.getUserId();
+ }
+
+ throw new RuntimeException("Usuário não autenticado!");
+ }
+
+ public static boolean isAuthenticatedAdmin() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+
+ if (authentication != null && authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMINISTRATOR"))) {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isOwnerOrAdmin(String resourceUserId) {
+ String authenticatedUserId = getAuthenticatedUserId();
+ return isAuthenticatedAdmin() || authenticatedUserId.equals(resourceUserId);
+ }
+
+
+}
\ No newline at end of file
diff --git a/cadastral/src/main/java/com/unipampa/crud/config/security/UserDatailsImpl.java b/cadastral/src/main/java/com/unipampa/crud/config/security/UserDatailsImpl.java
new file mode 100644
index 00000000..72fdfb03
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/config/security/UserDatailsImpl.java
@@ -0,0 +1,78 @@
+package com.unipampa.crud.config.security;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.unipampa.crud.entities.User;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.io.Serial;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Data
+@AllArgsConstructor
+public class UserDatailsImpl implements UserDetails {
+
+ @Serial
+ private static final long serialVersionUID = 4735505087197006457L;
+ private String userId;
+ private String fullName;
+ private String username;
+ @JsonIgnore
+ private String password;
+ private String email;
+ private Collection extends GrantedAuthority> authorities;
+
+ public static UserDatailsImpl build(User user) {
+ List authorities = user.getRoles().stream()
+ .map(role -> new SimpleGrantedAuthority(role.getAuthority()))
+ .collect(Collectors.toList());
+
+ return new UserDatailsImpl (
+ user.getId(),
+ user.getName(),
+ user.getUserName(),
+ user.getPassword(),
+ user.getEmail(),
+ authorities);
+ }
+
+ @Override
+ public Collection extends GrantedAuthority> getAuthorities() {
+ return this.authorities;
+ }
+
+ @Override
+ public String getPassword() {
+ return this.password;
+ }
+
+ @Override
+ public String getUsername() {
+ return this.username;
+ }
+
+ @Override
+ public boolean isAccountNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isAccountNonLocked() {
+ return true;
+ }
+
+ @Override
+ public boolean isCredentialsNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/cadastral/src/main/java/com/unipampa/crud/config/security/UserDetailsServiceImpl.java b/cadastral/src/main/java/com/unipampa/crud/config/security/UserDetailsServiceImpl.java
new file mode 100644
index 00000000..3182d833
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/config/security/UserDetailsServiceImpl.java
@@ -0,0 +1,28 @@
+package com.unipampa.crud.config.security;
+
+import com.unipampa.crud.repository.UserRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserDetailsServiceImpl implements UserDetailsService {
+
+ public static final String USER_NOT_FOUND = "Usuário não encontrado para o nome de usuário: ";
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ try {
+ var user = userRepository.findByUserName(username)
+ .orElseThrow(() -> new UsernameNotFoundException(USER_NOT_FOUND + username));
+ return UserDatailsImpl.build(user);
+ } catch (Exception e) {
+ throw new UsernameNotFoundException("Erro de conectividade ou ao carregar os dados do usuário: " + username, e);
+ }
+ }
+}
diff --git a/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationDTO.java b/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationDTO.java
index d4ec7ac2..a4056e1f 100644
--- a/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationDTO.java
+++ b/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationDTO.java
@@ -1,22 +1,61 @@
package com.unipampa.crud.dto;
import com.unipampa.crud.enums.AccommodationType;
-import lombok.Data;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
+import java.util.List;
public record AccommodationDTO(
- @NotBlank String title,
+ @Schema(example = "6804eaef24e9aa24141421a1")
+ String id,
+
+ @NotBlank
+ @Schema(example = "Apartamento moderno no centro")
+ String title,
+
+ @Schema(example = "Centro Histórico")
String neighborhood,
+
+ @Schema(example = "1234XYZ")
String codAddress,
- @NotNull String city,
- @NotBlank String description,
- String adress,
- @NotBlank String state,
- @NotBlank BigDecimal price,
- int number,
- @NotNull int imageQuantity,
- @NotNull AccommodationType accommodationType
+
+ @NotNull
+ @Schema(example = "Porto Alegre")
+ String city,
+
+ @NotBlank
+ @Schema(example = "Apartamento bem iluminado, com 2 quartos e cozinha equipada.")
+ String description,
+
+ @Schema(example = "Rua dos Andradas")
+ String address,
+
+ @NotBlank
+ @Schema(example = "RS")
+ String state,
+
+ @NotNull
+ @Schema(example = "2500.00")
+ BigDecimal price,
+
+ @Schema(example = "123")
+ int streetNumber,
+
+ @NotNull
+ @Schema(example = "2")
+ Integer imageQuantity,
+
+ @NotNull
+ @Schema(example = "APARTMENT")
+ AccommodationType accommodationType,
+
+ @NotNull
+ @Schema(example = "4")
+ Integer maxOccupancy,
+
+ @Schema(example = "[\"https://img.com/1.jpg\", \"https://img.com/2.jpg\"]")
+ List imagesUrls
) {}
diff --git a/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationRequestDTO.java b/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationRequestDTO.java
new file mode 100644
index 00000000..281ec649
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationRequestDTO.java
@@ -0,0 +1,61 @@
+package com.unipampa.crud.dto;
+
+import com.unipampa.crud.enums.AccommodationType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public record AccommodationRequestDTO(
+ @NotBlank
+ @Schema(example = "Apartamento moderno no centro")
+ String title,
+
+ @Schema(example = "Centro Histórico")
+ String neighborhood,
+
+ @Schema(example = "1234XYZ")
+ String codAddress,
+
+ @NotNull
+ @Schema(example = "Porto Alegre")
+ String city,
+
+ @NotBlank
+ @Schema(example = "Apartamento bem iluminado, com 2 quartos e cozinha equipada.")
+ String description,
+
+ @Schema(example = "Rua dos Andradas")
+ String address,
+
+ @NotBlank
+ @Schema(example = "RS")
+ String state,
+
+ @NotNull
+ @Schema(example = "2500.00")
+ BigDecimal price,
+
+ @Schema(example = "123")
+ int streetNumber,
+
+ @NotNull
+ @Schema(example = "2")
+ Integer imageQuantity,
+
+ @NotNull
+ @Schema(example = "APARTMENT")
+ AccommodationType accommodationType,
+
+ @NotNull
+ @Schema(example = "4")
+ Integer maxOccupancy,
+
+ @Schema(example = "[\"https://img.com/1.jpg\", \"https://img.com/2.jpg\"]")
+ List imagesUrls,
+
+ @NotBlank
+ String hostId
+) {}
diff --git a/cadastral/src/main/java/com/unipampa/crud/dto/ErrorResponse.java b/cadastral/src/main/java/com/unipampa/crud/dto/ErrorResponse.java
new file mode 100644
index 00000000..156443de
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/dto/ErrorResponse.java
@@ -0,0 +1,10 @@
+package com.unipampa.crud.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import java.time.LocalDateTime;
+
+public record ErrorResponse(
+ String message,
+ LocalDateTime timestamp
+) { }
diff --git a/cadastral/src/main/java/com/unipampa/crud/dto/UserDTO.java b/cadastral/src/main/java/com/unipampa/crud/dto/UserDTO.java
index b9f19a7c..3a6af92f 100644
--- a/cadastral/src/main/java/com/unipampa/crud/dto/UserDTO.java
+++ b/cadastral/src/main/java/com/unipampa/crud/dto/UserDTO.java
@@ -1,9 +1,8 @@
package com.unipampa.crud.dto;
-import com.unipampa.crud.enums.UserType;
-import lombok.Data;
-import javax.validation.constraints.NotBlank;
+import com.unipampa.crud.enums.UserType;
+import jakarta.validation.constraints.NotBlank;
public record UserDTO(
@NotBlank String email,
@@ -12,5 +11,7 @@ public record UserDTO(
@NotBlank String cpf,
@NotBlank String phone,
@NotBlank String address,
- UserType type
+ @NotBlank String password,
+ @NotBlank String role,
+ @NotBlank UserType type
) {}
\ No newline at end of file
diff --git a/cadastral/src/main/java/com/unipampa/crud/entities/Accommodation.java b/cadastral/src/main/java/com/unipampa/crud/entities/Accommodation.java
index c3d5ddfb..f5d8c4e2 100644
--- a/cadastral/src/main/java/com/unipampa/crud/entities/Accommodation.java
+++ b/cadastral/src/main/java/com/unipampa/crud/entities/Accommodation.java
@@ -7,6 +7,7 @@
import org.springframework.data.annotation.Id;
import java.math.BigDecimal;
+import java.util.List;
@Builder
@Document
@@ -18,20 +19,22 @@ public class Accommodation {
private String title;
private String description;
private BigDecimal price;
- private String imagesUrl;
- private int numberRoooms;
- private int numberBathrooms;
- private boolean acceptsAnimals;
- private boolean acceptsChildren;
- private boolean sharedHosting;
- private boolean authorizedAnnouncement;
- private AccommodationType accommodationType;
+ private List imagesUrls;
+ private int roomCount;
+ private int bathroomCount;
+ private boolean allowsPets;
+ private boolean allowsChildren;
+ private boolean isSharedHosting;
+ private boolean isAuthorizedAnnouncement;
+ private AccommodationType type;
private String city;
private String neighborhood;
- private int number;
+ private int streetNumber;
private String zipCode;
private String address;
private String state;
- private int imageQuantity;
+ private int imageCount;
+ private int maxOccupancy;
+ private String hostId;
}
diff --git a/cadastral/src/main/java/com/unipampa/crud/entities/Role.java b/cadastral/src/main/java/com/unipampa/crud/entities/Role.java
new file mode 100644
index 00000000..16309f48
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/entities/Role.java
@@ -0,0 +1,31 @@
+package com.unipampa.crud.entities;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.unipampa.crud.enums.UserType;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.security.core.GrantedAuthority;
+
+import java.io.Serializable;
+
+@Document
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Role implements GrantedAuthority, Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ private String id;
+
+ @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
+ private UserType roleName;
+
+ @Override
+ public String getAuthority() {
+ return this.roleName.toString();
+ }
+}
diff --git a/cadastral/src/main/java/com/unipampa/crud/entities/User.java b/cadastral/src/main/java/com/unipampa/crud/entities/User.java
index 14441471..c78de22e 100644
--- a/cadastral/src/main/java/com/unipampa/crud/entities/User.java
+++ b/cadastral/src/main/java/com/unipampa/crud/entities/User.java
@@ -2,18 +2,25 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.unipampa.crud.enums.UserType;
+import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
+import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Serializable;
import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.Set;
@Builder
@Document
@Data
+@NoArgsConstructor
+@AllArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 4477471521765649872L;
@@ -27,6 +34,10 @@ public class User implements Serializable {
private String name;
private UserType type;
+ @DBRef
+ private Set roles = new HashSet<>();
+
+
@Field
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'")
private LocalDateTime creationDate;
diff --git a/cadastral/src/main/java/com/unipampa/crud/enums/AccommodationType.java b/cadastral/src/main/java/com/unipampa/crud/enums/AccommodationType.java
index 231c29e1..838a0915 100644
--- a/cadastral/src/main/java/com/unipampa/crud/enums/AccommodationType.java
+++ b/cadastral/src/main/java/com/unipampa/crud/enums/AccommodationType.java
@@ -1,16 +1,12 @@
package com.unipampa.crud.enums;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
public enum AccommodationType {
+ @Schema(description = "Apartamento")
APARTMENT,
+ @Schema(description = "Casa")
HOUSE;
-
-// @JsonCreator
-// public static AccommodationType fromString(String value) {
-// return AccommodationType.valueOf(value.toUpperCase());
-// }
}
diff --git a/cadastral/src/main/java/com/unipampa/crud/enums/UserType.java b/cadastral/src/main/java/com/unipampa/crud/enums/UserType.java
index c5ebf286..9b4d0609 100644
--- a/cadastral/src/main/java/com/unipampa/crud/enums/UserType.java
+++ b/cadastral/src/main/java/com/unipampa/crud/enums/UserType.java
@@ -1,18 +1,10 @@
package com.unipampa.crud.enums;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
public enum UserType {
- HOST,
-
- GUEST,
+ ROLE_HOST,
- ADMINITSTRATOR;
+ ROLE_GUEST,
-// @JsonCreator
-// public static UserType fromString(String value) {
-// return UserType.valueOf(value.toUpperCase());
-// }
+ ROLE_ADMINISTRATOR;
}
diff --git a/cadastral/src/main/java/com/unipampa/crud/exceptions/ResourceNotFoundException.java b/cadastral/src/main/java/com/unipampa/crud/exceptions/ResourceNotFoundException.java
new file mode 100644
index 00000000..91c9183a
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/exceptions/ResourceNotFoundException.java
@@ -0,0 +1,12 @@
+package com.unipampa.crud.exceptions;
+
+import java.io.Serial;
+
+public class ResourceNotFoundException extends RuntimeException {
+ @Serial
+ private static final long serialVersionUID = -5528826721501929445L;
+
+ public ResourceNotFoundException(String message) {
+ super(message);
+ }
+}
diff --git a/cadastral/src/main/java/com/unipampa/crud/mappers/AccommodationMapper.java b/cadastral/src/main/java/com/unipampa/crud/mappers/AccommodationMapper.java
new file mode 100644
index 00000000..df904d48
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/mappers/AccommodationMapper.java
@@ -0,0 +1,68 @@
+package com.unipampa.crud.mappers;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.unipampa.crud.dto.AccommodationDTO;
+import com.unipampa.crud.dto.AccommodationRequestDTO;
+import com.unipampa.crud.entities.Accommodation;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class AccommodationMapper {
+
+
+ @Autowired
+ private HttpServletRequest request;
+
+ private final ObjectMapper objectMapper;
+
+ public AccommodationMapper(ObjectMapper objectMapper) {
+ this.objectMapper = objectMapper;
+ }
+
+ public Accommodation toEntity(AccommodationDTO dto) {
+ return objectMapper.convertValue(dto, Accommodation.class);
+ }
+
+ public Accommodation toEntity(AccommodationRequestDTO requestDTO) {
+ return objectMapper.convertValue(requestDTO, Accommodation.class);
+ }
+
+ public AccommodationDTO toDTO(Accommodation entity) {
+ String urlBase = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
+ List imageUrls = entity.getImagesUrls().stream()
+ .map(path -> {
+ Path p = Paths.get(path);
+ String id = p.getParent().getFileName().toString(); // exemplo: "6804eaef24e9aa24141421a1"
+ String filename = p.getFileName().toString();
+ return urlBase + "/accommodations/images/" + id + "/" + filename;
+ })
+ .collect(Collectors.toList());
+
+ return new AccommodationDTO(
+ entity.getId(),
+ entity.getTitle(),
+ entity.getNeighborhood(),
+ entity.getZipCode(),
+ entity.getCity(),
+ entity.getDescription(),
+ entity.getAddress(),
+ entity.getState(),
+ entity.getPrice(),
+ entity.getStreetNumber(),
+ entity.getImagesUrls() != null ? entity.getImagesUrls().size() : 0,
+ entity.getType(),
+ entity.getMaxOccupancy(),
+ imageUrls
+ );
+
+
+ }
+}
diff --git a/cadastral/src/main/java/com/unipampa/crud/repository/AccommodationRepository.java b/cadastral/src/main/java/com/unipampa/crud/repository/AccommodationRepository.java
index 9056a44c..b8477338 100644
--- a/cadastral/src/main/java/com/unipampa/crud/repository/AccommodationRepository.java
+++ b/cadastral/src/main/java/com/unipampa/crud/repository/AccommodationRepository.java
@@ -5,7 +5,7 @@
public interface AccommodationRepository extends MongoRepository {
- boolean existsByZipCodeAndNumber(String codeAddress, int number);
+ boolean existsByZipCodeAndStreetNumber(String codeAddress, int streetNumber);
}
diff --git a/cadastral/src/main/java/com/unipampa/crud/repository/RoleRepository.java b/cadastral/src/main/java/com/unipampa/crud/repository/RoleRepository.java
new file mode 100644
index 00000000..7ae85b19
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/repository/RoleRepository.java
@@ -0,0 +1,13 @@
+package com.unipampa.crud.repository;
+
+import com.unipampa.crud.entities.Role;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+import java.util.Optional;
+
+
+public interface RoleRepository extends MongoRepository {
+
+ Optional findRoleByRoleName(String name);
+
+}
diff --git a/cadastral/src/main/java/com/unipampa/crud/repository/UserRepository.java b/cadastral/src/main/java/com/unipampa/crud/repository/UserRepository.java
index e29c76ac..62ac135b 100644
--- a/cadastral/src/main/java/com/unipampa/crud/repository/UserRepository.java
+++ b/cadastral/src/main/java/com/unipampa/crud/repository/UserRepository.java
@@ -1,6 +1,7 @@
package com.unipampa.crud.repository;
import com.unipampa.crud.entities.User;
+import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.Optional;
@@ -15,4 +16,6 @@ public interface UserRepository extends MongoRepository {
boolean existsByCpf(String cpf);
+ @EntityGraph(attributePaths = {"roles"}, type = EntityGraph.EntityGraphType.FETCH)
+ Optional findByUserName(String username);
}
\ No newline at end of file
diff --git a/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java b/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java
index 55f57494..71f3f9e7 100644
--- a/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java
+++ b/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java
@@ -1,112 +1,209 @@
package com.unipampa.crud.resources;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.unipampa.crud.config.security.SecurityUtil;
import com.unipampa.crud.dto.AccommodationDTO;
+import com.unipampa.crud.dto.AccommodationRequestDTO;
+import com.unipampa.crud.dto.ErrorResponse;
import com.unipampa.crud.entities.Accommodation;
+import com.unipampa.crud.mappers.AccommodationMapper;
import com.unipampa.crud.service.AccommodationService;
import com.unipampa.crud.validations.ValidationsRegisterAccommodation;
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.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.MediaTypeFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
-
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
@RestController
@RequestMapping("/accommodations")
public class AccommodationResource {
- @Autowired
- private AccommodationService accommodationService;
-
- @Autowired
- private ObjectMapper mapper;
-
- @Autowired
- private List validations;
-
- @PostMapping
- @Operation(summary = "Salva uma acomodação)")
- @ApiResponses(value = {
- @ApiResponse(responseCode = "200", description = "Recurso salvo com sucesso!" )
- })
- public ResponseEntity save(@RequestBody AccommodationDTO accommodationDTO) {
-
- validations.forEach(e -> e.validate(accommodationDTO));
-
- var accommodation = mapper.convertValue(accommodationDTO, Accommodation.class);
- accommodationService.save(accommodation);
- return ResponseEntity.status(HttpStatus.OK).body(accommodation);
- }
-
- @GetMapping
- @Operation(summary = "Retorna uma lista com todas as acomodações")
- public ResponseEntity> findAll() {
- List accommodations = accommodationService.findAll();
- return ResponseEntity.status(HttpStatus.OK).body(accommodations);
- }
-
- @GetMapping("{id}")
- @Operation(summary = "Encontra uma acomodação através do id")
- @ApiResponses(value = {
- @ApiResponse(responseCode = "200", description = "Recurso encontrado com sucesso"),
- @ApiResponse(responseCode = "404", description = "Recurso não encontrado")
- })
- public ResponseEntity