update borrow module + fix invite

This commit is contained in:
2021-10-27 17:07:23 +02:00
parent 3c98987678
commit 0646a21d97
19 changed files with 363 additions and 299 deletions
@@ -23,9 +23,11 @@ import de.bstly.we.borrow.model.BorrowItemSlot;
import de.bstly.we.borrow.model.QBorrowItem;
import de.bstly.we.borrow.model.QBorrowItemManualSlot;
import de.bstly.we.borrow.model.QBorrowItemPeriodSlot;
import de.bstly.we.borrow.model.QBorrowRequest;
import de.bstly.we.borrow.repository.BorrowItemManualSlotRepository;
import de.bstly.we.borrow.repository.BorrowItemPeriodSlotRepository;
import de.bstly.we.borrow.repository.BorrowItemRepository;
import de.bstly.we.borrow.repository.BorrowRequestRepository;
import de.bstly.we.businesslogic.UserManager;
import de.bstly.we.email.businesslogic.EmailManager;
import de.bstly.we.model.User;
@@ -43,6 +45,8 @@ public class BorrowItemManager {
@Autowired
private BorrowItemPeriodSlotRepository borrowItemPeriodSlotRepository;
@Autowired
private BorrowRequestRepository borrowRequestRepository;
@Autowired
private UserManager userManager;
@Autowired
private EmailManager emailManager;
@@ -50,6 +54,7 @@ public class BorrowItemManager {
private QBorrowItem qBorrowItem = QBorrowItem.borrowItem;
private QBorrowItemManualSlot qBorrowItemManualSlot = QBorrowItemManualSlot.borrowItemManualSlot;
private QBorrowItemPeriodSlot qBorrowItemPeriodSlot = QBorrowItemPeriodSlot.borrowItemPeriodSlot;
private QBorrowRequest qBorrowRequest = QBorrowRequest.borrowRequest;
/**
* Exists.
@@ -207,6 +212,8 @@ public class BorrowItemManager {
.findAll(qBorrowItemManualSlot.item.eq(borrowItem.getId())));
borrowItemPeriodSlotRepository.deleteAll(borrowItemPeriodSlotRepository
.findAll(qBorrowItemPeriodSlot.item.eq(borrowItem.getId())));
borrowRequestRepository.deleteAll(
borrowRequestRepository.findAll(qBorrowRequest.item.eq(borrowItem.getId())));
borrowItemRepository.delete(borrowItem);
}
@@ -217,7 +224,10 @@ public class BorrowItemManager {
* @param id the id
*/
public void delete(Long id) {
borrowItemRepository.deleteById(id);
BorrowItem borrowItem = get(id);
Assert.notNull(borrowItem, "Invalid borrow item id: "
+ id);
delete(borrowItem);
}
/**
@@ -87,7 +87,7 @@ public class BorrowRequestManager {
* @param descending the descending
* @return the for user and stauts
*/
public Page<BorrowRequest> getForUserAndStauts(Long userId, BorrowRequestStatus status,
public Page<BorrowRequest> getForUserAndStatus(Long userId, BorrowRequestStatus status,
int page, int size, String sortBy, boolean descending) {
return borrowRequestRepository.findAll(
qBorrowRequest.user.eq(userId).and(qBorrowRequest.status.eq(status)),
@@ -59,56 +59,30 @@ public class BorrowItemController extends BaseController {
@RequestParam("size") Optional<Integer> sizeParameter,
@RequestParam("sort") Optional<String> sortParameter,
@RequestParam("desc") Optional<Boolean> descParameter,
@RequestParam("search") Optional<String> searchParameter) {
@RequestParam("search") Optional<String> searchParameter,
@RequestParam("owner") Optional<Boolean> ownerParameter) {
if (!permissionManager.hasPermission(getCurrentUserId(), BorrowPermissions.BORROW_REQUESTS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
}
Page<BorrowItem> borrowItems;
Page<BorrowItem> borrowItems = borrowItemManager.get(pageParameter.orElse(0),
sizeParameter.orElse(10), sortParameter.orElse("id"), descParameter.orElse(false),
searchParameter.orElse(null));
for (BorrowItem borrowItem : borrowItems.getContent()) {
if (!borrowItem.getOwner().equals(getCurrentUserId())) {
borrowItem.setEmail(null);
borrowItem.setEmailNotification(null);
if (ownerParameter.isPresent() && ownerParameter.get().booleanValue()) {
if (!permissionManager.hasPermission(getCurrentUserId(), BorrowPermissions.BORROW_ITEMS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
}
borrowItemManager.applySlots(borrowItem);
borrowItems = borrowItemManager.getForUser(getCurrentUserId(), pageParameter.orElse(0),
sizeParameter.orElse(10), sortParameter.orElse("id"),
descParameter.orElse(false), searchParameter.orElse(null));
} else {
if (!permissionManager.hasPermission(getCurrentUserId(),
BorrowPermissions.BORROW_REQUESTS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
}
borrowItems = borrowItemManager.get(pageParameter.orElse(0), sizeParameter.orElse(10),
sortParameter.orElse("id"), descParameter.orElse(false),
searchParameter.orElse(null));
}
return borrowItems;
}
/**
* Gets the owner borrow items.
*
* @param pageParameter the page parameter
* @param sizeParameter the size parameter
* @param sortParameter the sort parameter
* @param descParameter the desc parameter
* @param searchParameter the search parameter
* @return the owner borrow items
*/
@PreAuthorize("isAuthenticated()")
@GetMapping("/mine")
public Page<BorrowItem> getOwnerBorrowItems(
@RequestParam("page") Optional<Integer> pageParameter,
@RequestParam("size") Optional<Integer> sizeParameter,
@RequestParam("sort") Optional<String> sortParameter,
@RequestParam("desc") Optional<Boolean> descParameter,
@RequestParam("search") Optional<String> searchParameter) {
if (!permissionManager.hasPermission(getCurrentUserId(), BorrowPermissions.BORROW_ITEMS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
}
Page<BorrowItem> borrowItems = borrowItemManager.getForUser(getCurrentUserId(),
pageParameter.orElse(0), sizeParameter.orElse(10), sortParameter.orElse("id"),
descParameter.orElse(false), searchParameter.orElse(null));
for (BorrowItem borrowItem : borrowItems.getContent()) {
if (!borrowItem.getOwner().equals(getCurrentUserId())) {
borrowItem.setEmail(null);
@@ -136,7 +110,7 @@ public class BorrowItemController extends BaseController {
BorrowItem borrowItem = borrowItemManager.get(id);
if (borrowItem == null) {
throw new EntityResponseStatusException(HttpStatus.NO_CONTENT);
throw new EntityResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY);
}
if (!borrowItem.getOwner().equals(getCurrentUserId())) {
@@ -78,53 +78,30 @@ public class BorrowRequestController extends BaseController {
@RequestParam("page") Optional<Integer> pageParameter,
@RequestParam("size") Optional<Integer> sizeParameter,
@RequestParam("sort") Optional<String> sortParameter,
@RequestParam("desc") Optional<Boolean> descParameter) {
@RequestParam("desc") Optional<Boolean> descParameter,
@RequestParam("owner") Optional<Boolean> ownerParameter) {
if (!permissionManager.hasPermission(getCurrentUserId(), BorrowPermissions.BORROW_REQUESTS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
Page<BorrowRequest> borrowRequests;
if (ownerParameter.isPresent() && ownerParameter.get().booleanValue()) {
if (!permissionManager.hasPermission(getCurrentUserId(), BorrowPermissions.BORROW_ITEMS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
}
borrowRequests = borrowRequestManager.getForOwner(getCurrentUserId(),
pageParameter.orElse(0), sizeParameter.orElse(10), sortParameter.orElse("id"),
descParameter.orElse(false));
} else {
if (!permissionManager.hasPermission(getCurrentUserId(),
BorrowPermissions.BORROW_REQUESTS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
}
borrowRequests = borrowRequestManager.getForUser(getCurrentUserId(),
pageParameter.orElse(0), sizeParameter.orElse(10), sortParameter.orElse("id"),
descParameter.orElse(false));
}
Page<BorrowRequest> borrowRequests = borrowRequestManager.getForUser(getCurrentUserId(),
pageParameter.orElse(0), sizeParameter.orElse(10), sortParameter.orElse("id"),
descParameter.orElse(false));
for (BorrowRequest borrowRequest : borrowRequests.getContent()) {
BorrowItem borrowItem = borrowItemManager.get(borrowRequest.getItem());
borrowItem.setEmail(null);
borrowItem.setEmailNotification(null);
borrowRequest.setBorrowItem(borrowItem);
}
return borrowRequests;
}
/**
* Gets the owner borrow requests.
*
* @param pageParameter the page parameter
* @param sizeParameter the size parameter
* @param sortParameter the sort parameter
* @param descParameter the desc parameter
* @return the owner borrow requests
*/
@PreAuthorize("isAuthenticated()")
@GetMapping("/mine")
public Page<BorrowRequest> getOwnerBorrowRequests(
@RequestParam("page") Optional<Integer> pageParameter,
@RequestParam("size") Optional<Integer> sizeParameter,
@RequestParam("sort") Optional<String> sortParameter,
@RequestParam("desc") Optional<Boolean> descParameter) {
if (!permissionManager.hasPermission(getCurrentUserId(), BorrowPermissions.BORROW_ITEMS)
|| !permissionManager.isFullUser(getCurrentUserId())) {
throw new EntityResponseStatusException(HttpStatus.FORBIDDEN);
}
Page<BorrowRequest> borrowRequests = borrowRequestManager.getForOwner(getCurrentUserId(),
pageParameter.orElse(0), sizeParameter.orElse(10), sortParameter.orElse("id"),
descParameter.orElse(false));
for (BorrowRequest borrowRequest : borrowRequests.getContent()) {
BorrowItem borrowItem = borrowItemManager.get(borrowRequest.getItem());
borrowItem.setEmail(null);
@@ -294,7 +271,7 @@ public class BorrowRequestController extends BaseController {
return signedJwt.getJWTClaimsSet().getClaims();
} catch (ParseException e) {
throw new EntityResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY);
throw new EntityResponseStatusException(HttpStatus.NOT_ACCEPTABLE);
}
}
}
@@ -70,14 +70,14 @@ public class BorrowJwtValidator implements Validator {
errors.reject("INVALID");
return;
} else if (claims.getNotBeforeTime().after(new Date())) {
errors.rejectValue("nbf", "UPCOMING");
errors.rejectValue("nbf", "UPCOMING", claims.getNotBeforeTime().toInstant().toString());
}
if (claims.getExpirationTime() == null) {
errors.reject("INVALID");
return;
} else if (claims.getExpirationTime().before(new Date())) {
errors.rejectValue("exp", "EXPIRED");
errors.rejectValue("exp", "EXPIRED", claims.getExpirationTime().toInstant().toString());
}
try {
@@ -4,7 +4,7 @@
package de.bstly.we.borrow.controller.validation;
import java.time.Duration;
import java.time.OffsetTime;
import java.time.LocalTime;
import java.time.ZoneOffset;
import org.springframework.beans.factory.annotation.Autowired;
@@ -130,7 +130,7 @@ public class BorrowRequestValidator implements Validator {
BorrowItemPeriodSlot borrowItemPeriodSlot = (BorrowItemPeriodSlot) borrowItemSlot;
if (borrowRequest.getStarts().atZone(ZoneOffset.UTC).getDayOfWeek()
.compareTo(borrowItemPeriodSlot.getStartDay()) >= 0
&& OffsetTime
&& LocalTime
.ofInstant(borrowRequest.getStarts(),
ZoneOffset.UTC)
.compareTo(
@@ -139,7 +139,7 @@ public class BorrowRequestValidator implements Validator {
}
if (borrowRequest.getEnds().atZone(ZoneOffset.UTC).getDayOfWeek()
.compareTo(borrowItemPeriodSlot.getEndDay()) <= 0
&& OffsetTime
&& LocalTime
.ofInstant(borrowRequest.getEnds(), ZoneOffset.UTC)
.compareTo(
borrowItemPeriodSlot.getEndTime()) <= 0) {
@@ -4,10 +4,12 @@
package de.bstly.we.borrow.model;
import java.time.DayOfWeek;
import java.time.OffsetTime;
import java.time.LocalTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Table;
/**
@@ -18,13 +20,15 @@ import javax.persistence.Table;
public class BorrowItemPeriodSlot extends BorrowItemSlot {
@Column(name = "start_day")
@Enumerated(EnumType.STRING)
private DayOfWeek startDay;
@Column(name = "end_day")
private DayOfWeek endDay;
@Column(name = "start_time")
private OffsetTime startTime;
private LocalTime startTime;
@Column(name = "end_day")
@Enumerated(EnumType.STRING)
private DayOfWeek endDay;
@Column(name = "end_time")
private OffsetTime endTime;
private LocalTime endTime;
/**
* @return the startDay
@@ -40,6 +44,20 @@ public class BorrowItemPeriodSlot extends BorrowItemSlot {
this.startDay = startDay;
}
/**
* @return the startTime
*/
public LocalTime getStartTime() {
return startTime;
}
/**
* @param startTime the startTime to set
*/
public void setStartTime(LocalTime startTime) {
this.startTime = startTime;
}
/**
* @return the endDay
*/
@@ -54,31 +72,17 @@ public class BorrowItemPeriodSlot extends BorrowItemSlot {
this.endDay = endDay;
}
/**
* @return the startTime
*/
public OffsetTime getStartTime() {
return startTime;
}
/**
* @param startTime the startTime to set
*/
public void setStartTime(OffsetTime startTime) {
this.startTime = startTime;
}
/**
* @return the endTime
*/
public OffsetTime getEndTime() {
public LocalTime getEndTime() {
return endTime;
}
/**
* @param endTime the endTime to set
*/
public void setEndTime(OffsetTime endTime) {
public void setEndTime(LocalTime endTime) {
this.endTime = endTime;
}