104 lines
2.3 KiB
Python
104 lines
2.3 KiB
Python
import json
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.database.models import (
|
|
OnboardingMessage,
|
|
OnboardingSession,
|
|
OnboardingState,
|
|
)
|
|
|
|
|
|
class OnboardingService:
|
|
|
|
def get_session(
|
|
self,
|
|
db: Session,
|
|
session_id: str,
|
|
):
|
|
return (
|
|
db.query(OnboardingSession)
|
|
.filter(
|
|
OnboardingSession.session_id == session_id
|
|
)
|
|
.first()
|
|
)
|
|
|
|
def get_state(
|
|
self,
|
|
db: Session,
|
|
session_id: str,
|
|
):
|
|
state = (
|
|
db.query(OnboardingState)
|
|
.filter(
|
|
OnboardingState.session_id == session_id
|
|
)
|
|
.first()
|
|
)
|
|
|
|
if not state:
|
|
default_state = {
|
|
"reason_for_visit": {
|
|
"status": "not_collected",
|
|
"value": None
|
|
},
|
|
"symptoms": {
|
|
"status": "not_collected",
|
|
"items": []
|
|
},
|
|
"medical_history": {
|
|
"status": "not_collected",
|
|
"items": []
|
|
},
|
|
"medications": {
|
|
"status": "not_collected",
|
|
"items": []
|
|
},
|
|
"allergies": {
|
|
"status": "not_collected",
|
|
"items": []
|
|
}
|
|
}
|
|
|
|
state = OnboardingState(
|
|
session_id=session_id,
|
|
state_json=json.dumps(default_state),
|
|
)
|
|
|
|
db.add(state)
|
|
db.commit()
|
|
db.refresh(state)
|
|
|
|
return state
|
|
|
|
def save_message(
|
|
self,
|
|
db: Session,
|
|
session_id: str,
|
|
role: str,
|
|
message: str,
|
|
stage: str,
|
|
):
|
|
new_message = OnboardingMessage(
|
|
session_id=session_id,
|
|
role=role,
|
|
message=message,
|
|
stage=stage,
|
|
)
|
|
|
|
db.add(new_message)
|
|
db.commit()
|
|
|
|
return new_message
|
|
|
|
def update_state(
|
|
self,
|
|
db: Session,
|
|
state: OnboardingState,
|
|
data: dict,
|
|
):
|
|
state.state_json = json.dumps(data)
|
|
db.commit()
|
|
db.refresh(state)
|
|
return state
|