Search in sources :

Example 1 with PurchaseContextType

use of alfio.model.PurchaseContext.PurchaseContextType in project alf.io by alfio-event.

the class AdminReservationManager method confirmReservation.

// the following methods have an explicit transaction handling, therefore the @Transactional annotation is not helpful here
Result<Triple<TicketReservation, List<Ticket>, PurchaseContext>> confirmReservation(PurchaseContextType purchaseContextType, String eventName, String reservationId, String username, Notification notification, UUID subscriptionId) {
    DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
    TransactionTemplate template = new TransactionTemplate(transactionManager, definition);
    return template.execute(status -> {
        try {
            Result<Triple<TicketReservation, List<Ticket>, PurchaseContext>> result = purchaseContextManager.findBy(purchaseContextType, eventName).map(purchaseContext -> ticketReservationRepository.findOptionalReservationById(reservationId).filter(r -> r.getStatus() == TicketReservationStatus.PENDING || r.getStatus() == TicketReservationStatus.STUCK).map(r -> performConfirmation(reservationId, purchaseContext, r, notification, username, subscriptionId)).orElseGet(() -> Result.error(ErrorCode.ReservationError.UPDATE_FAILED))).orElseGet(() -> Result.error(ErrorCode.ReservationError.NOT_FOUND));
            if (!result.isSuccess()) {
                log.debug("Reservation confirmation failed for eventName: {} reservationId: {}, username: {}", eventName, reservationId, username);
                status.setRollbackOnly();
            }
            return result;
        } catch (Exception e) {
            log.error("Error during confirmation of reservation eventName: {} reservationId: {}, username: {}", eventName, reservationId, username);
            status.setRollbackOnly();
            return Result.error(singletonList(ErrorCode.custom("", e.getMessage())));
        }
    });
}
Also used : Triple(org.apache.commons.lang3.tuple.Triple) alfio.repository(alfio.repository) PaymentProxy(alfio.model.transaction.PaymentProxy) TemplateProcessor(alfio.controller.support.TemplateProcessor) StringUtils.firstNonBlank(org.apache.commons.lang3.StringUtils.firstNonBlank) RequiredArgsConstructor(lombok.RequiredArgsConstructor) AlfioMetadata(alfio.model.metadata.AlfioMetadata) StringUtils(org.apache.commons.lang3.StringUtils) Collections.singletonList(java.util.Collections.singletonList) UPDATE_TICKET(alfio.model.Audit.EventType.UPDATE_TICKET) ResultStatus(alfio.model.result.Result.ResultStatus) BigDecimal(java.math.BigDecimal) ErrorCode(alfio.model.result.ErrorCode) Pair(org.apache.commons.lang3.tuple.Pair) DefaultMessageSourceResolvable(org.springframework.context.support.DefaultMessageSourceResolvable) DataIntegrityViolationException(org.springframework.dao.DataIntegrityViolationException) DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) Triple(org.apache.commons.lang3.tuple.Triple) TICKET(alfio.model.Audit.EntityType.TICKET) StringUtils.trimToNull(org.apache.commons.lang3.StringUtils.trimToNull) Organization(alfio.model.user.Organization) Predicate(java.util.function.Predicate) Collectors(java.util.stream.Collectors) BinaryOperator(java.util.function.BinaryOperator) CANCEL_TICKET(alfio.model.Audit.EventType.CANCEL_TICKET) Stream(java.util.stream.Stream) PlatformTransactionManager(org.springframework.transaction.PlatformTransactionManager) alfio.model(alfio.model) UserRepository(alfio.repository.user.UserRepository) MapBindingResult(org.springframework.validation.MapBindingResult) java.util(java.util) MonetaryUtil.unitToCents(alfio.util.MonetaryUtil.unitToCents) MessageSourceManager(alfio.manager.i18n.MessageSourceManager) TransactionDefinition(org.springframework.transaction.TransactionDefinition) DuplicateReferenceException(alfio.manager.support.DuplicateReferenceException) PurchaseContextType(alfio.model.PurchaseContext.PurchaseContextType) MapSqlParameterSource(org.springframework.jdbc.core.namedparam.MapSqlParameterSource) Function(java.util.function.Function) alfio.util(alfio.util) Objects.requireNonNullElse(java.util.Objects.requireNonNullElse) Attendee(alfio.model.modification.AdminReservationModification.Attendee) DateTimeModification(alfio.model.modification.DateTimeModification) ReservationPriceCalculator(alfio.manager.system.ReservationPriceCalculator) TicketPriceContainer(alfio.model.decorator.TicketPriceContainer) ObjectUtils(org.apache.commons.lang3.ObjectUtils) Collections.singletonMap(java.util.Collections.singletonMap) TicketReservationStatus(alfio.model.TicketReservation.TicketReservationStatus) DateTimeModification.fromZonedDateTime(alfio.model.modification.DateTimeModification.fromZonedDateTime) TicketCategoryModification(alfio.model.modification.TicketCategoryModification) RESERVATION(alfio.model.Audit.EntityType.RESERVATION) Notification(alfio.model.modification.AdminReservationModification.Notification) TicketsInfo(alfio.model.modification.AdminReservationModification.TicketsInfo) User(alfio.model.user.User) Result(alfio.model.result.Result) Component(org.springframework.stereotype.Component) Validate(org.apache.commons.lang3.Validate) PaymentSpecification(alfio.manager.payment.PaymentSpecification) TransactionTemplate(org.springframework.transaction.support.TransactionTemplate) Log4j2(lombok.extern.log4j.Log4j2) Category(alfio.model.modification.AdminReservationModification.Category) Wrappers.optionally(alfio.util.Wrappers.optionally) EventUtil.generateEmptyTickets(alfio.util.EventUtil.generateEmptyTickets) AdminReservationModification(alfio.model.modification.AdminReservationModification) Transactional(org.springframework.transaction.annotation.Transactional) Assert(org.springframework.util.Assert) DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) TransactionTemplate(org.springframework.transaction.support.TransactionTemplate) DataIntegrityViolationException(org.springframework.dao.DataIntegrityViolationException) DuplicateReferenceException(alfio.manager.support.DuplicateReferenceException)

