public async Task <string> PostGameResult() { // Get the game and get the moves var gameId = this.ActionContext.Request.Headers.GetValues("GameId").First(); var gameModel = this.context.POPpicGames.Where(g => g.Id == gameId).FirstOrDefault(); var gameMoves = this.context.POPpicGameMoves.Where(m => m.GameId == gameId).ToList(); // var imageStream = await this.ActionContext.Request.Content.ReadAsStreamAsync(); string fullsizeUrl, thumbnailUrl; var urls = await UploadLoserImage(this.ActionContext.Request.Content, gameId); fullsizeUrl = urls.Key; thumbnailUrl = urls.Value; if (gameMoves.Count < 1) { return("Not enough game moves"); } // Create the result and save it to the DB POPpicGameResults result = new POPpicGameResults(); result.Id = Guid.NewGuid().ToString(); result.GameId = gameId; result.ImageUrl = fullsizeUrl; result.LoserId = gameMoves.Last().UserId; result.LoserDuration = DurationForPlayer(result.LoserId, gameMoves); result.LoserNumberOfMoves = NumberOfMovesForPlayer(result.LoserId, gameMoves); result.WinnerId = gameModel.RequesterId == result.LoserId ? gameModel.ResponderId : gameModel.RequesterId; result.WinnerDuration = DurationForPlayer(result.WinnerId, gameMoves); result.WinnerNumberOfMoves = NumberOfMovesForPlayer(result.WinnerId, gameMoves); this.context.POPpicGameResults.Add(result); // Next ned to update the players who won/lost var winnerModel = this.context.POPpicUsers.Where(u => u.Id == result.WinnerId).First(); winnerModel.Wins++; winnerModel.TimePressed.AddTicks(result.WinnerDuration.Ticks); winnerModel.OpponentTimePressed.AddTicks(result.LoserDuration.Ticks); var loserModel = this.context.POPpicUsers.Where(u => u.Id == result.LoserId).First(); loserModel.Loses++; loserModel.TimePressed.AddTicks(result.LoserDuration.Ticks); loserModel.OpponentTimePressed.AddTicks(result.WinnerDuration.Ticks); loserModel.ProfilePictureUrl = thumbnailUrl; try { context.SaveChanges(); } catch (Exception e) { } // TODO - send push notifications return(CrossPlatformUtilities.SerializeItem <POPpicGameResults>(result)); }
public string GetMe() { string userId = Utilities.GetUserId(this.User); var currentUser = this.context.POPpicUsers.FirstOrDefault(u => u.Id == userId); if (currentUser == null) { currentUser = Utilities.InitializeNewUser(this.User, this.Services.Log); currentUser = context.POPpicUsers.Add(currentUser); context.SaveChanges(); } string output = CrossPlatformUtilities.SerializeItem <POPpicUser>(currentUser); return(output); }