truncate seconds
This commit is contained in:
+92
-88
@@ -6,6 +6,7 @@ package de.bstly.we.borrow.controller.validation;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -21,6 +22,7 @@ import de.bstly.we.borrow.model.BorrowRequest;
|
||||
import de.bstly.we.borrow.model.BorrowRequestStatus;
|
||||
import de.bstly.we.borrow.model.QBorrowRequest;
|
||||
import de.bstly.we.borrow.repository.BorrowRequestRepository;
|
||||
import de.bstly.we.businesslogic.support.InstantHelper;
|
||||
|
||||
/**
|
||||
* The Class BorrowRequestValidator.
|
||||
@@ -61,112 +63,114 @@ public class BorrowRequestValidator implements Validator {
|
||||
return;
|
||||
}
|
||||
|
||||
validateTime(borrowRequest, borrowItem, errors);
|
||||
}
|
||||
|
||||
public void validateTime(BorrowRequest borrowRequest, BorrowItem borrowItem, Errors errors) {
|
||||
if (borrowRequest.getStarts() == null) {
|
||||
errors.rejectValue("starts", "REQUIRED");
|
||||
return;
|
||||
}
|
||||
|
||||
if (borrowRequest.getEnds() == null) {
|
||||
errors.rejectValue("ends", "REQUIRED");
|
||||
return;
|
||||
}
|
||||
|
||||
borrowRequest
|
||||
.setStarts(InstantHelper.truncate(borrowRequest.getStarts(), ChronoUnit.SECONDS));
|
||||
borrowRequest.setEnds(InstantHelper.truncate(borrowRequest.getEnds(), ChronoUnit.SECONDS));
|
||||
|
||||
// expiry + start
|
||||
if (borrowRequest.getEnds() != null && borrowRequest.getStarts() != null) {
|
||||
if (borrowRequest.getStarts().isAfter(borrowRequest.getEnds())
|
||||
|| borrowRequestRepository.exists(qBorrowRequest.item
|
||||
.eq(borrowRequest.getItem())
|
||||
// exlude self
|
||||
.and(qBorrowRequest.id.ne(
|
||||
borrowRequest.getId() == null ? -1L : borrowRequest.getId()))
|
||||
// accepted
|
||||
.and(qBorrowRequest.status.eq(BorrowRequestStatus.ACCEPTED))
|
||||
// expires after start
|
||||
.and(qBorrowRequest.ends.after(borrowRequest.getStarts()))
|
||||
// start before expires
|
||||
.and(qBorrowRequest.starts.before(borrowRequest.getEnds())))) {
|
||||
errors.rejectValue("starts", "ALREADY_USED");
|
||||
errors.rejectValue("ends", "ALREADY_USED");
|
||||
if (borrowRequest.getStarts().isAfter(borrowRequest.getEnds())
|
||||
|| borrowRequestRepository.exists(qBorrowRequest.item.eq(borrowRequest.getItem())
|
||||
// exlude self
|
||||
.and(qBorrowRequest.id
|
||||
.ne(borrowRequest.getId() == null ? -1L : borrowRequest.getId()))
|
||||
// accepted
|
||||
.and(qBorrowRequest.status.eq(BorrowRequestStatus.ACCEPTED))
|
||||
// expires after start
|
||||
.and(qBorrowRequest.ends.after(borrowRequest.getStarts()))
|
||||
// start before expires
|
||||
.and(qBorrowRequest.starts.before(borrowRequest.getEnds())))) {
|
||||
errors.rejectValue("starts", "ALREADY_USED");
|
||||
errors.rejectValue("ends", "ALREADY_USED");
|
||||
} else {
|
||||
if (borrowItem.getMinDuration() != null && borrowItem.getMinDuration().compareTo(
|
||||
Duration.between(borrowRequest.getEnds(), borrowRequest.getStarts())) > 0) {
|
||||
errors.rejectValue("starts", "TOO_SHORT");
|
||||
errors.rejectValue("ends", "TOO_SHORT");
|
||||
} else if (borrowItem.getMaxDuration() != null
|
||||
&& Duration.between(borrowRequest.getEnds(), borrowRequest.getStarts())
|
||||
.compareTo(borrowItem.getMaxDuration()) > 0) {
|
||||
errors.rejectValue("starts", "TOO_LONG");
|
||||
errors.rejectValue("ends", "TOO_LONG");
|
||||
} else {
|
||||
if (borrowItem.getMinDuration() != null && borrowItem.getMinDuration().compareTo(
|
||||
Duration.between(borrowRequest.getEnds(), borrowRequest.getStarts())) > 0) {
|
||||
errors.rejectValue("starts", "TOO_SHORT");
|
||||
errors.rejectValue("ends", "TOO_SHORT");
|
||||
} else if (borrowItem.getMaxDuration() != null
|
||||
&& Duration.between(borrowRequest.getEnds(), borrowRequest.getStarts())
|
||||
.compareTo(borrowItem.getMaxDuration()) > 0) {
|
||||
errors.rejectValue("starts", "TOO_LONG");
|
||||
errors.rejectValue("ends", "TOO_LONG");
|
||||
} else {
|
||||
boolean validSlot = false;
|
||||
boolean validStart = false;
|
||||
boolean validEnd = false;
|
||||
borrowItemManager.applySlots(borrowItem);
|
||||
boolean validSlot = false;
|
||||
boolean validStart = false;
|
||||
boolean validEnd = false;
|
||||
borrowItemManager.applySlots(borrowItem);
|
||||
|
||||
switch (borrowItem.getAvailability()) {
|
||||
case ALWAYS:
|
||||
validSlot = true;
|
||||
break;
|
||||
case MANUAL:
|
||||
for (BorrowItemSlot borrowItemSlot : borrowItem.getSlots()) {
|
||||
if (borrowItemSlot instanceof BorrowItemManualSlot) {
|
||||
BorrowItemManualSlot borrowItemManualSlot = (BorrowItemManualSlot) borrowItemSlot;
|
||||
if (borrowRequest.getStarts()
|
||||
.compareTo(borrowItemManualSlot.getStart()) >= 0) {
|
||||
validStart = true;
|
||||
}
|
||||
if (borrowRequest.getEnds()
|
||||
.compareTo(borrowItemManualSlot.getEnd()) <= 0) {
|
||||
validEnd = true;
|
||||
}
|
||||
if (validStart && validEnd) {
|
||||
validSlot = true;
|
||||
break;
|
||||
}
|
||||
switch (borrowItem.getAvailability()) {
|
||||
case ALWAYS:
|
||||
validSlot = true;
|
||||
break;
|
||||
case MANUAL:
|
||||
for (BorrowItemSlot borrowItemSlot : borrowItem.getSlots()) {
|
||||
if (borrowItemSlot instanceof BorrowItemManualSlot) {
|
||||
BorrowItemManualSlot borrowItemManualSlot = (BorrowItemManualSlot) borrowItemSlot;
|
||||
if (borrowRequest.getStarts()
|
||||
.compareTo(borrowItemManualSlot.getStart()) >= 0) {
|
||||
validStart = true;
|
||||
}
|
||||
if (borrowRequest.getEnds()
|
||||
.compareTo(borrowItemManualSlot.getEnd()) <= 0) {
|
||||
validEnd = true;
|
||||
}
|
||||
if (validStart && validEnd) {
|
||||
validSlot = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PERIOD:
|
||||
for (BorrowItemSlot borrowItemSlot : borrowItem.getSlots()) {
|
||||
if (borrowItemSlot instanceof BorrowItemPeriodSlot) {
|
||||
BorrowItemPeriodSlot borrowItemPeriodSlot = (BorrowItemPeriodSlot) borrowItemSlot;
|
||||
if (borrowRequest.getStarts().atZone(ZoneOffset.UTC).getDayOfWeek()
|
||||
.compareTo(borrowItemPeriodSlot.getStartDay()) >= 0
|
||||
&& LocalTime
|
||||
.ofInstant(borrowRequest.getStarts(),
|
||||
ZoneOffset.UTC)
|
||||
.compareTo(
|
||||
borrowItemPeriodSlot.getStartTime()) >= 0) {
|
||||
validStart = true;
|
||||
}
|
||||
if (borrowRequest.getEnds().atZone(ZoneOffset.UTC).getDayOfWeek()
|
||||
.compareTo(borrowItemPeriodSlot.getEndDay()) <= 0
|
||||
&& LocalTime
|
||||
.ofInstant(borrowRequest.getEnds(), ZoneOffset.UTC)
|
||||
.compareTo(
|
||||
borrowItemPeriodSlot.getEndTime()) <= 0) {
|
||||
validEnd = true;
|
||||
}
|
||||
if (validStart && validEnd) {
|
||||
validSlot = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PERIOD:
|
||||
for (BorrowItemSlot borrowItemSlot : borrowItem.getSlots()) {
|
||||
if (borrowItemSlot instanceof BorrowItemPeriodSlot) {
|
||||
BorrowItemPeriodSlot borrowItemPeriodSlot = (BorrowItemPeriodSlot) borrowItemSlot;
|
||||
if (borrowRequest.getStarts().atZone(ZoneOffset.UTC).getDayOfWeek()
|
||||
.compareTo(borrowItemPeriodSlot.getStartDay()) >= 0
|
||||
&& LocalTime
|
||||
.ofInstant(borrowRequest.getStarts(), ZoneOffset.UTC)
|
||||
.compareTo(borrowItemPeriodSlot.getStartTime()) >= 0) {
|
||||
validStart = true;
|
||||
}
|
||||
if (borrowRequest.getEnds().atZone(ZoneOffset.UTC).getDayOfWeek()
|
||||
.compareTo(borrowItemPeriodSlot.getEndDay()) <= 0
|
||||
&& LocalTime.ofInstant(borrowRequest.getEnds(), ZoneOffset.UTC)
|
||||
.compareTo(borrowItemPeriodSlot.getEndTime()) <= 0) {
|
||||
validEnd = true;
|
||||
}
|
||||
if (validStart && validEnd) {
|
||||
validSlot = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!validSlot) {
|
||||
if (!validStart) {
|
||||
errors.rejectValue("starts", "INVALID");
|
||||
}
|
||||
if (!validEnd) {
|
||||
errors.rejectValue("ends", "INVALID");
|
||||
}
|
||||
if (!validSlot) {
|
||||
if (!validStart) {
|
||||
errors.rejectValue("starts", "INVALID");
|
||||
}
|
||||
if (!validEnd) {
|
||||
errors.rejectValue("ends", "INVALID");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user