from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.api.schemas import PomodoroStart, PomodoroStop from app.auth.deps import get_current_user from app.db.base import get_db from app.db.models import User from app.pomodoro.service import PomodoroService router = APIRouter() def _handle_value_error(exc: ValueError) -> HTTPException: return HTTPException(status_code=400, detail=str(exc)) @router.get("/status") def get_status(db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: return PomodoroService(db, user.id).get_status() @router.post("/start") def start_pomodoro(payload: PomodoroStart, db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).start( duration_min=payload.duration_min, task_note=payload.task_note, ) except ValueError as exc: raise _handle_value_error(exc) from exc @router.post("/pause") def pause_pomodoro(db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).pause() except ValueError as exc: raise _handle_value_error(exc) from exc @router.post("/resume") def resume_pomodoro(db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).resume() except ValueError as exc: raise _handle_value_error(exc) from exc @router.post("/stop") def stop_pomodoro(payload: PomodoroStop, db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).stop( result=payload.result, completed=payload.completed, ) except ValueError as exc: raise _handle_value_error(exc) from exc @router.get("/history") def get_history(limit: int = 20, db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> list[dict]: return PomodoroService(db, user.id).history(limit=limit) @router.post("/work/start") def start_work(payload: PomodoroStart, db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).start_work( duration_min=payload.duration_min, task_note=payload.task_note, ) except ValueError as exc: raise _handle_value_error(exc) from exc @router.post("/break/short/start") def start_short_break(duration_min: int | None = None, db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).start_short_break(duration_min=duration_min) except ValueError as exc: raise _handle_value_error(exc) from exc @router.post("/break/long/start") def start_long_break(duration_min: int | None = None, db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).start_long_break(duration_min=duration_min) except ValueError as exc: raise _handle_value_error(exc) from exc @router.post("/cycle/reset") def reset_cycle(clear_task: bool = False, db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: return PomodoroService(db, user.id).reset_cycle(clear_task=clear_task) @router.post("/skip") def skip_phase(db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict: try: return PomodoroService(db, user.id).skip_phase() except ValueError as exc: raise _handle_value_error(exc) from exc