public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "sessions")] HttpRequestData req, CreateSessionDto 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 sessionContainer = await CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID); // Create new instance var session = new Session() { UserId = userId, SessionName = data.SessionName }; Task.WaitAll( // Save to database CosmosDb.CreateItemAsync <Session>(sessionContainer, session, session.UserId.ToString()), // Write id to response response.WriteAsJsonAsync(session.Id).AsTask() ); } 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, "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, "post", Route = "users/register")] HttpRequestData req, CreateUserDto data ) { // Create response var response = req.CreateResponse(); // Validate params var valid = Validate(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.email = @email") .WithParameter("@email", data.Email.ToLower()); var currentUser = await CosmosDb.GetItemByQueryAsync <User>(userContainer, query); if (currentUser == null) { // Create new instance var salt = Utils.GenerateSalt(); var user = new User() { Name = data.Name, Email = data.Email.ToLower(), Salt = salt, Password = Utils.HashPassword(data.Password, salt), }; var returnUser = new ReturnUserDto() { Id = user.Id, Name = user.Name, Email = user.Email }; Task.WaitAll( // Save to database CosmosDb.CreateItemAsync <User>(userContainer, user, user.Id.ToString()), // Write user to response response.WriteAsJsonAsync(returnUser).AsTask() ); } else { // Response duplicate message await response.WriteAsJsonAsync("Email is registered"); } } 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); }