You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.9 KiB
Python

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()