from fastapi import HTTPException from sqlalchemy import Select, Delete, and_ from sqlalchemy.orm import selectinload from .model import OverhaulSchedule from .schema import OverhaulScheduleCreate, OverhaulScheduleUpdate from typing import Optional from src.database.core import DbSession from src.scope.service import get_by_scope_name async def get(*, db_session: DbSession, overhaul_history_id: str) -> Optional[OverhaulSchedule]: """Returns a document based on the given document id.""" result = await db_session.get(OverhaulSchedule, overhaul_history_id) return result.scalars().one_or_none() async def get_all(*, db_session: DbSession): """Returns all documents.""" query = Select(OverhaulSchedule).options( selectinload(OverhaulSchedule.scope)) result = await db_session.execute(query) return result.scalars().all() async def create(*, db_session: DbSession, overhaul_schedule_in: OverhaulScheduleCreate): """Creates a new document.""" scope = await get_by_scope_name(db_session=db_session, scope_name=overhaul_schedule_in.scope_id) if not scope: raise HTTPException( status_code=404, detail="Not Found" ) overhaul_schedule_in.scope_id = scope.id overhaul_schedule = OverhaulSchedule(**overhaul_schedule_in.model_dump()) db_session.add(overhaul_schedule) await db_session.commit() results = Select(OverhaulSchedule).options(selectinload(OverhaulSchedule.scope)).filter(OverhaulSchedule.id == overhaul_schedule.id) return await db_session.scalar(results) async def update(*, db_session: DbSession, overhaul_schedule: OverhaulSchedule, overhaul_schedule_in: OverhaulScheduleUpdate): """Updates a document.""" data = overhaul_schedule_in.model_dump() update_data = overhaul_schedule_in.model_dump(exclude_defaults=True) for field in data: if field in update_data: setattr(overhaul_schedule, field, update_data[field]) await db_session.commit() return overhaul_schedule async def delete(*, db_session: DbSession, overhaul_schedule_id: str): """Deletes a document.""" query = Delete(OverhaulSchedule).where( overhaul_schedule_id == overhaul_schedule_id) await db_session.execute(query) await db_session.commit()