Example #1
0
        public static (bool isAuthorized, Administrator foundAdministrator) AuthorizeUser(string username, string password)
        {
            using (var dbContext = new HappyMeterDatabaseContext())
            {
                var foundAdministrator = dbContext.Administrators.FirstOrDefault(a => a.Username == username);
                if (foundAdministrator == null)
                {
                    if (!dbContext.Administrators.Any())
                    {
                        // First login ever and currently no user created
                        var createdAdministrator = CreateUser(username, password);
                        dbContext.Administrators.Add(createdAdministrator);
                        dbContext.SaveChanges();
                        return(true, createdAdministrator);
                    }

                    // Wrong username
                    return(false, null);
                }

                if (!VerifyPassword(password, foundAdministrator.PasswordHash))
                {
                    return(false, null);
                }

                return(true, foundAdministrator);
            }
        }
        public async Task <IHttpActionResult> AddEmotionalState([FromBody] AddEmotionalStateDto addEmotionalStateDto)
        {
            // Validate parameters
            if (!ModelState.IsValid || addEmotionalStateDto == null)
            {
                return(BadRequest());
            }

            using (var dbContext = new HappyMeterDatabaseContext())
            {
                // The provided Emotion has to exist and be active
                if (!await dbContext.Emotions.AnyAsync(e => e.Id == addEmotionalStateDto.EmotionId && e.IsActive))
                {
                    return(BadRequest());
                }


                dbContext.EmotionalStates.Add(new EmotionalState
                {
                    EmotionId   = addEmotionalStateDto.EmotionId,
                    Comment     = addEmotionalStateDto.Comment,
                    CreatedDate = DateTime.UtcNow
                });

                await dbContext.SaveChangesAsync();

                return(Ok());
            }
        }
        public async Task <IHttpActionResult> AddEmojiFromFaceAnalysis([FromBody] AddEmojiFromFaceAnalysisDto addEmojiFromFaceAnalysisDto)
        {
            // Validate parameters
            if (!ModelState.IsValid || addEmojiFromFaceAnalysisDto == null)
            {
                return(BadRequest());
            }

            using (var dbContext = new HappyMeterDatabaseContext())
            {
                // The provided Emotion has to exist (but doesn't have to be active)
                var fittingEmoji =
                    await dbContext.Emotions.FirstOrDefaultAsync(e => e.Smiley == addEmojiFromFaceAnalysisDto.EmojiCode);

                if (fittingEmoji == null)
                {
                    return(BadRequest());
                }

                dbContext.EmotionalStates.Add(new EmotionalState
                {
                    EmotionId   = fittingEmoji.Id,
                    CreatedDate = DateTime.UtcNow
                });

                await dbContext.SaveChangesAsync();

                return(Ok());
            }
        }
Example #4
0
        public async Task <IHttpActionResult> SetSmileyForEmotion([FromBody] ChangeEmotionSmileyDto changeEmotionSmileyDto)
        {
            // Validate parameters
            if (!ModelState.IsValid || changeEmotionSmileyDto == null)
            {
                return(BadRequest());
            }

            using (var dbContext = new HappyMeterDatabaseContext())
            {
                if (await dbContext.Emotions.AnyAsync(e => e.Smiley == changeEmotionSmileyDto.NewSmileyCode))
                {
                    return(BadRequest());
                }

                var data = await dbContext.Emotions.FindAsync(changeEmotionSmileyDto.EmotionId);

                if (data == null)
                {
                    return(NotFound());
                }

                data.Smiley = changeEmotionSmileyDto.NewSmileyCode;

                await dbContext.SaveChangesAsync();

                return(Ok());
            }
        }
