from sqlalchemy import Select, Delete, cast, String from .model import Yeardata from .schema import YeardataCreate, YeardataUpdate from src.database.service import search_filter_sort_paginate from typing import Optional from src.database.core import DbSession from src.auth.service import CurrentUser async def get(*, db_session: DbSession, yeardata_id: str) -> Optional[Yeardata]: """Returns a document based on the given document id.""" query = Select(Yeardata).filter(Yeardata.id == yeardata_id) result = await db_session.execute(query) return result.scalars().one_or_none() async def get_all( *, db_session: DbSession, items_per_page: Optional[int], search: Optional[str] = None, common, ): """Returns all documents.""" query = Select(Yeardata) if search: query = query.filter(cast(Yeardata.year, String).ilike(f"%{search}%")) common["items_per_page"] = items_per_page results = await search_filter_sort_paginate(model=query, **common) # return results.scalars().all() return results async def create(*, db_session: DbSession, yeardata_in: YeardataCreate): """Creates a new document.""" yeardata = Yeardata(**yeardata_in.model_dump()) db_session.add(yeardata) await db_session.commit() return yeardata async def update( *, db_session: DbSession, yeardata: Yeardata, yeardata_in: YeardataUpdate ): """Updates a document.""" data = yeardata_in.model_dump() update_data = yeardata_in.model_dump(exclude_defaults=True) for field in data: if field in update_data: setattr(yeardata, field, update_data[field]) await db_session.commit() return yeardata async def delete(*, db_session: DbSession, yeardata_id: str): """Deletes a document.""" query = Delete(Yeardata).where(Yeardata.id == yeardata_id) await db_session.execute(query) await db_session.commit()