public async Task <IActionResult> Register([FromBody] RegisterModel model)
        {
            // map model to entity
            var user = _mapper.Map <User>(model);

            //check if email already exists
            var existingUser = _unitOfWork.User.GetByEmail(model.Email);

            // check if user exists
            if (existingUser != null)
            {
                return(BadRequest(new { message = "Email already exists!" }));
            }

            try
            {
                byte[] passwordHash, passwordSalt;
                UserSecurity.CreatePasswordHash(model.Password, out passwordHash, out passwordSalt);

                user.PasswordHash = passwordHash;
                user.PasswordSalt = passwordSalt;

                // create user
                _unitOfWork.User.Add(user);
                return(Ok(await _unitOfWork.Complete()));
            }
            catch (AppException ex)
            {
                // return error message if there was an exception
                return(BadRequest(new { message = ex.Message }));
            }
        }