Skip to content

Commit

Permalink
busyDates
Browse files Browse the repository at this point in the history
  • Loading branch information
villaflaminio committed May 11, 2023
1 parent 7140495 commit eeb6871
Show file tree
Hide file tree
Showing 8 changed files with 143 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import it.bruffa.facilitymanager.model.dto.CreateCleaningActionRequest;
import it.bruffa.facilitymanager.model.dto.StructureFilter;
import it.bruffa.facilitymanager.model.dto.request.CreateStructureRequest;
import it.bruffa.facilitymanager.model.entity.CleaningAction;
import it.bruffa.facilitymanager.model.entity.Reservation;
import it.bruffa.facilitymanager.model.entity.Structure;
import it.bruffa.facilitymanager.model.exception.ApiError;
import it.bruffa.facilitymanager.model.exception.ItemNotFoundException;
Expand All @@ -20,6 +19,7 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@RestController
Expand Down Expand Up @@ -64,15 +64,15 @@ ResponseEntity<Page<Structure>> filter(
ResponseEntity<List<StructureIdInfo>> getStructuresList() throws ItemNotFoundException;


@Operation(summary = "Get available day", description = "Get available day", tags = {"structure"})
@GetMapping("/{structureId}/availableDay")
@Operation(summary = "getReservationsBetweenDatesAndStructure", description = "Get reservations", tags = {"structure"})
@GetMapping("/{structureId}/busyDates")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Successfully retrieved"),
@ApiResponse(responseCode = "404", description = "Not found - The item was not found",
content = {@Content(mediaType = "application/json",
schema = @Schema(implementation = ApiError.class))}),
})
ResponseEntity<List<String>> getAvailableDay(@PathVariable @Schema(example = "1") Long structureId) throws ItemNotFoundException;
ResponseEntity<List<Reservation>> getReservationsBetweenDatesAndStructure(@RequestParam @Schema(example = "2021-05-11") LocalDate startDate,@RequestParam @Schema(example = "2023-05-11") LocalDate endDate, @PathVariable @Schema(example = "1") Long structureId);

@Operation(summary = "Create structure", description = "Create structure", tags = {"structure"})
@PostMapping
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import it.bruffa.facilitymanager.controller.StructureController;
import it.bruffa.facilitymanager.model.dto.StructureFilter;
import it.bruffa.facilitymanager.model.dto.request.CreateStructureRequest;
import it.bruffa.facilitymanager.model.entity.Reservation;
import it.bruffa.facilitymanager.model.entity.Structure;
import it.bruffa.facilitymanager.model.exception.ItemNotFoundException;
import it.bruffa.facilitymanager.model.projection.StructureIdInfo;
Expand All @@ -13,6 +14,7 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.util.List;

@RestController
Expand All @@ -36,8 +38,8 @@ public ResponseEntity<List<StructureIdInfo>> getStructuresList() throws ItemNotF
}

