Ejemplo n.º 1
0
        public ResponseContext Post(Dictionary <string, object> param)
        {
            RequestContext request = (RequestContext)param["request"];
            MtcgClient     client  = (MtcgClient)param["client"];

            //trade with existing deal
            if (!string.IsNullOrWhiteSpace(request.RequestedResource))
            {
                TradingDeal pendingDeal = null;
                if (!_marketController.TradingDealExists(request.RequestedResource, out pendingDeal))
                {
                    return(new ResponseContext(request, new KeyValuePair <StatusCode, object>(StatusCode.BadRequest, $"There is no open deal with the given id {request.RequestedResource}")));
                }

                if (pendingDeal.PublisherId == client.User.UserId)
                {
                    return(new ResponseContext(request, new KeyValuePair <StatusCode, object>(StatusCode.BadRequest, "You can't trade with yourself")));
                }

                Card cardToTrade = null;
                Guid cardGuid;
                if (string.IsNullOrWhiteSpace(request.Payload) || !Guid.TryParse(request.Payload, out cardGuid) ||
                    (cardToTrade = client.User.Stack.GetAllCards().FirstOrDefault(c => c.Guid.Equals(cardGuid))) == null)
                {
                    return(new ResponseContext(request, new KeyValuePair <StatusCode, object>(StatusCode.BadRequest, "You must provide a card id that you possess and want to trade")));
                }

                return(new ResponseContext(request, _marketController.ProcessTrade(pendingDeal, cardToTrade, client)));
            }

            //create new deal
            TradingDeal deal = JsonSerializer.Deserialize <TradingDeal>(request.Payload);

            if (deal == null || string.IsNullOrWhiteSpace(deal.RequestedElement) || string.IsNullOrWhiteSpace(deal.RequestedType))
            {
                return(new ResponseContext(request,
                                           new KeyValuePair <StatusCode, object>(StatusCode.BadRequest,
                                                                                 "All properties must be set: CardId, RequestedElement, MinimumDamage, RequestedType")));
            }
            if (!client.User.Stack.GetAllCards().Any(c => c.Guid == deal.CardId))
            {
                return(new ResponseContext(request,
                                           new KeyValuePair <StatusCode, object>(StatusCode.BadRequest,
                                                                                 "Nice try, but you don't have this card ;)")));
            }
            deal.PublisherId = client.User.UserId;
            return(new ResponseContext(request, _marketController.AddTradingDeal(deal)));
        }