Example 2 with PurchaseContextType

use of alfio.model.PurchaseContext.PurchaseContextType in project alf.io by alfio-event.

the class AdminReservationManager method updateReservation.

public Result<Boolean> updateReservation(PurchaseContextType purchaseContextType, String publicIdentifier, String reservationId, AdminReservationModification adminReservationModification, String username) {
    DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
    TransactionTemplate template = new TransactionTemplate(transactionManager, definition);
    return template.execute(status -> {
        try {
            Result<Boolean> result = purchaseContextManager.findBy(purchaseContextType, publicIdentifier).map(event -> ticketReservationRepository.findOptionalReservationById(reservationId).map(r -> performUpdate(reservationId, event, r, adminReservationModification, username)).orElseGet(() -> Result.error(ErrorCode.ReservationError.UPDATE_FAILED))).orElseGet(() -> Result.error(ErrorCode.ReservationError.NOT_FOUND));
            if (!result.isSuccess()) {
                log.debug("Application error detected eventName: {} reservationId: {}, username: {}, reservation: {}", publicIdentifier, reservationId, username, AdminReservationModification.summary(adminReservationModification));
                status.setRollbackOnly();
            }
            return result;
        } catch (Exception e) {
            log.error("Error during update of reservation eventName: {} reservationId: {}, username: {}, reservation: {}", publicIdentifier, reservationId, username, AdminReservationModification.summary(adminReservationModification));
            status.setRollbackOnly();
            return Result.error(singletonList(ErrorCode.custom("", e.getMessage())));
        }
    });
}
Also used : alfio.repository(alfio.repository) PaymentProxy(alfio.model.transaction.PaymentProxy) TemplateProcessor(alfio.controller.support.TemplateProcessor) StringUtils.firstNonBlank(org.apache.commons.lang3.StringUtils.firstNonBlank) RequiredArgsConstructor(lombok.RequiredArgsConstructor) AlfioMetadata(alfio.model.metadata.AlfioMetadata) StringUtils(org.apache.commons.lang3.StringUtils) Collections.singletonList(java.util.Collections.singletonList) UPDATE_TICKET(alfio.model.Audit.EventType.UPDATE_TICKET) ResultStatus(alfio.model.result.Result.ResultStatus) BigDecimal(java.math.BigDecimal) ErrorCode(alfio.model.result.ErrorCode) Pair(org.apache.commons.lang3.tuple.Pair) DefaultMessageSourceResolvable(org.springframework.context.support.DefaultMessageSourceResolvable) DataIntegrityViolationException(org.springframework.dao.DataIntegrityViolationException) DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) Triple(org.apache.commons.lang3.tuple.Triple) TICKET(alfio.model.Audit.EntityType.TICKET) StringUtils.trimToNull(org.apache.commons.lang3.StringUtils.trimToNull) Organization(alfio.model.user.Organization) Predicate(java.util.function.Predicate) Collectors(java.util.stream.Collectors) BinaryOperator(java.util.function.BinaryOperator) CANCEL_TICKET(alfio.model.Audit.EventType.CANCEL_TICKET) Stream(java.util.stream.Stream) PlatformTransactionManager(org.springframework.transaction.PlatformTransactionManager) alfio.model(alfio.model) UserRepository(alfio.repository.user.UserRepository) MapBindingResult(org.springframework.validation.MapBindingResult) java.util(java.util) MonetaryUtil.unitToCents(alfio.util.MonetaryUtil.unitToCents) MessageSourceManager(alfio.manager.i18n.MessageSourceManager) TransactionDefinition(org.springframework.transaction.TransactionDefinition) DuplicateReferenceException(alfio.manager.support.DuplicateReferenceException) PurchaseContextType(alfio.model.PurchaseContext.PurchaseContextType) MapSqlParameterSource(org.springframework.jdbc.core.namedparam.MapSqlParameterSource) Function(java.util.function.Function) alfio.util(alfio.util) Objects.requireNonNullElse(java.util.Objects.requireNonNullElse) Attendee(alfio.model.modification.AdminReservationModification.Attendee) DateTimeModification(alfio.model.modification.DateTimeModification) ReservationPriceCalculator(alfio.manager.system.ReservationPriceCalculator) TicketPriceContainer(alfio.model.decorator.TicketPriceContainer) ObjectUtils(org.apache.commons.lang3.ObjectUtils) Collections.singletonMap(java.util.Collections.singletonMap) TicketReservationStatus(alfio.model.TicketReservation.TicketReservationStatus) DateTimeModification.fromZonedDateTime(alfio.model.modification.DateTimeModification.fromZonedDateTime) TicketCategoryModification(alfio.model.modification.TicketCategoryModification) RESERVATION(alfio.model.Audit.EntityType.RESERVATION) Notification(alfio.model.modification.AdminReservationModification.Notification) TicketsInfo(alfio.model.modification.AdminReservationModification.TicketsInfo) User(alfio.model.user.User) Result(alfio.model.result.Result) Component(org.springframework.stereotype.Component) Validate(org.apache.commons.lang3.Validate) PaymentSpecification(alfio.manager.payment.PaymentSpecification) TransactionTemplate(org.springframework.transaction.support.TransactionTemplate) Log4j2(lombok.extern.log4j.Log4j2) Category(alfio.model.modification.AdminReservationModification.Category) Wrappers.optionally(alfio.util.Wrappers.optionally) EventUtil.generateEmptyTickets(alfio.util.EventUtil.generateEmptyTickets) AdminReservationModification(alfio.model.modification.AdminReservationModification) Transactional(org.springframework.transaction.annotation.Transactional) Assert(org.springframework.util.Assert) DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) TransactionTemplate(org.springframework.transaction.support.TransactionTemplate) DataIntegrityViolationException(org.springframework.dao.DataIntegrityViolationException) DuplicateReferenceException(alfio.manager.support.DuplicateReferenceException)

