Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }