Spaces:
Sleeping
Sleeping
File size: 2,418 Bytes
943ad37 cdaf146 943ad37 cdaf146 943ad37 cdaf146 a900820 cdaf146 943ad37 a900820 943ad37 | 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 | from sqlmodel import SQLModel, Field, Relationship
from typing import Optional, List
from datetime import datetime
from enum import Enum
from sqlalchemy import JSON, Column, TEXT
from pydantic import BaseModel
class TaskPriority(str, Enum):
low = "low"
medium = "medium"
high = "high"
class UserContext(BaseModel):
name: str
uid: str
personalization_data: Optional[str] = None
class Task(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
user_id: str = Field(index=True)
title: str
description: Optional[str] = None
completed: bool = False
priority: TaskPriority = TaskPriority.medium
category: Optional[str] = None
tags: List[str] = Field(default_factory=list, sa_type=JSON)
due_date: Optional[datetime] = Field(default=None)
is_recurring: bool = Field(default=False)
recurrence_pattern: Optional[str] = Field(default=None) # e.g., "daily", "weekly"
reminder_sent: bool = Field(default=False)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
class Conversation(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
user_id: str = Field(index=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
# Relationship to messages
messages: List["Message"] = Relationship(
back_populates="conversation",
sa_relationship_kwargs={"cascade": "all, delete-orphan"}
)
class PushSubscription(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
user_id: str = Field(index=True)
endpoint: str
p256dh: str
auth: str
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
class Message(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
conversation_id: int = Field(foreign_key="conversation.id", index=True)
user_id: str = Field(index=True)
role: str # 'user', 'assistant', or 'system'
content: str = Field(sa_column=Column(TEXT))
created_at: datetime = Field(default_factory=datetime.utcnow)
# Relationship back to conversation
conversation: Conversation = Relationship(back_populates="messages") |