Initial commit
All checks were successful
Build And Test / publish (push) Successful in 1m30s

This commit is contained in:
2025-12-30 15:16:45 -08:00
parent 4df9a7229e
commit 4f6098e8c2
28 changed files with 3080 additions and 0 deletions

70
src/database/models.py Normal file
View File

@@ -0,0 +1,70 @@
"""SQLModel database models for caching PIM data."""
from datetime import datetime
from typing import Optional
from sqlmodel import SQLModel, Field
class CacheMeta(SQLModel, table=True):
"""Generic key-value cache metadata."""
__tablename__ = "cache_meta"
key: str = Field(primary_key=True)
value: Optional[str] = None
expires_at: Optional[int] = None
class EmailCache(SQLModel, table=True):
"""Cached email data."""
__tablename__ = "email_cache"
id: str = Field(primary_key=True)
mailbox: str = Field(index=True)
subject: Optional[str] = None
from_address: Optional[str] = None
date: Optional[datetime] = Field(default=None, index=True)
is_read: bool = False
is_flagged: bool = False
snippet: Optional[str] = None
full_data: Optional[str] = Field(default=None, description="JSON blob of full email data")
cached_at: datetime = Field(default_factory=datetime.utcnow)
class EventCache(SQLModel, table=True):
"""Cached calendar event data."""
__tablename__ = "event_cache"
id: str = Field(primary_key=True)
calendar_id: str = Field(index=True)
title: Optional[str] = None
start_time: Optional[datetime] = Field(default=None, index=True)
end_time: Optional[datetime] = None
full_data: Optional[str] = Field(default=None, description="JSON blob of full event data")
cached_at: datetime = Field(default_factory=datetime.utcnow)
class ContactCache(SQLModel, table=True):
"""Cached contact data."""
__tablename__ = "contact_cache"
id: str = Field(primary_key=True)
addressbook_id: str = Field(index=True)
display_name: Optional[str] = Field(default=None, index=True)
primary_email: Optional[str] = None
full_data: Optional[str] = Field(default=None, description="JSON blob of full contact data")
cached_at: datetime = Field(default_factory=datetime.utcnow)
class SyncState(SQLModel, table=True):
"""Track sync state for incremental updates."""
__tablename__ = "sync_state"
resource_type: str = Field(primary_key=True, description="Type: mailbox, calendar, addressbook")
resource_id: str = Field(primary_key=True)
last_sync: Optional[datetime] = None
sync_token: Optional[str] = None