-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
75 lines (61 loc) · 2.9 KB
/
Copy pathmodels.py
File metadata and controls
75 lines (61 loc) · 2.9 KB
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
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, Field
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Table, Text, func
from sqlalchemy.orm import Mapped, mapped_column, relationship
from api.db_base import Base
basket_items_association = Table(
"basket_items_association",
Base.metadata,
Column("basket_group_id", Integer, ForeignKey("basket_groups.id"), primary_key=True),
Column("saved_dataset_id", Integer, ForeignKey("saved_datasets.id"), primary_key=True),
)
class SearchResult(BaseModel):
columns: list[str] = Field(
..., title="Column Names", description="List of column names in the result set"
)
data: list[list[Any]] = Field(..., title="Data Rows", description="List of data rows")
class QueryHistory(Base):
__tablename__ = "query_history"
id: Mapped[int] = mapped_column(primary_key=True, index=True)
# user_id: Mapped[int] = mapped_column(ForeignKey(USER_ID_FK), nullable=False)
user_sub: Mapped[str] = mapped_column(String(128), index=True, nullable=False)
query_date: Mapped[Any] = mapped_column(
DateTime(timezone=True), server_default=func.now(), nullable=False
)
query_params: Mapped[str | None] = mapped_column(Text, nullable=True)
results: Mapped[str | None] = mapped_column(Text, nullable=True)
class BasketGroup(Base):
__tablename__ = "basket_groups"
id: Mapped[int] = mapped_column(primary_key=True, index=True)
# user_id: Mapped[int] = mapped_column(ForeignKey(USER_ID_FK), nullable=False)
user_sub: Mapped[str] = mapped_column(String(128), index=True, nullable=False)
name: Mapped[str] = mapped_column(String, nullable=False, default="My Basket")
created_at: Mapped[Any] = mapped_column(
DateTime(timezone=True),
server_default=func.now(),
nullable=False,
)
updated_at: Mapped[Any | None] = mapped_column(DateTime(timezone=True), onupdate=func.now())
saved_datasets: Mapped[list[SavedDataset]] = relationship(
"SavedDataset",
secondary=basket_items_association,
back_populates="basket_groups", # ,
# cascade="all, delete"
)
class SavedDataset(Base):
__tablename__ = "saved_datasets"
id: Mapped[int] = mapped_column(primary_key=True)
# user_id: Mapped[int] = mapped_column(ForeignKey(USER_ID_FK), nullable=False)
user_sub: Mapped[str] = mapped_column(String(128), index=True, nullable=False)
obs_id: Mapped[str] = mapped_column(String, nullable=False)
dataset_json: Mapped[str] = mapped_column(Text, nullable=False)
created_at: Mapped[Any | None] = mapped_column(
DateTime(timezone=True), server_default=func.now()
)
# Relationship back to BasketGroup via association table
basket_groups: Mapped[list[BasketGroup]] = relationship(
"BasketGroup",
secondary=basket_items_association,
back_populates="saved_datasets",
)