Files
HabitForge-zepp/backend/repositories/challenge_repository.py
T

34 lines
1.3 KiB
Python

"""Challenge repository for data access operations."""
from typing import List, Optional
from sqlalchemy.orm import Session
from sqlalchemy import func
from backend.models.challenge import Challenge
from backend.repositories.base import BaseRepository
class ChallengeRepository(BaseRepository[Challenge]):
"""Repository for Challenge model operations."""
def __init__(self, db: Session):
"""Initialize challenge repository."""
super().__init__(Challenge, db)
def get_by_user_id(self, user_id: int) -> List[Challenge]:
"""Get all challenges for a user ordered by display_order."""
return self.db.query(Challenge).filter(
Challenge.user_id == user_id
).order_by(Challenge.display_order.asc()).all()
def get_by_user_and_id(self, user_id: int, challenge_id: int) -> Optional[Challenge]:
"""Get a challenge by user ID and challenge ID."""
return self.db.query(Challenge).filter(
Challenge.id == challenge_id,
Challenge.user_id == user_id
).first()
def get_max_display_order(self, user_id: int) -> Optional[int]:
"""Get the maximum display_order for a user."""
return self.db.query(func.max(Challenge.display_order)).filter(
Challenge.user_id == user_id
).scalar()