public async Task <IActionResult> Post([FromBody] StageLogPostDTO dto) { Console.WriteLine("stagelogs POST entered."); var game = _context.Game.Where(x => x.game_id == dto.game_id).FirstOrDefault(); if (game == null) { return(NotFound("Game not found. " + dto.game_id)); } // Add a stage log record StageLog newStageLog = new StageLog { game_id = dto.game_id, stage_id = dto.stage_id, objects_score = 0, time_score = 0, clear_score = 0, stage_score = 0, total_score = 0, completed_yn = "N", start_date = DateTime.Now }; var value = _context.StageLog.Add(newStageLog); await _context.SaveChangesAsync(); var gameResult = _context.GameResult.Where(x => x.game_id == dto.game_id).FirstOrDefault(); if (gameResult == null) { GameResult newGameResult = new GameResult { game_id = dto.game_id, name = game.name, total_score = 0, total_rank = 0, total_found_objects = 0, total_playtime = 0 }; _context.GameResult.Add(newGameResult); await _context.SaveChangesAsync(); } return(Ok(dto.game_id)); }
public async Task <IActionResult> Post([FromBody] GameStagePostImageDTO dto) { Console.WriteLine("PostImage entered."); string bucketName = "reinvent-gottalent"; // Retrieving image data // ex: game/10/Happiness.jpg string keyName = string.Format("game/{0}/{1}.jpg", dto.gameId, dto.actionType); string croppedKeyName = string.Format("game/{0}/{1}_cropped.jpg", dto.gameId, dto.actionType); byte[] imageByteArray = Convert.FromBase64String(dto.base64Image); if (imageByteArray.Length == 0) { return(BadRequest("Image length is 0.")); } StageLog newStageLog = null; using (MemoryStream ms = new MemoryStream(imageByteArray)) { // call Rekonition API FaceDetail faceDetail = await RekognitionUtil.GetFaceDetailFromStream(this.RekognitionClient, ms); // Crop image to get face only System.Drawing.Image originalImage = System.Drawing.Image.FromStream(ms); System.Drawing.Image croppedImage = GetCroppedFaceImage(originalImage, faceDetail.BoundingBox); MemoryStream croppedms = new MemoryStream(); croppedImage.Save(croppedms, ImageFormat.Jpeg); // Upload image to S3 bucket //await Task.Run(() => S3Util.UploadToS3(this.S3Client, bucketName, keyName, ms)); await Task.Run(() => S3Util.UploadToS3(this.S3Client, bucketName, keyName, croppedms)); // Get a specific emotion score double emotionScore = 0.0f; if (dto.actionType != "Profile") { emotionScore = RekognitionUtil.GetEmotionScore(faceDetail.Emotions, dto.actionType); } int evaluatedAge = (faceDetail.AgeRange.High + faceDetail.AgeRange.Low) / 2; string evaluatedGender = faceDetail.Gender.Value; // Database update newStageLog = new StageLog { game_id = dto.gameId, action_type = dto.actionType, score = emotionScore, file_loc = keyName, age = evaluatedAge, gender = evaluatedGender, log_date = DateTime.Now }; var value = _context.StageLog.Add(newStageLog); await _context.SaveChangesAsync(); } // Send response string signedURL = S3Util.GetPresignedURL(this.S3Client, bucketName, keyName); newStageLog.file_loc = signedURL; return(Ok(newStageLog)); }