34 lines
1.6 KiB
Python
34 lines
1.6 KiB
Python
from typing import Optional, List
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy import select, or_
|
|
from app.models.UserModel import User
|
|
from app.repositories.base_repository import BaseRepository
|
|
|
|
class UserRepository(BaseRepository[User]):
|
|
def __init__(self):
|
|
super().__init__(User)
|
|
|
|
def get_by_email(self, db: Session, email: str) -> Optional[User]:
|
|
stmt = select(User).where(User.email == email, User.deleted_at.is_(None))
|
|
return db.execute(stmt).scalar_one_or_none()
|
|
|
|
def get_by_phone(self, db: Session, phone: str) -> Optional[User]:
|
|
stmt = select(User).where(User.phone == phone, User.deleted_at.is_(None))
|
|
return db.execute(stmt).scalar_one_or_none()
|
|
|
|
def get_by_employee_code(self, db: Session, employee_code: str) -> Optional[User]:
|
|
stmt = select(User).where(User.employee_code == employee_code, User.deleted_at.is_(None))
|
|
return db.execute(stmt).scalar_one_or_none()
|
|
|
|
def check_duplicate_identity(self, db: Session, email: str, phone: str, employee_code: Optional[str] = None) -> Optional[User]:
|
|
conditions = [User.email == email, User.phone == phone]
|
|
if employee_code:
|
|
conditions.append(User.employee_code == employee_code)
|
|
stmt = select(User).where(or_(*conditions), User.deleted_at.is_(None))
|
|
return db.execute(stmt).scalars().first()
|
|
|
|
def get_active_users(self, db: Session, skip: int = 0, limit: int = 100) -> List[User]:
|
|
stmt = select(User).where(User.is_active.is_(True), User.deleted_at.is_(None)).offset(skip).limit(limit)
|
|
return list(db.execute(stmt).scalars().all())
|
|
|
|
user_repository = UserRepository()
|