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.
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
|
|
|
|
from sqlalchemy import Select, Delete
|
|
from .model import Scope
|
|
from .schema import ScopeCreate, ScopeUpdate
|
|
from typing import Optional
|
|
|
|
from src.database.core import DbSession
|
|
from src.auth.service import CurrentUser
|
|
|
|
|
|
async def get(*, db_session: DbSession, scope_id: str) -> Optional[Scope]:
|
|
"""Returns a document based on the given document id."""
|
|
query = Select(Scope).filter(Scope.id == scope_id)
|
|
result = await db_session.execute(query)
|
|
return result.scalars().one_or_none()
|
|
|
|
|
|
async def get_all(*, db_session: DbSession):
|
|
"""Returns all documents."""
|
|
query = Select(Scope)
|
|
result = await db_session.execute(query)
|
|
return result.scalars().all()
|
|
|
|
|
|
async def create(*, db_session: DbSession, scope_in: ScopeCreate):
|
|
"""Creates a new document."""
|
|
scope = Scope(**scope_in.model_dump())
|
|
db_session.add(scope)
|
|
await db_session.commit()
|
|
return scope
|
|
|
|
|
|
async def update(*, db_session: DbSession, scope: Scope, scope_in: ScopeUpdate):
|
|
"""Updates a document."""
|
|
data = scope_in.model_dump()
|
|
|
|
update_data = scope_in.model_dump(exclude_defaults=True)
|
|
|
|
for field in data:
|
|
if field in update_data:
|
|
setattr(scope, field, update_data[field])
|
|
|
|
await db_session.commit()
|
|
|
|
return scope
|
|
|
|
|
|
async def delete(*, db_session: DbSession, scope_id: str):
|
|
"""Deletes a document."""
|
|
query = Delete(Scope).where(Scope.id == scope_id)
|
|
await db_session.execute(query)
|
|
await db_session.commit()
|
|
|
|
|
|
async def get_by_scope_name(*, db_session: DbSession, scope_name: str) -> Optional[Scope]:
|
|
"""Returns a document based on the given document id."""
|
|
query = Select(Scope).filter(Scope.scope_name == scope_name)
|
|
result = await db_session.execute(query)
|
|
return result.scalars().one_or_none()
|