public HttpResponseMessage ClaimEarnings(ClaimEarningsRequest request) { ClaimEarningsResponse 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.ReferenceId)) { return(Request.CreateResponse(new GenericResponse(null, ResponseCodes.InvalidParam, ResponseMessages.InvalidParam))); } //Perform transaction EventsServices eventsService = new EventsServices(); string status = null; responseData = eventsService.ClaimEarnings(hostId.Value, request, out status); if (status == ClaimEarningsStatuses.EventNotFound) { return(Request.CreateResponse(new GenericResponse(null, ClaimEarningsStatuses.EventNotFound, "EventNotFound"))); } else if (status == ClaimEarningsStatuses.EventNotStarted) { return(Request.CreateResponse(new GenericResponse(null, ClaimEarningsStatuses.EventNotStarted, "Event has not started. Event start date must be over before earnings for the event can be claimed."))); } else if (status == ClaimEarningsStatuses.EventAlreadyClaimed) { return(Request.CreateResponse(new GenericResponse(null, ClaimEarningsStatuses.EventAlreadyClaimed, "EventAlreadyClaimed"))); } else if (status == ClaimEarningsStatuses.EventAlreadyCancelled) { return(Request.CreateResponse(new GenericResponse(null, ClaimEarningsStatuses.EventAlreadyCancelled, "EventAlreadyCancelled"))); } else if (status == ClaimEarningsStatuses.HostNotFound) { return(Request.CreateResponse(new GenericResponse(null, ClaimEarningsStatuses.HostNotFound, "HostNotFound"))); } else if (status == ClaimEarningsStatuses.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 ClaimEarningsResponse ClaimEarnings(long hostId, ClaimEarningsRequest value, out string status) { ClaimEarningsResponse result = null; //Get event var eventInfo = GetEventByRef(hostId, value.ReferenceId); if (eventInfo == null) { status = ClaimEarningsStatuses.EventNotFound; return(null); } //Check event status if (eventInfo.Status == EventStatuses.Cancelled) { status = ClaimEarningsStatuses.EventAlreadyCancelled; return(null); } if (eventInfo.Status == EventStatuses.Closed) { status = ClaimEarningsStatuses.EventAlreadyClaimed; return(null); } //Check if event has already started if (DateTime.UtcNow < eventInfo.StartDate.Value) { status = ClaimEarningsStatuses.EventNotStarted; return(null); } //Get host HostServices hostServices = new HostServices(); var host = hostServices.GetHostInfoById(hostId); if (host == null) { status = ClaimEarningsStatuses.HostNotFound; return(null); } //Transfer event wallet balance to host wallet WalletServices walletServices = new WalletServices(); walletServices.Transfer(eventInfo.WalletAddress, host.WalletAddress, eventInfo.WalletBalance.Value, null, "Claim"); //Update event status UpdateEventStatusRequest req = new UpdateEventStatusRequest(); req.ReferenceId = eventInfo.ReferenceId; req.NewStatus = EventStatuses.Closed; UpdateEventStatus(hostId, req); //Commit to blockchain ContractApi blockchainContract = new ContractApi(); blockchainContract.ClaimEarnings(eventInfo.EventUniqueId); status = ClaimEarningsStatuses.Success; result = new ClaimEarningsResponse(); result.EventTitle = eventInfo.Title; result.Earnings = eventInfo.WalletBalance.Value; return(result); }