コード例 #1
0
        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)));
            }
        }
コード例 #2
0
        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);
        }