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
2.1 KiB
Python

from sqlalchemy import Select, Delete, cast, String
from src.uploaded_file.model import UploadedFileData
from src.uploaded_file.schema import UploadedFileDataCreate, UploadedFileDataUpdate
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, uploaded_file_id: str) -> Optional[UploadedFileData]:
"""Returns a document based on the given document id."""
query = Select(UploadedFileData).filter(UploadedFileData.id == uploaded_file_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(UploadedFileData).order_by(UploadedFileData.created_at.desc())
if search:
query = query.filter(cast(UploadedFileData.filename, 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, uploaded_file_in: UploadedFileDataCreate):
"""Creates a new document."""
uploaded_file = UploadedFileData(**uploaded_file_in.model_dump())
db_session.add(uploaded_file)
await db_session.commit()
return uploaded_file
async def update(
*, db_session: DbSession, uploaded_file: UploadedFileData, uploaded_file_in: UploadedFileDataUpdate
):
"""Updates a document."""
data = uploaded_file_in.model_dump()
update_data = uploaded_file_in.model_dump(exclude_defaults=True)
for field in data:
if field in update_data:
setattr(uploaded_file, field, update_data[field])
await db_session.commit()
return uploaded_file
async def delete(*, db_session: DbSession, uploaded_file_id: str):
"""Deletes a document."""
query = Delete(UploadedFileData).where(UploadedFileData.id == uploaded_file_id)
await db_session.execute(query)
await db_session.commit()