public IActionResult UploadPhotoAndStartSession([FromBody] PhotoRequest photoRequest, [FromServices] UserManager <ApplicationUser> userManager, [FromServices] SessionTracker sessionTracker, [FromServices] IImageDecryptor imageDecryptor, [FromServices] RecognitionTaskQueue taskQueue, [FromServices] IConfiguration configuration, [FromServices] AnalyticsAgent agent) { using (_logger.BeginScope(nameof(UploadPhotoAndStartSession))) { //validate request if (photoRequest == null) { _logger.LogError("Attempt to start a session because of null mobile photo request."); return(BadRequest(new { message = "Error: something in your request is empty" })); } try { //try start new session var session = sessionTracker.StartSession(Convert.ToInt32(userManager.GetUserId(HttpContext.User)), photoRequest.TimeStamp); //decrypt image and send to db _logger.LogInformation($"Trying decrypt image..."); var decrypredImage = imageDecryptor.Decrypt(Convert.FromBase64String(photoRequest.Image)); var image = new Photo(session.SessionID, decrypredImage, photoRequest.TimeStamp); _photoRepository.Add(image); _logger.LogInformation($"Ecrypted image was decrypted and saved to db."); //send to analytics task queue _logger.LogInformation($"Trying send photoId to RecognitionTaskQueue"); string modelName = configuration.GetSection("ModelName").Value; // get model name for analytics taskQueue.Enqueue(new RecognitionTask(modelName, image.PhotoID)); _logger.LogInformation("Photo was sent to RecognitionTaskQueue"); var sessionResponse = new SessionResponse(session.SessionID); return(Ok(sessionResponse)); } catch (Exception ex) { _logger.LogError("Exception caught: {0}, {1}", ex.Message, ex.StackTrace); return(StatusCode(409, new { message = ex.Message })); } } }
public async void GetSessionId() { //Arrange var user = new ApplicationUser { UserName = "******", Email = "*****@*****.**" }; await app.UserManager.CreateAsync(user, "UserTest@123"); await app.SetUser(user); var testSession = new Session(user.Id, DateTime.UtcNow, DateTime.UtcNow, SessionStatus.FINISHED); testSession.SessionID = 1; var testPhoto = new Photo(testSession.SessionID, new byte[] { 0x20, 0x20, 0x20 }, DateTime.UtcNow); testPhoto.PhotoID = 2; IImageDecryptor decryptor = Mock.Of <IImageDecryptor>( id => id.Decrypt(It.IsAny <byte[]>()) == testPhoto.Image); RecognitionTaskQueue taskQueue = new RecognitionTaskQueue(new LoggerFactory()); //Act PhotoController controller = CreateController(testSession, testPhoto); var result = (controller.UploadPhotoAndStartSession( new PhotoRequest("MQ==", DateTime.UtcNow), app.UserManager, new SessionTracker(new LoggerFactory(), sessionRepository, conf, new SessionValidator(new LoggerFactory())), decryptor, taskQueue, conf, null) as OkObjectResult).Value; var resultValue = result.GetType().GetProperty("SessionId").GetValue(result) as string; //Assert Assert.Equal <int>(0, Convert.ToInt32(resultValue)); }