public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "sessions")] HttpRequestData req ) { // Create response var response = req.CreateResponse(); // Get user id var userId = Utils.GetUserId(req.Headers); // Validate params var valid = Validate(userId); 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") .WithParameter("@userId", userId); var sessions = await CosmosDb.GetItemsByQueryAsync <Session>(sessionContainer, query); if (sessions != null) { var sortedSessions = sessions.OrderByDescending(session => session.StartDateTime).ToList(); // Write items to response await response.WriteAsJsonAsync(sortedSessions); } else { // Response not found message await response.WriteAsJsonAsync("Sessions 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); }
public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "sessions/{sessionIdString}/snapshots")] HttpRequestData req, string sessionIdString ) { // Create response var response = req.CreateResponse(); // Validate params Guid sessionId; var valid = ValidateAndTryParse(sessionIdString, out sessionId); if (valid.Item1) { try { // Get container var snapshotContainer = await CosmosDb.GetContainerAsync(CosmosDb.SNAPSHOT_CONTAINER_ID); // Get items var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.sessionId = @sessionId") .WithParameter("@sessionId", sessionId); var snapshots = await CosmosDb.GetItemsByQueryAsync <Snapshot>(snapshotContainer, query); if (snapshots != null) { // Write items to response await response.WriteAsJsonAsync(snapshots); } else { // Response not found message await response.WriteAsJsonAsync("Snapshots 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); }
public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "sessions/{sessionIdString}")] HttpRequestData req, string sessionIdString ) { // 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); if (valid.Item1) { try { // Start tasks var getSessionContainerTask = CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID); var getSnapshotContainerTask = CosmosDb.GetContainerAsync(CosmosDb.SNAPSHOT_CONTAINER_ID); // Wait all tasks to complete Task.WaitAll( getSessionContainerTask, getSnapshotContainerTask ); // Get task results var sessionContainer = getSessionContainerTask.Result; var snapshotContainer = getSnapshotContainerTask.Result; var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.sessionId = @sessionId") .WithParameter("@sessionId", sessionId); var snapshots = await CosmosDb.GetItemsByQueryAsync <Snapshot>(snapshotContainer, query); var snapshotIds = snapshots.Select(snapshot => snapshot.Id.ToString()).ToList(); Task.WaitAll( // Delete item CosmosDb.DeleteItemsByIdsAsync <Snapshot>(snapshotContainer, snapshotIds, sessionId.ToString()), CosmosDb.DeleteItemByIdAsync <Session>(sessionContainer, sessionId.ToString(), userId.ToString()), // Response delete successful response.WriteAsJsonAsync("Deleted session").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); }