11from typing import Optional
2- from uuid import UUID
32
43from sqlalchemy import select
54from sqlalchemy .ext .asyncio import AsyncSession
1918
2019
2120class SQLAlchemyUserRepository (UserRepository ):
22- def __init__ (self , db : AsyncSession , tenant_id : UUID | None = None ):
21+ def __init__ (self , db : AsyncSession , tenant_id : int | None = None ):
2322 self ._db = db
2423 self ._tenant_id = tenant_id
2524
@@ -34,7 +33,7 @@ async def get_by_email(self, email: str) -> Optional[User]:
3433
3534 return self ._map_to_entity (user_model )
3635
37- async def get_by_id (self , user_id : UUID ) -> Optional [User ]:
36+ async def get_by_id (self , user_id : int ) -> Optional [User ]:
3837 stmt = select (UserModel ).where (UserModel .id == user_id )
3938 if self ._tenant_id :
4039 stmt = stmt .where (UserModel .tenant_id == self ._tenant_id )
@@ -44,7 +43,7 @@ async def get_by_id(self, user_id: UUID) -> Optional[User]:
4443 return None
4544 return self ._map_to_entity (user_model )
4645
47- async def get_by_id_with_relations (self , user_id : UUID ) -> Optional [User ]:
46+ async def get_by_id_with_relations (self , user_id : int ) -> Optional [User ]:
4847 """Get user with profile, settings, and security eagerly loaded."""
4948 stmt = (
5049 select (UserModel )
@@ -78,16 +77,18 @@ async def save(self, user: User) -> User:
7877 user_model .external_id = user .external_id
7978 else :
8079 # Create new user
81- user_model = UserModel (
82- id = user .id ,
83- email = user .email ,
84- username = user .username ,
85- password_hash = user .password_hash ,
86- auth_provider = user .auth_provider ,
87- status = user .status ,
88- external_id = user .external_id ,
89- tenant_id = self ._tenant_id or user .tenant_id ,
90- )
80+ model_kwargs = {
81+ "email" : user .email ,
82+ "username" : user .username ,
83+ "password_hash" : user .password_hash ,
84+ "auth_provider" : user .auth_provider ,
85+ "status" : user .status ,
86+ "external_id" : user .external_id ,
87+ "tenant_id" : self ._tenant_id or user .tenant_id ,
88+ }
89+ if user .id is not None :
90+ model_kwargs ["id" ] = user .id
91+ user_model = UserModel (** model_kwargs )
9192 self ._db .add (user_model )
9293
9394 # Create default related records
@@ -181,14 +182,14 @@ async def save_security(self, security: UserSecurity) -> UserSecurity:
181182 await self ._db .refresh (security_model )
182183 return self ._map_security_to_entity (security_model )
183184
184- async def _get_user_model (self , user_id : UUID ) -> UserModel :
185+ async def _get_user_model (self , user_id : int ) -> UserModel :
185186 stmt = select (UserModel ).where (UserModel .id == user_id )
186187 if self ._tenant_id :
187188 stmt = stmt .where (UserModel .tenant_id == self ._tenant_id )
188189 result = await self ._db .execute (stmt )
189190 return result .scalar_one ()
190191
191- async def _create_default_related_records (self , user_id : UUID ) -> None :
192+ async def _create_default_related_records (self , user_id : int ) -> None :
192193 """Create default profile, settings, and security records for a new user."""
193194 # Default profile
194195 profile_model = UserProfileModel (user_id = user_id , tenant_id = self ._tenant_id )
0 commit comments