public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "sessions/{sessionIdString}/snapshots")] HttpRequestData req, string sessionIdString, CreateSnapshotDto data ) { // Create response var response = req.CreateResponse(); // Get user id var userId = Utils.GetUserId(req.Headers); // Validate params Guid sessionId; var valid = ValidateAndTryParse(userId, sessionIdString, out sessionId, data); if (valid.Item1) { try { // Start tasks var getPerceivedEmotionTask = CognitiveServices.GetPerceivedEmotionAsync(data.ImageBase64); var getSnapshotContainerTask = CosmosDb.GetContainerAsync(CosmosDb.SNAPSHOT_CONTAINER_ID); var getSessionContainerTask = CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID); // Wait all tasks to complete Task.WaitAll( getPerceivedEmotionTask, getSnapshotContainerTask, getSessionContainerTask ); // Get task results var perceivedEmotion = getPerceivedEmotionTask.Result; var snapshotContainer = getSnapshotContainerTask.Result; var sessionContainer = getSessionContainerTask.Result; // Check if not null if (perceivedEmotion != null) { // Get item var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.userId = @userId AND c.id = @sessionId") .WithParameter("@userId", userId) .WithParameter("@sessionId", sessionId); var session = await CosmosDb.GetItemByQueryAsync <Session>(sessionContainer, query); if (session != null) { // Update item session.LastUpdatedDateTime = DateTime.Now; // Create new instance var snapshot = new Models.Snapshot() { SessionId = sessionId, PerceivedEmotion = perceivedEmotion }; Task.WaitAll( // Save to database CosmosDb.CreateItemAsync <Snapshot>(snapshotContainer, snapshot, snapshot.SessionId.ToString()), CosmosDb.UpdateItemAsync <Session>(sessionContainer, session, session.Id.ToString(), session.UserId.ToString()), // Response save successful response.WriteAsJsonAsync(snapshot).AsTask() ); } else { // Response not found message await response.WriteAsJsonAsync("Session not found"); } } else { // Response no result message await response.WriteAsJsonAsync("No faces detected"); } } catch (CosmosException ex) { // Response error message await response.WriteAsJsonAsync(ex.Message); // Set http status code response.StatusCode = (HttpStatusCode)ex.Status; } } else { // Response invalid await response.WriteAsJsonAsync(valid.Item2); // Set http status code response.StatusCode = HttpStatusCode.BadRequest; } return(response); }
public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "put", Route = "users")] HttpRequestData req, UpdateUserDto data ) { // Create response var response = req.CreateResponse(); // Get user id var userId = Utils.GetUserId(req.Headers); // Validate params var valid = Validate(userId, data); if (valid.Item1) { try { // Get container var userContainer = await CosmosDb.GetContainerAsync(CosmosDb.USER_CONTAINER_ID); // Get item var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.id = @userId") .WithParameter("@userId", userId); var user = await CosmosDb.GetItemByQueryAsync <User>(userContainer, query); if (user != null && Utils.VerifyPassword(data.Password, user.Salt, user.Password)) { // Update item user.Name = data.Name; if (data.UpdatePassword) { user.Salt = Utils.GenerateSalt(); user.Password = Utils.HashPassword(data.NewPassword, user.Salt); } Task.WaitAll( // Save to database CosmosDb.UpdateItemAsync <User>(userContainer, user, user.Id.ToString(), user.Id.ToString()), // Response update successful response.WriteAsJsonAsync("Updated user").AsTask() ); } else { // Response not found message await response.WriteAsJsonAsync("Incorrect password"); } } catch (CosmosException ex) { // Response error message await response.WriteAsJsonAsync(ex.Message); // Set http status code response.StatusCode = (HttpStatusCode)ex.Status; } } else { // Response invalid await response.WriteAsJsonAsync(valid.Item2); // Set http status code response.StatusCode = HttpStatusCode.BadRequest; } return(response); }
public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "put", Route = "sessions/{sessionIdString}")] HttpRequestData req, string sessionIdString, UpdateSessionDto data ) { // Create response var response = req.CreateResponse(); // Get user id var userId = Utils.GetUserId(req.Headers); // Validate params Guid sessionId; var valid = ValidateAndTryParse(userId, sessionIdString, out sessionId, data); if (valid.Item1) { try { // Get container var sessionContainer = await CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID); // Get item var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.userId = @userId AND c.id = @sessionId") .WithParameter("@userId", userId) .WithParameter("@sessionId", sessionId); var session = await CosmosDb.GetItemByQueryAsync <Session>(sessionContainer, query); if (session != null) { // Update item session.SessionName = data.SessionName; session.Note = data.Note; Task.WaitAll( // Save to database CosmosDb.UpdateItemAsync <Session>(sessionContainer, session, session.Id.ToString(), session.UserId.ToString()), // Response update successful response.WriteAsJsonAsync("Updated session").AsTask() ); } else { // Response not found message await response.WriteAsJsonAsync("Session not found"); } } catch (CosmosException ex) { // Response error message await response.WriteAsJsonAsync(ex.Message); // Set http status code response.StatusCode = (HttpStatusCode)ex.Status; } } else { // Response invalid await response.WriteAsJsonAsync(valid.Item2); // Set http status code response.StatusCode = HttpStatusCode.BadRequest; } return(response); }