public HttpResponseMessage RedeemTicket(RedeemTicketRequest request) { RedeemTicketReponse responseData = null; try { //Authenticate API key long?hostId = HostServices.GetCallerHostId(); if (!hostId.HasValue) { Log.Warn(ResponseMessages.InvalidAPIKey); return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.InvalidAPIKey, ResponseMessages.InvalidAPIKey))); } //Validate input if (request == null || string.IsNullOrEmpty(request.TicketNumber)) { return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.InvalidParam, ResponseMessages.InvalidParam))); } //Perform transaction AdmissionServices admissionService = new AdmissionServices(); string status = null; responseData = admissionService.UseTicket(hostId.Value, request.TicketNumber, out status); if (status == RedeemTicketStatuses.TicketNotFound) { return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.Failed, "TicketNotFound"))); } else if (status == RedeemTicketStatuses.TicketAlreadyUsed) { return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.Failed, "TicketAlreadyUsed"))); } else if (status == RedeemTicketStatuses.TicketIsInactive) { return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.Failed, "TicketIsInactive"))); } else if (status == RedeemTicketStatuses.Success) { return(Request.CreateResponse(new GenericResponse(responseData, ResponseCodes.Success, ResponseMessages.Success))); } else { Log.Error("Unrecognized status: " + status); return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.Error, ResponseMessages.Error))); } } catch (Exception ex) { Log.Exception(ex); return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.Error, ResponseMessages.Error))); } }
public RedeemTicketReponse UseTicket(long hostId, string ticketNo, out string status) { RedeemTicketReponse result = null; //Validate if ticket exists var ticket = GetTicketByTicketNo(hostId, ticketNo); if (ticket == null) { status = RedeemTicketStatuses.TicketNotFound; return(null); } //Check ticket status if (ticket.Status == TicketStatuses.Used) { status = RedeemTicketStatuses.TicketAlreadyUsed; return(null); } else if (ticket.Status != TicketStatuses.Active) { status = RedeemTicketStatuses.TicketIsInactive; return(null); } //Update ticket status UpdateTicketStatus(ticket.TicketId.Value, TicketStatuses.Used); //Commit to blockchain ContractApi blockchainContract = new ContractApi(); blockchainContract.RedeemTicket(ticket.TicketNo); status = BookEventStatuses.Success; result = new RedeemTicketReponse(); result.EventTitle = ticket.EventTitle; result.TierTitle = ticket.TierTitle; result.PaidPrice = ticket.PaidPrice; result.NewTicketStatus = TicketStatuses.Used; return(result); }