from typing import List, Optional, Union, Dict, Any from sqlalchemy.orm import Session from app.models.task import Task from app.schemas.task import TaskCreate, TaskUpdate def get_task(db: Session, task_id: int) -> Optional[Task]: """ Get a task by ID. """ return db.query(Task).filter(Task.id == task_id).first() def get_tasks_by_owner( db: Session, owner_id: int, skip: int = 0, limit: int = 100, status: Optional[str] = None ) -> List[Task]: """ Get tasks by owner ID with optional status filter. """ query = db.query(Task).filter(Task.owner_id == owner_id) if status: query = query.filter(Task.status == status) return query.offset(skip).limit(limit).all() def create_task(db: Session, task_in: TaskCreate, owner_id: int) -> Task: """ Create a new task. """ task = Task( **task_in.dict(), owner_id=owner_id ) db.add(task) db.commit() db.refresh(task) return task def update_task( db: Session, db_obj: Task, obj_in: Union[TaskUpdate, Dict[str, Any]] ) -> Task: """ Update a task. """ if isinstance(obj_in, dict): update_data = obj_in else: update_data = obj_in.dict(exclude_unset=True) for field, value in update_data.items(): if value is not None and hasattr(db_obj, field): setattr(db_obj, field, value) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj def delete_task(db: Session, task_id: int) -> None: """ Delete a task. """ task = db.query(Task).filter(Task.id == task_id).first() if task: db.delete(task) db.commit() def assign_task(db: Session, task_id: int, assigned_to_id: int) -> Task: """ Assign a task to a user. """ task = get_task(db, task_id=task_id) task.assigned_to_id = assigned_to_id db.add(task) db.commit() db.refresh(task) return task