新增电子试验主文件目录与文件归档
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import uuid
|
||||
from typing import Sequence
|
||||
|
||||
from sqlalchemy import select, update as sa_update
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.etmf import EtmfNode
|
||||
|
||||
|
||||
async def get_node(db: AsyncSession, node_id: uuid.UUID) -> EtmfNode | None:
|
||||
result = await db.execute(select(EtmfNode).where(EtmfNode.id == node_id))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
|
||||
async def list_nodes_by_study(db: AsyncSession, study_id: uuid.UUID, *, include_inactive: bool = True) -> Sequence[EtmfNode]:
|
||||
stmt = select(EtmfNode).where(EtmfNode.study_id == study_id)
|
||||
if not include_inactive:
|
||||
stmt = stmt.where(EtmfNode.is_active.is_(True))
|
||||
stmt = stmt.order_by(EtmfNode.sort_order.asc(), EtmfNode.code.asc(), EtmfNode.name.asc())
|
||||
result = await db.execute(stmt)
|
||||
return result.scalars().all()
|
||||
|
||||
|
||||
async def create_node(db: AsyncSession, node: EtmfNode, *, commit: bool = True) -> EtmfNode:
|
||||
db.add(node)
|
||||
if commit:
|
||||
await db.commit()
|
||||
await db.refresh(node)
|
||||
return node
|
||||
|
||||
|
||||
async def update_node(db: AsyncSession, node_id: uuid.UUID, values: dict, *, commit: bool = True) -> None:
|
||||
if values:
|
||||
await db.execute(sa_update(EtmfNode).where(EtmfNode.id == node_id).values(**values))
|
||||
if commit:
|
||||
await db.commit()
|
||||
Reference in New Issue
Block a user