Aggregations

TemplateProcessor (alfio.controller.support.TemplateProcessor)2 MessageSourceManager (alfio.manager.i18n.MessageSourceManager)2 PaymentSpecification (alfio.manager.payment.PaymentSpecification)2 DuplicateReferenceException (alfio.manager.support.DuplicateReferenceException)2 ReservationPriceCalculator (alfio.manager.system.ReservationPriceCalculator)2 alfio.model (alfio.model)2 RESERVATION (alfio.model.Audit.EntityType.RESERVATION)2 TICKET (alfio.model.Audit.EntityType.TICKET)2 CANCEL_TICKET (alfio.model.Audit.EventType.CANCEL_TICKET)2 UPDATE_TICKET (alfio.model.Audit.EventType.UPDATE_TICKET)2 PurchaseContextType (alfio.model.PurchaseContext.PurchaseContextType)2 TicketReservationStatus (alfio.model.TicketReservation.TicketReservationStatus)2 TicketPriceContainer (alfio.model.decorator.TicketPriceContainer)2 AlfioMetadata (alfio.model.metadata.AlfioMetadata)2 AdminReservationModification (alfio.model.modification.AdminReservationModification)2 Attendee (alfio.model.modification.AdminReservationModification.Attendee)2 Category (alfio.model.modification.AdminReservationModification.Category)2 Notification (alfio.model.modification.AdminReservationModification.Notification)2 TicketsInfo (alfio.model.modification.AdminReservationModification.TicketsInfo)2 DateTimeModification (alfio.model.modification.DateTimeModification)2