From 68cd4f9e9ef5b202c6f5514cb75ebdd73415a4d2 Mon Sep 17 00:00:00 2001 From: Samuel Modesto Date: Mon, 28 Jul 2025 21:48:47 -0300 Subject: [PATCH 1/2] =?UTF-8?q?dele=C3=A7=C3=A3o=20l=C3=B3gica=20de=20acom?= =?UTF-8?q?oda=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/unipampa/crud/entities/Accommodation.java | 2 ++ .../com/unipampa/crud/enums/AccommodationStats.java | 12 ++++++++++++ .../crud/resources/AccommodationResource.java | 2 ++ .../crud/service/impl/AccommodationServiceImpl.java | 13 ++++++++++++- .../java/com/example/rent/dto/AccommodationDto.java | 3 ++- .../com/example/rent/enums/StatusAccommodation.java | 3 ++- .../rent/receiver/AccommodationReceiver.java | 2 +- 7 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 cadastral/src/main/java/com/unipampa/crud/enums/AccommodationStats.java 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 f5d8c4e2..260206f8 100644 --- a/cadastral/src/main/java/com/unipampa/crud/entities/Accommodation.java +++ b/cadastral/src/main/java/com/unipampa/crud/entities/Accommodation.java @@ -1,5 +1,6 @@ package com.unipampa.crud.entities; +import com.unipampa.crud.enums.AccommodationStats; import com.unipampa.crud.enums.AccommodationType; import lombok.Builder; import lombok.Data; @@ -36,5 +37,6 @@ public class Accommodation { private int imageCount; private int maxOccupancy; private String hostId; + private AccommodationStats stats; } diff --git a/cadastral/src/main/java/com/unipampa/crud/enums/AccommodationStats.java b/cadastral/src/main/java/com/unipampa/crud/enums/AccommodationStats.java new file mode 100644 index 00000000..3f1b4e6b --- /dev/null +++ b/cadastral/src/main/java/com/unipampa/crud/enums/AccommodationStats.java @@ -0,0 +1,12 @@ +package com.unipampa.crud.enums; + +import io.swagger.v3.oas.annotations.media.Schema; + +public enum AccommodationStats { + + @Schema(description = "Propriedade indisponível") + UNAVAILABLE, + + @Schema(description = "Propriedade disponível") + AVAILABLE; +} 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 17f94c8a..e542830f 100644 --- a/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java +++ b/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java @@ -7,6 +7,7 @@ import com.unipampa.crud.dto.AccommodationRequestDTO; import com.unipampa.crud.dto.ErrorResponse; import com.unipampa.crud.entities.Accommodation; +import com.unipampa.crud.enums.AccommodationStats; import com.unipampa.crud.mappers.AccommodationMapper; import com.unipampa.crud.service.AccommodationService; import com.unipampa.crud.validations.ValidationsRegisterAccommodation; @@ -84,6 +85,7 @@ public ResponseEntity save( accommodation.setId(novoId); String authenticatedUserId = SecurityUtil.getAuthenticatedUserId(); accommodation.setHostId(authenticatedUserId); + accommodation.setStats(AccommodationStats.AVAILABLE); accommodationService.save(accommodation, images); URI location = URI.create("/accommodations/" + accommodation.getId()); diff --git a/cadastral/src/main/java/com/unipampa/crud/service/impl/AccommodationServiceImpl.java b/cadastral/src/main/java/com/unipampa/crud/service/impl/AccommodationServiceImpl.java index 4cb37561..63b7d735 100644 --- a/cadastral/src/main/java/com/unipampa/crud/service/impl/AccommodationServiceImpl.java +++ b/cadastral/src/main/java/com/unipampa/crud/service/impl/AccommodationServiceImpl.java @@ -2,9 +2,11 @@ import com.unipampa.crud.config.security.SecurityUtil; import com.unipampa.crud.entities.Accommodation; +import com.unipampa.crud.enums.AccommodationStats; import com.unipampa.crud.repository.AccommodationRepository; import com.unipampa.crud.sender.AccommodationSender; import com.unipampa.crud.service.AccommodationService; +import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -59,7 +61,16 @@ public List findAll() { @Override public void delete(String id) { - propertyRepository.deleteById(id); + Accommodation property = propertyRepository.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Property not found with id: " + id)); + // Atualiza o status para INATIVO + property.setStats(AccommodationStats.UNAVAILABLE); + + // Salva novamente no banco de dados + Accommodation updatedProperty = propertyRepository.save(property); + + // Envia a mensagem para o microsserviço transacional + accommodationSender.sendMessage(updatedProperty); } diff --git a/transacional/src/main/java/com/example/rent/dto/AccommodationDto.java b/transacional/src/main/java/com/example/rent/dto/AccommodationDto.java index eadb9752..c9e4db1f 100644 --- a/transacional/src/main/java/com/example/rent/dto/AccommodationDto.java +++ b/transacional/src/main/java/com/example/rent/dto/AccommodationDto.java @@ -1,8 +1,9 @@ package com.example.rent.dto; +import com.example.rent.enums.StatusAccommodation; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) -public record AccommodationDto(String id, Double price, int maxOccupancy) { +public record AccommodationDto(String id, Double price, int maxOccupancy, StatusAccommodation stats) { } diff --git a/transacional/src/main/java/com/example/rent/enums/StatusAccommodation.java b/transacional/src/main/java/com/example/rent/enums/StatusAccommodation.java index 0536fbe1..1d881a12 100644 --- a/transacional/src/main/java/com/example/rent/enums/StatusAccommodation.java +++ b/transacional/src/main/java/com/example/rent/enums/StatusAccommodation.java @@ -5,7 +5,8 @@ public enum StatusAccommodation { RENTED, BOOKING, - AVAILABLE; + AVAILABLE, + UNAVAILABLE; @JsonCreator public static StatusAccommodation fromString(String value) { diff --git a/transacional/src/main/java/com/example/rent/receiver/AccommodationReceiver.java b/transacional/src/main/java/com/example/rent/receiver/AccommodationReceiver.java index 1aeed817..06db94e0 100644 --- a/transacional/src/main/java/com/example/rent/receiver/AccommodationReceiver.java +++ b/transacional/src/main/java/com/example/rent/receiver/AccommodationReceiver.java @@ -26,7 +26,7 @@ public void receive(@Payload AccommodationDto dto) { Accommodation accommodation = new Accommodation(); accommodation.setId(dto.id()); accommodation.setPrice(dto.price()); - accommodation.setStatus(StatusAccommodation.AVAILABLE); + accommodation.setStatus(dto.stats()); accommodation.setGuestCapacity(dto.maxOccupancy()); accommodationRepository.save(accommodation); } From 475279051c48958d9e3709ecab4f7a0ab5ce2ad1 Mon Sep 17 00:00:00 2001 From: Samuel Modesto Date: Mon, 28 Jul 2025 22:02:14 -0300 Subject: [PATCH 2/2] =?UTF-8?q?dele=C3=A7=C3=A3o=20l=C3=B3gica=20de=20usu?= =?UTF-8?q?=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/unipampa/crud/entities/User.java | 2 ++ .../src/main/java/com/unipampa/crud/enums/UserStats.java | 6 ++++++ .../java/com/unipampa/crud/resources/UserResource.java | 2 ++ .../com/unipampa/crud/service/impl/UserServiceImpl.java | 8 +++++++- .../src/main/java/com/example/rent/dto/UserDto.java | 3 ++- .../src/main/java/com/example/rent/entities/User.java | 4 ++++ .../src/main/java/com/example/rent/enums/UserStats.java | 6 ++++++ .../main/java/com/example/rent/receiver/UserReceiver.java | 1 + 8 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 cadastral/src/main/java/com/unipampa/crud/enums/UserStats.java create mode 100644 transacional/src/main/java/com/example/rent/enums/UserStats.java 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 bc351988..93873ac4 100644 --- a/cadastral/src/main/java/com/unipampa/crud/entities/User.java +++ b/cadastral/src/main/java/com/unipampa/crud/entities/User.java @@ -1,6 +1,7 @@ package com.unipampa.crud.entities; import com.fasterxml.jackson.annotation.JsonFormat; +import com.unipampa.crud.enums.UserStats; import com.unipampa.crud.enums.UserType; import lombok.AllArgsConstructor; import lombok.Builder; @@ -34,6 +35,7 @@ public class User implements Serializable { private String email; private String name; private UserType type; + private UserStats stats; @DBRef private Set roles = new HashSet<>(); diff --git a/cadastral/src/main/java/com/unipampa/crud/enums/UserStats.java b/cadastral/src/main/java/com/unipampa/crud/enums/UserStats.java new file mode 100644 index 00000000..72a3d475 --- /dev/null +++ b/cadastral/src/main/java/com/unipampa/crud/enums/UserStats.java @@ -0,0 +1,6 @@ +package com.unipampa.crud.enums; + +public enum UserStats { + + AVAILABLE, UNAVAILABLE; +} diff --git a/cadastral/src/main/java/com/unipampa/crud/resources/UserResource.java b/cadastral/src/main/java/com/unipampa/crud/resources/UserResource.java index b92de73c..ddcdf59e 100644 --- a/cadastral/src/main/java/com/unipampa/crud/resources/UserResource.java +++ b/cadastral/src/main/java/com/unipampa/crud/resources/UserResource.java @@ -5,6 +5,7 @@ import com.unipampa.crud.dto.UserDTO; import com.unipampa.crud.entities.Role; import com.unipampa.crud.entities.User; +import com.unipampa.crud.enums.UserStats; import com.unipampa.crud.mappers.UserMapper; import com.unipampa.crud.service.RoleService; import com.unipampa.crud.service.UserService; @@ -73,6 +74,7 @@ public ResponseEntity saveUser(@RequestBody UserDTO userDto) { user.setCreationDate(LocalDateTime.now(ZoneId.of("UTC"))); user.setLastUpdateDate(LocalDateTime.now(ZoneId.of("UTC"))); user.getRoles().add(role); + user.setStats(UserStats.AVAILABLE); userService.save(user); log.info(USER_SAVED_SUCCESSFULLY_LOG, user.getUserName()); return new ResponseEntity<>(HttpStatus.CREATED); diff --git a/cadastral/src/main/java/com/unipampa/crud/service/impl/UserServiceImpl.java b/cadastral/src/main/java/com/unipampa/crud/service/impl/UserServiceImpl.java index d2e551c5..100b50ed 100644 --- a/cadastral/src/main/java/com/unipampa/crud/service/impl/UserServiceImpl.java +++ b/cadastral/src/main/java/com/unipampa/crud/service/impl/UserServiceImpl.java @@ -2,10 +2,12 @@ import com.unipampa.crud.config.security.SecurityUtil; import com.unipampa.crud.entities.User; +import com.unipampa.crud.enums.UserStats; import com.unipampa.crud.exceptions.ResourceNotFoundException; import com.unipampa.crud.repository.UserRepository; import com.unipampa.crud.sender.UserSender; import com.unipampa.crud.service.UserService; +import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -46,7 +48,11 @@ public List findAll() { @Override public void delete(String id) { - userRepository.deleteById(id); + User user = userRepository.findById(id) + .orElseThrow(() -> new EntityNotFoundException("User not found with id: " + id)); + user.setStats(UserStats.UNAVAILABLE); + userRepository.save(user); + userSender.sendMessage(user); } @Override diff --git a/transacional/src/main/java/com/example/rent/dto/UserDto.java b/transacional/src/main/java/com/example/rent/dto/UserDto.java index 42ad9ca1..1ea8c37f 100644 --- a/transacional/src/main/java/com/example/rent/dto/UserDto.java +++ b/transacional/src/main/java/com/example/rent/dto/UserDto.java @@ -1,10 +1,11 @@ package com.example.rent.dto; +import com.example.rent.enums.UserStats; import com.example.rent.enums.UserType; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) -public record UserDto(String id, String name, String email, UserType type) { +public record UserDto(String id, String name, String email, UserType type, UserStats stats) { } diff --git a/transacional/src/main/java/com/example/rent/entities/User.java b/transacional/src/main/java/com/example/rent/entities/User.java index 331440e4..7d00d8c7 100644 --- a/transacional/src/main/java/com/example/rent/entities/User.java +++ b/transacional/src/main/java/com/example/rent/entities/User.java @@ -1,5 +1,6 @@ package com.example.rent.entities; +import com.example.rent.enums.UserStats; import com.example.rent.enums.UserType; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -31,4 +32,7 @@ public class User implements Serializable { @Column(name = "user_type", length = 30, nullable = false) private UserType userType; + @Enumerated(EnumType.STRING) + private UserStats stats; + } diff --git a/transacional/src/main/java/com/example/rent/enums/UserStats.java b/transacional/src/main/java/com/example/rent/enums/UserStats.java new file mode 100644 index 00000000..fc936c7e --- /dev/null +++ b/transacional/src/main/java/com/example/rent/enums/UserStats.java @@ -0,0 +1,6 @@ +package com.example.rent.enums; + +public enum UserStats { + + AVAILABLE, UNAVAILABLE; +} diff --git a/transacional/src/main/java/com/example/rent/receiver/UserReceiver.java b/transacional/src/main/java/com/example/rent/receiver/UserReceiver.java index c7626acb..4ca99c08 100644 --- a/transacional/src/main/java/com/example/rent/receiver/UserReceiver.java +++ b/transacional/src/main/java/com/example/rent/receiver/UserReceiver.java @@ -25,6 +25,7 @@ public void receive(@Payload UserDto dto) { user.setName(dto.name()); user.setEmail(dto.email()); user.setUserType(dto.type()); + user.setStats(dto.stats()); userRepository.save(user); }