added espd
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
"""Persist ESPD form state in ProjectSetting."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.models import ProjectSetting
|
||||
from app.services.espd.models import EspdState
|
||||
|
||||
ESPD_STATE_KEY = "espd_state"
|
||||
|
||||
|
||||
def get_espd_state(db: Session, project_id: int) -> EspdState:
|
||||
row = db.scalar(
|
||||
select(ProjectSetting).where(
|
||||
ProjectSetting.project_id == project_id,
|
||||
ProjectSetting.key == ESPD_STATE_KEY,
|
||||
)
|
||||
)
|
||||
if not row or not row.value:
|
||||
return EspdState()
|
||||
try:
|
||||
return EspdState.model_validate_json(row.value)
|
||||
except Exception:
|
||||
try:
|
||||
return EspdState.model_validate(json.loads(row.value))
|
||||
except Exception:
|
||||
return EspdState()
|
||||
|
||||
|
||||
def save_espd_state(db: Session, project_id: int, state: EspdState) -> EspdState:
|
||||
row = db.scalar(
|
||||
select(ProjectSetting).where(
|
||||
ProjectSetting.project_id == project_id,
|
||||
ProjectSetting.key == ESPD_STATE_KEY,
|
||||
)
|
||||
)
|
||||
payload = state.model_dump(by_alias=True, mode="json")
|
||||
text = json.dumps(payload, ensure_ascii=False)
|
||||
if row:
|
||||
row.value = text
|
||||
else:
|
||||
db.add(ProjectSetting(project_id=project_id, key=ESPD_STATE_KEY, value=text))
|
||||
db.commit()
|
||||
return get_espd_state(db, project_id)
|
||||
Reference in New Issue
Block a user