Spaces:
Sleeping
Sleeping
File size: 2,443 Bytes
214f910 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | from __future__ import annotations
import sqlite3
from pathlib import Path
from typing import Any
from .models import EvaluationResult, ItineraryPlan, UserRequest
BASE_DIR = Path(__file__).parent.parent
DB_PATH = BASE_DIR / "qiddiya.db"
def get_connection() -> sqlite3.Connection:
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
return conn
def init_db() -> None:
conn = get_connection()
cur = conn.cursor()
cur.execute(
"""
CREATE TABLE IF NOT EXISTS plans (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
visit_date TEXT NOT NULL,
request_json TEXT NOT NULL,
plan_json TEXT NOT NULL
);
"""
)
cur.execute(
"""
CREATE TABLE IF NOT EXISTS evaluations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
visit_date TEXT NOT NULL,
request_json TEXT NOT NULL,
plan_json TEXT NOT NULL,
evaluation_json TEXT NOT NULL
);
"""
)
conn.commit()
conn.close()
def _to_json(obj: Any) -> str:
import json
if hasattr(obj, "model_dump"):
return json.dumps(obj.model_dump())
if isinstance(obj, dict):
return json.dumps(obj)
raise TypeError("Object is not serializable")
def save_plan_result(request: UserRequest, plan: ItineraryPlan) -> None:
conn = get_connection()
cur = conn.cursor()
cur.execute(
"""
INSERT INTO plans (visit_date, request_json, plan_json)
VALUES (?, ?, ?);
""",
(
plan.visit_date,
_to_json(request),
_to_json(plan),
),
)
conn.commit()
conn.close()
def save_evaluation_result(
request: UserRequest, plan: ItineraryPlan, evaluation: EvaluationResult
) -> None:
conn = get_connection()
cur = conn.cursor()
cur.execute(
"""
INSERT INTO evaluations (visit_date, request_json, plan_json, evaluation_json)
VALUES (?, ?, ?, ?);
""",
(
plan.visit_date,
_to_json(request),
_to_json(plan),
_to_json(evaluation),
),
)
conn.commit()
conn.close()
|