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))); }