use of org.folio.circulation.support.results.Result in project mod-circulation by folio-org.
the class RenewByIdResource method findLoan.
@Override
protected CompletableFuture<Result<Loan>> findLoan(JsonObject request, LoanRepository loanRepository, ItemRepository itemRepository, UserRepository userRepository, CirculationErrorHandler errorHandler) {
final Result<RenewByIdRequest> requestResult = RenewByIdRequest.from(request);
final String itemId = requestResult.map(RenewByIdRequest::getItemId).orElse("unknown item ID");
final SingleOpenLoanForItemInStorageFinder singleOpenLoanFinder = new SingleOpenLoanForItemInStorageFinder(loanRepository, userRepository, false);
final ItemByIdInStorageFinder itemFinder = new ItemByIdInStorageFinder(itemRepository, noItemFoundForIdFailure(itemId));
return completedFuture(requestResult).thenCompose(r -> lookupItem(itemFinder, itemId, errorHandler)).thenCompose(r -> r.after(item -> lookupLoan(singleOpenLoanFinder, item, errorHandler))).thenApply(r -> r.next(loan -> refuseWhenUserNotFound(loan, errorHandler))).thenApply(r -> r.next(loan -> refuseWhenUserDoesNotMatch(loan, requestResult.value(), errorHandler)));
}
use of org.folio.circulation.support.results.Result in project mod-circulation by folio-org.
the class RenewalResource method renew.
private Result<RenewalContext> renew(RenewalContext context, ZonedDateTime renewDate) {
final var loan = context.getLoan();
final var requestQueue = context.getRequestQueue();
final var loanPolicy = loan.getLoanPolicy();
final Result<ZonedDateTime> proposedDueDateResult = calculateNewDueDate(loan, requestQueue, renewDate);
final List<ValidationError> errors = new ArrayList<>();
addErrorsIfDueDateResultFailed(loan, errors, proposedDueDateResult);
if (errors.isEmpty()) {
final BlockOverrides blockOverrides = BlockOverrides.from(getObjectProperty(context.getRenewalRequest(), "overrideBlocks"));
if (!blockOverrides.getPatronBlockOverride().isRequested() && !blockOverrides.getRenewalBlockOverride().isRequested()) {
return proposedDueDateResult.map(dueDate -> loan.renew(dueDate, loanPolicy.getId())).map(l -> context);
}
return proposedDueDateResult.map(dueDate -> loan.overrideRenewal(dueDate, loanPolicy.getId(), blockOverrides.getComment())).map(l -> context);
}
return failedValidation(errors);
}
use of org.folio.circulation.support.results.Result in project mod-circulation by folio-org.
the class EndPatronSessionRequest method from.
public static List<Result<EndPatronSessionRequest>> from(JsonObject jsonObject) {
final String END_SESSIONS = "endSessions";
List<Result<EndPatronSessionRequest>> resultListOfEndPatronSessionRequests = new ArrayList<>();
JsonArray endSessions = jsonObject.getJsonArray(END_SESSIONS);
for (int i = 0; i < endSessions.size(); i++) {
JsonObject endSession = endSessions.getJsonObject(i);
final String patronIdFromJson = getProperty(endSession, PATRON_ID);
if (isBlank(patronIdFromJson)) {
return singletonList(failedValidation("End patron session request must have patron id", PATRON_ID, null));
}
String actionTypeRepresentation = getProperty(endSession, ACTION_TYPE);
if (isBlank(actionTypeRepresentation)) {
return singletonList(failedValidation("End patron session request must have action type", ACTION_TYPE, null));
}
resultListOfEndPatronSessionRequests.add(PatronActionType.from(actionTypeRepresentation).map(patronActionType -> new EndPatronSessionRequest(patronIdFromJson, patronActionType)).map(Result::succeeded).orElse(failedValidation("Invalid patron action type value", ACTION_TYPE, actionTypeRepresentation)));
}
return resultListOfEndPatronSessionRequests;
}
use of org.folio.circulation.support.results.Result in project mod-circulation by folio-org.
the class RequestScheduledNoticeService method rescheduleRequestNotices.
public Result<RequestAndRelatedRecords> rescheduleRequestNotices(RequestAndRelatedRecords relatedRecords) {
Request request = relatedRecords.getRequest();
scheduledNoticesRepository.deleteByRequestId(request.getId()).thenAccept(r -> r.next(resp -> scheduleRequestNotices(request)));
return succeeded(relatedRecords);
}
use of org.folio.circulation.support.results.Result in project mod-circulation by folio-org.
the class GroupedLoanScheduledNoticeHandler method handleDataCollectionFailure.
protected CompletableFuture<Result<ScheduledNoticeContext>> handleDataCollectionFailure(Result<ScheduledNoticeContext> result, ScheduledNotice notice) {
if (result.failed()) {
HttpFailure cause = result.cause();
log.error("Failed to collect data for scheduled notice: {}.\n{}", cause, notice);
return loanScheduledNoticeHandler.deleteNotice(notice, cause.toString()).thenApply(r -> r.next(n -> result));
}
return completedFuture(result);
}
Aggregations