Example #5
0
        public async Task <IHttpActionResult> AddNewEmotion([FromBody] AddNewEmotionDto addNewEmotionDto)
        {
            // Validate parameters
            if (!ModelState.IsValid || addNewEmotionDto == null)
            {
                return(BadRequest());
            }

            using (var dbContext = new HappyMeterDatabaseContext())
            {
                if (await dbContext.Emotions.AnyAsync(e => e.Smiley == addNewEmotionDto.NewSmileyCode))
                {
                    return(BadRequest());
                }

                dbContext.Emotions.Add(new Emotion
                {
                    Smiley   = addNewEmotionDto.NewSmileyCode,
                    IsActive = true
                });

                await dbContext.SaveChangesAsync();

                return(Ok());
            }
        }
        public async Task <IHttpActionResult> SetNewUsername([FromBody] SetUsernameDto setUsernameDto)
        {
            // Validate parameters
            if (!ModelState.IsValid || setUsernameDto == null)
            {
                return(BadRequest());
            }

            var authorizedAdministrator =
                (Administrator)ActionContext.Request.Properties[AuthorizationConstants.UserInformationKey];

            using (var dbContext = new HappyMeterDatabaseContext())
            {
                if (await dbContext.Administrators.AnyAsync(a => a.Username == setUsernameDto.NewUsername))
                {
                    return(BadRequest());
                }

                dbContext.Administrators.Attach(authorizedAdministrator);

                authorizedAdministrator.UpdateUsername(setUsernameDto.NewUsername);

                await dbContext.SaveChangesAsync();

                return(Ok());
            }
        }
Example #7
0
        public async Task <IHttpActionResult> AllEmotions()
        {
            using (var dbContext = new HappyMeterDatabaseContext())
            {
                var data = await dbContext.Emotions.ToListAsync();

                return(Ok(data));
            }
        }
Example #8
0
        public async Task <IHttpActionResult> ActiveEmotions()
        {
            using (var dbContext = new HappyMeterDatabaseContext())
            {
                var data = await dbContext.Emotions
                           .Where(e => e.IsActive)
                           .Select(e => new ReducedEmotion
                {
                    Id         = e.Id,
                    SmileyCode = e.Smiley
                })
                           .ToListAsync();

                return(Ok(data));
            }
        }
        public async Task <IHttpActionResult> GroupedEmotionalStatesWithinRange([Required] DateTimeOffset from, [Required] DateTimeOffset to)
        {
            // Validate parameters
            if (!ModelState.IsValid || from > to || from.Offset != to.Offset)
            {
                return(BadRequest());
            }

            using (var dbContext = new HappyMeterDatabaseContext())
            {
                var data = await dbContext.EmotionalStates
                           .Where(e => e.CreatedDate >= from.UtcDateTime && e.CreatedDate <= to.UtcDateTime)
                           .Select(e => new { e.Id, e.CreatedDate, e.Comment, e.Emotion.Smiley })
                           .ToListAsync();

                var offset = from.Offset;

                var groupedData = data
                                  .GroupBy(e => e.CreatedDate.Add(offset).Date)
                                  .Select(dateGroup => new EmotionalStateHistoryItem
                {
                    Date            = new DateTimeOffset(dateGroup.Key, offset),
                    EmotionalStates = dateGroup.GroupBy(e => e.Smiley).OrderBy(g => g.Key).Select(g => new GroupedEmotionalState
                    {
                        SmileyCode = g.Key,
                        Comments   = g.Where(e => !string.IsNullOrWhiteSpace(e.Comment)).Select(e => new CommentWithPostdate
                        {
                            Id       = e.Id,
                            PostDate = e.CreatedDate,
                            Comment  = e.Comment
                        }).ToList(),
                        Count = g.Count()
                    }).ToList()
                });

                return(Ok(groupedData));
            }
        }
Example #10
0
        public async Task <IHttpActionResult> SetActiveForEmotion([FromBody] ChangeEmotionIsActiveDto changeEmotionIsActiveDto)
        {
            // Validate parameters
            if (!ModelState.IsValid || changeEmotionIsActiveDto == null)
            {
                return(BadRequest());
            }

            using (var dbContext = new HappyMeterDatabaseContext())
            {
                var data = await dbContext.Emotions.FindAsync(changeEmotionIsActiveDto.EmotionId);

                if (data == null)
                {
                    return(NotFound());
                }

                data.IsActive = changeEmotionIsActiveDto.IsActive;

                await dbContext.SaveChangesAsync();

                return(Ok());
            }
        }