public UserForDetailed UpdateUser(int id, UserForInsert user)
        {
            var userToUpdate = GetById(id);

            _mapper.Map(user, userToUpdate);

            if (user.Password != null)
            {
                userToUpdate.Password = EncryptPassword(user.Password);
            }
            userToUpdate.Role = _context.Roles.FirstOrDefault(r => string.Equals(r.Name, user.Role));
            userToUpdate.Faculty = _context.Faculties.Find(user.Faculty.Id);

            if(user.Photo != null)
            {
                if (userToUpdate.PhotoPublicId != null)
                {
                    var deleteParams = new DeletionParams(userToUpdate.PhotoPublicId);
                    _cloudinary.Destroy(deleteParams);
                }

                var uploadResult = UploadPhoto(user.Photo);
                userToUpdate.PhotoUrl = uploadResult.Url.ToString();
                userToUpdate.PhotoPublicId = uploadResult.PublicId;
            }

            _context.SaveChanges();

            return _mapper.Map<UserForDetailed>(GetById(id));
        }
        public UserForDetailed AddUser(UserForInsert user)
        {
            if (_service.UsernameExists(user.Username))
            {
                throw new BadRequestException("Username đã tồn tại. Vui lòng nhập Username khác");
            }

            var createdUser = _service.AddUser(user);

            return(createdUser);
        }
        public UserForDetailed AddUser(UserForInsert user)
        {
            var userToAdd = _mapper.Map<User>(user);
            userToAdd.Password = EncryptPassword(user.Password);
            userToAdd.Role = _context.Roles.FirstOrDefault(r => string.Equals(r.Name, user.Role));
            userToAdd.Faculty = _context.Faculties.Find(user.Faculty.Id);
            userToAdd.PhotoUrl = null;
            userToAdd.PhotoPublicId = null;

            Add(userToAdd);

            return _mapper.Map<UserForDetailed>(userToAdd);
        }
        public UserForDetailed UpdateUser(int id, UserForInsert user)
        {
            var existedUser = _service.GetById(id)
                              ?? throw new BadRequestException("Người dùng không tồn tại");

            if (!string.Equals(user.Username, existedUser.Username))
            {
                throw new BadRequestException("Không thể thay đổi username");
            }

            var updatedUser = _service.UpdateUser(id, user);

            return(updatedUser);
        }
        public UserForDetailed UpdateUserInfo(int id, UserForInsert user)
        {
            if (Convert.ToInt32(User.FindFirst(ClaimTypes.NameIdentifier).Value) != id)
            {
                throw new ForbiddenException("Không có quyền chỉnh sửa thông tin người dùng khác");
            }

            if (!string.Equals(user.Username, _service.GetById(id).Username))
            {
                throw new BadRequestException("Không thể thay đổi username");
            }

            var updatedUser = _service.UpdateUser(id, user);

            return(updatedUser);
        }