Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }