public async Task <IActionResult> GetApplicationUser(string id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var getApplicationUser = await _repo.GetFirstAsync <ApplicationUser>(x => x.Id.Equals(id), null, nameof(ApplicationUser.Roles));

            if (!getApplicationUser.Success)
            {
                return(NotFound());
            }

            var applicationUser = getApplicationUser.Data;
            var allRoles        = _roleManager.Roles.ToList();

            var roles = applicationUser.Roles.Join(allRoles, ur => ur.RoleId, r => r.Id, (userRoles, role) => new string(role.Name.ToCharArray()));

            var userDto = new UserPreviewDto
            {
                Id          = applicationUser.Id,
                FirstName   = applicationUser.FirstName,
                LastName    = applicationUser.LastName,
                Email       = applicationUser.Email,
                UserName    = applicationUser.UserName,
                DateOfBirth = applicationUser.DateOfBirth,
                Roles       = roles.ToList()
            };

            return(Ok(userDto));
        }
        public async Task <IActionResult> PutApplicationUser([FromRoute] string id, [FromBody] UserPreviewDto userDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            try
            {
                if (id != userDto.Id)
                {
                    return(BadRequest());
                }

                var user = await _userManager.FindByIdAsync(id);

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

                user.FirstName   = userDto.FirstName;
                user.LastName    = userDto.LastName;
                user.DateOfBirth = userDto.DateOfBirth;

                var update = await _userManager.UpdateAsync(user);

                if (update.Succeeded)
                {
                    return(Ok(true));
                }

                return(Ok(false));
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }