public async Task <IActionResult> CreateUser([FromBody] VmUserCreate vmUserCreate)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    User createdUser = await _userService.CreateUser(vmUserCreate);

                    VmUser vmUser = _mapper.Map <VmUser>(createdUser);
                    return(Ok(DataMessage.Data(vmUser)));
                }
                catch (AppException ex)
                {
                    return(BadRequest(ex.ReturnBadRequest()));
                }
                catch (Exception ex)
                {
                    return(BadRequest(AppException.ReturnBadRequest(ex.Message)));
                }
            }
            else
            {
                return(BadRequest(AppException.ReturnBadRequest(ModelState)));
            }
        }
        public async Task <User> CreateUser(VmUserCreate vmUserCreate)
        {
            #region Validate Username
            User similerUser = await UnitOfWork.UsersRepository.Where(user => user.Username == vmUserCreate.Username).FirstOrDefaultAsync();

            if (similerUser != null)
            {
                throw new AppException(Errors.E_USERNAME_IS_TAKEN, new { vmUserCreate.Username }, AppObjects.USERNAME);
            }
            #endregion

            User user = new()
            {
                Name     = vmUserCreate.Name,
                Username = vmUserCreate.Username,
                Role     = AppRole.USER
            };
            user.Password = _securityService.CreatePasswordHash(vmUserCreate.Password);
            await UnitOfWork.UsersRepository.AddAsync(user);

            await UnitOfWork.SaveChangesAsync();

            return(user);
        }