@Override
public ResponseEntity<List<String>> getAvailableDay(Long structureId) throws ItemNotFoundException {
return structureService.getAvailableDay(structureId);
public ResponseEntity<List<Reservation>> getReservationsBetweenDatesAndStructure(LocalDate startDate, LocalDate endDate, Long structureId) throws ItemNotFoundException {
return structureService.getReservationsBetweenDatesAndStructure( startDate, endDate, structureId);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,48 @@
package it.bruffa.facilitymanager.model.dto;

import com.fasterxml.jackson.annotation.JsonManagedReference;
import it.bruffa.facilitymanager.model.entity.CleaningAction;
import it.bruffa.facilitymanager.model.entity.Gate;
import it.bruffa.facilitymanager.model.entity.Maintenance;
import it.bruffa.facilitymanager.model.entity.Quote;
import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StructureFilter {

private Long id;
private Long gateId;
private Long quoteId;

private String name;

private String address;

private String city;

private String cap;

private String province;

private String country;

private Double latitude;

private Double longitude;

private String description;

private Boolean isActive;
private Integer cleaningDuration;

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public interface StructureInfo {

String getDescription();

Boolean isIsActive();
Boolean getIsActive();

Integer getCleaningDuration();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import it.bruffa.facilitymanager.model.entity.Reservation;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.time.LocalDate;
import java.util.List;
Expand All @@ -10,4 +11,7 @@ public interface ReservationRepository extends JpaRepository<Reservation, Long>

List<Reservation> findAllByCheckOut(LocalDate checkOut);

@Query(value = "from Reservation r where r.arrival BETWEEN :startDate AND :endDate AND r.departure BETWEEN :startDate AND :endDate AND r.structure.id = :idStruttura")
List<Reservation> getAllBetweenDatesAndStructure(LocalDate startDate,LocalDate endDate, long idStruttura);

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
package it.bruffa.facilitymanager.repository;

import it.bruffa.facilitymanager.model.entity.Structure;
import it.bruffa.facilitymanager.model.projection.StructureIdInfo;
import it.bruffa.facilitymanager.model.projection.StructureInfo;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

public interface StructureRepository extends JpaRepository<Structure, Long> {

Optional<StructureInfo> findStructureById(Long id);

List<StructureIdInfo> getStructureIdInfoBy();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import it.bruffa.facilitymanager.model.dto.StructureFilter;
import it.bruffa.facilitymanager.model.dto.request.CreateStructureRequest;
import it.bruffa.facilitymanager.model.entity.Reservation;
import it.bruffa.facilitymanager.model.entity.Structure;
import it.bruffa.facilitymanager.model.projection.StructureIdInfo;
import it.bruffa.facilitymanager.model.projection.StructureInfo;
import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;

import java.time.LocalDate;
import java.util.List;

public interface StructureService {
Expand All @@ -19,8 +21,7 @@ public interface StructureService {

ResponseEntity<List<StructureIdInfo>> getStructuresList();

ResponseEntity<List<String>> getAvailableDay(Long structureId);

ResponseEntity<List<Reservation>> getReservationsBetweenDatesAndStructure(LocalDate startDate, LocalDate endDate, Long idStruttura);
ResponseEntity<Structure> updateStructure(Long structureId, CreateStructureRequest structureRequest);

ResponseEntity<Boolean> deleteStructure(Long structureId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,25 @@
import it.bruffa.facilitymanager.model.builder.StructureBuilder;
import it.bruffa.facilitymanager.model.dto.StructureFilter;
import it.bruffa.facilitymanager.model.dto.request.CreateStructureRequest;
import it.bruffa.facilitymanager.model.entity.CheckList;
import it.bruffa.facilitymanager.model.entity.CleaningAction;
import it.bruffa.facilitymanager.model.entity.Structure;
import it.bruffa.facilitymanager.model.entity.User;
import it.bruffa.facilitymanager.model.entity.*;
import it.bruffa.facilitymanager.model.projection.StructureIdInfo;
import it.bruffa.facilitymanager.model.projection.StructureInfo;
import it.bruffa.facilitymanager.repository.GateRepository;
import it.bruffa.facilitymanager.repository.QuoteRepository;
import it.bruffa.facilitymanager.repository.ReservationRepository;
import it.bruffa.facilitymanager.repository.StructureRepository;
import it.bruffa.facilitymanager.service.CleaningActionService;
import it.bruffa.facilitymanager.service.StructureService;
import it.bruffa.facilitymanager.utilities.PropertiesHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.*;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.time.LocalDate;
import java.util.List;

@Service
Expand All @@ -28,6 +31,13 @@ public class StructureServiceImpl implements StructureService {

@Autowired
private StructureRepository structureRepository;
@Autowired
private GateRepository gateRepository;
@Autowired
private QuoteRepository quoteRepository;

@Autowired
private ReservationRepository reservationRepository;

@Override
public ResponseEntity<Structure> createStructure(CreateStructureRequest createStructureRequest) {
Expand Down Expand Up @@ -63,22 +73,75 @@ public ResponseEntity<Structure> createStructure(CreateStructureRequest createSt

@Override
public ResponseEntity<Page<Structure>> filter(StructureFilter probe, Integer page, Integer size, String sortField, String sortDirection) {
return null;
try {
logger.debug("filter() called with probe: {}, page: {}, size: {}, sortField: {}, sortDirection: {}", probe, page, size, sortField, sortDirection);
Pageable pageable;

Structure filter = new Structure();

if (probe.getGateId() != null)
filter.setGate(gateRepository.findById(probe.getGateId()).orElseThrow(() -> new RuntimeException("Gate not found")));


if (probe.getQuoteId() != null)
filter.setQuote(quoteRepository.findById(probe.getQuoteId()).orElseThrow(() -> new RuntimeException("Quote not found")));

PropertiesHelper.copyNonNullProperties(probe, filter);


if (org.springframework.util.StringUtils.isEmpty(sortField)) {
pageable = PageRequest.of(page, size);
} else {

Sort.Direction dir = StringUtils.isEmpty(sortDirection) ? Sort.Direction.ASC : Sort.Direction.valueOf(sortDirection.trim().toUpperCase());
pageable = PageRequest.of(page, size, dir, sortField);
}

ExampleMatcher matcher = ExampleMatcher.matchingAll().withIgnoreCase().withIgnoreNullValues().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING);
Example<Structure> example = Example.of(filter, matcher);

return ResponseEntity.ok(structureRepository.findAll(example, pageable));
} catch (Exception e) {
logger.error("Error in filter() method: {}", e.getMessage());
throw e;
}
}

@Override
public ResponseEntity<StructureInfo> getStructureById(Long structureId) {
return null;
try {
logger.debug("getStructureById() called with structureId: {}", structureId);
StructureInfo structure = structureRepository.findStructureById(structureId).orElseThrow(() -> new RuntimeException("Structure not found"));
return ResponseEntity.ok(structure);
} catch (Exception e) {
logger.error("Error in getStructureById() method: {}", e.getMessage());
throw e;
}
}

@Override
public ResponseEntity<List<StructureIdInfo>> getStructuresList() {
return null;
try {
logger.debug("getStructuresList() called");
return ResponseEntity.ok(structureRepository.getStructureIdInfoBy());
} catch (Exception e) {
logger.error("Error in getStructuresList() method: {}", e.getMessage());
throw e;
}
}

@Override
public ResponseEntity<List<String>> getAvailableDay(Long structureId) {
return null;
public ResponseEntity<List<Reservation>> getReservationsBetweenDatesAndStructure(LocalDate startDate, LocalDate endDate, Long idStruttura) {
try {
logger.debug("getAvailableDay() called with structureId: {}", idStruttura);

List<Reservation> reservations = reservationRepository.getAllBetweenDatesAndStructure(startDate, endDate, idStruttura);

return ResponseEntity.ok(reservations);
} catch (Exception e) {
logger.error("Error in getAvailableDay() method: {}", e.getMessage());
throw e;
}
}

@Override
Expand Down

0 comments on commit eeb6871

Please sign in to comment.