diff --git a/cadastral/pom.xml b/cadastral/pom.xml
index 3a09d9fd..b85a67f9 100644
--- a/cadastral/pom.xml
+++ b/cadastral/pom.xml
@@ -89,6 +89,10 @@
org.springframework.boot
spring-boot-starter-data-mongodb
+
+ jakarta.validation
+ jakarta.validation-api
+
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..fc4f98f4 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,24 @@
package com.unipampa.crud.dto;
import com.unipampa.crud.enums.AccommodationType;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
+import java.util.List;
public record AccommodationDTO(
+ String id,
@NotBlank String title,
String neighborhood,
String codAddress,
@NotNull String city,
@NotBlank String description,
- String adress,
+ String address,
@NotBlank String state,
- @NotBlank BigDecimal price,
- int number,
- @NotNull int imageQuantity,
- @NotNull AccommodationType accommodationType
+ @NotNull BigDecimal price,
+ int streetNumber,
+ @NotNull Integer imageQuantity,
+ @NotNull AccommodationType accommodationType,
+ @NotNull Integer maxOccupancy,
+ 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..4c714479
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/dto/AccommodationRequestDTO.java
@@ -0,0 +1,24 @@
+package com.unipampa.crud.dto;
+
+import com.unipampa.crud.enums.AccommodationType;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public record AccommodationRequestDTO(
+ @NotBlank String title,
+ String neighborhood,
+ String codAddress,
+ @NotNull String city,
+ @NotBlank String description,
+ String address,
+ @NotBlank String state,
+ @NotNull BigDecimal price,
+ int streetNumber,
+ @NotNull Integer imageQuantity,
+ @NotNull AccommodationType accommodationType,
+ @NotNull Integer maxOccupancy,
+ List imagesUrls
+) {}
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..c64cb003
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/dto/ErrorResponse.java
@@ -0,0 +1,5 @@
+package com.unipampa.crud.dto;
+
+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..5d68849b 100644
--- a/cadastral/src/main/java/com/unipampa/crud/dto/UserDTO.java
+++ b/cadastral/src/main/java/com/unipampa/crud/dto/UserDTO.java
@@ -3,7 +3,7 @@
import com.unipampa.crud.enums.UserType;
import lombok.Data;
-import javax.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotBlank;
public record UserDTO(
@NotBlank String email,
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..7120c821 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,21 @@ 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;
}
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..dc3d39f5
--- /dev/null
+++ b/cadastral/src/main/java/com/unipampa/crud/mappers/AccommodationMapper.java
@@ -0,0 +1,29 @@
+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 org.springframework.stereotype.Component;
+
+@Component
+public class AccommodationMapper {
+
+ 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) {
+ return objectMapper.convertValue(entity, AccommodationDTO.class);
+ }
+}
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/resources/AccommodationResource.java b/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java
index 55f57494..b6b919c2 100644
--- a/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java
+++ b/cadastral/src/main/java/com/unipampa/crud/resources/AccommodationResource.java
@@ -1,11 +1,15 @@
package com.unipampa.crud.resources;
-import com.fasterxml.jackson.databind.ObjectMapper;
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.springframework.beans.factory.annotation.Autowired;
@@ -13,100 +17,141 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import java.net.URI;
+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