fix rust
This commit is contained in:
38
python/api/app/repositories/user.py
Normal file
38
python/api/app/repositories/user.py
Normal file
@ -0,0 +1,38 @@
|
||||
"""User repository"""
|
||||
from typing import Optional
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import selectinload
|
||||
|
||||
from app.repositories.base import BaseRepository
|
||||
from app.db.models import User
|
||||
|
||||
|
||||
class UserRepository(BaseRepository[User]):
|
||||
"""User repository with custom methods"""
|
||||
|
||||
def __init__(self, session: AsyncSession):
|
||||
super().__init__(User, session)
|
||||
|
||||
async def get_by_did(self, did: str) -> Optional[User]:
|
||||
"""Get user by DID"""
|
||||
result = await self.session.execute(
|
||||
select(User).where(User.did == did)
|
||||
)
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
async def get_or_create(self, did: str, handle: Optional[str] = None) -> User:
|
||||
"""Get existing user or create new one"""
|
||||
user = await self.get_by_did(did)
|
||||
if not user:
|
||||
user = await self.create(did=did, handle=handle)
|
||||
return user
|
||||
|
||||
async def get_with_cards(self, user_id: int) -> Optional[User]:
|
||||
"""Get user with all their cards"""
|
||||
result = await self.session.execute(
|
||||
select(User)
|
||||
.options(selectinload(User.cards))
|
||||
.where(User.id == user_id)
|
||||
)
|
||||
return result.scalar_one_or_none()
|
Reference in New Issue
Block a user