diff --git a/argilla-server/src/argilla_server/contexts/accounts.py b/argilla-server/src/argilla_server/contexts/accounts.py index 0395556e84..2e9321dad6 100644 --- a/argilla-server/src/argilla_server/contexts/accounts.py +++ b/argilla-server/src/argilla_server/contexts/accounts.py @@ -119,12 +119,7 @@ async def create_user( if await get_user_by_username(db, user_attrs["username"]) is not None: raise NotUniqueError(f"User username `{user_attrs['username']}` is not unique") - if user_id := user_attrs.get("id"): - if await User.get(db, id=user_id) is not None: - raise NotUniqueError(f"User with id `{user_id}` is not unique") - - user = await User.create( - db, + new_user = User( id=user_attrs.get("id"), first_name=user_attrs["first_name"], last_name=user_attrs["last_name"], diff --git a/argilla-server/src/argilla_server/validators/users.py b/argilla-server/src/argilla_server/validators/users.py index 3d506fb032..47215f53dd 100644 --- a/argilla-server/src/argilla_server/validators/users.py +++ b/argilla-server/src/argilla_server/validators/users.py @@ -22,6 +22,7 @@ class UserCreateValidator: @classmethod async def validate(cls, db: AsyncSession, user: User) -> None: await cls._validate_username(db, user) + await cls._validate_user_id(db, user) @classmethod async def _validate_username(cls, db, user: User): @@ -39,3 +40,11 @@ async def _validate_unique_username(cls, db, user): async def _validate_username_length(cls, user: User): if len(user.username) < 1: raise UnprocessableEntityError("Username must be at least 1 characters long") + + @classmethod + async def _validate_user_id(cls, db, user: User): + if user.id is None: + return + + if await User.get(db, id=user.id) is not None: + raise NotUniqueError(f"User with id `{user.id}` is not unique")