grip / app /features /sync /models.py
github-actions
Deploy to Hugging Face
ee2e133
from datetime import datetime
from uuid import UUID
from sqlalchemy import String, Integer, DateTime, ForeignKey, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy.sql import func
from app.core.database import Base
class SyncLog(Base):
__tablename__ = "sync_logs"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
user_id: Mapped[UUID] = mapped_column(ForeignKey("users.id"))
start_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
end_time: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=True)
status: Mapped[str] = mapped_column(String, default="IN_PROGRESS") # IN_PROGRESS, SUCCESS, FAILED
records_processed: Mapped[int] = mapped_column(Integer, default=0)
error_message: Mapped[str] = mapped_column(Text, nullable=True)
trigger_source: Mapped[str] = mapped_column(String) # WEBHOOK, MANUAL
# Store the historyId used for this sync to know where to start next time
history_id_used: Mapped[str] = mapped_column(String, nullable=True)
summary: Mapped[str] = mapped_column(Text, nullable=True) # JSON summary of processed records
# Relationship to user if needed, or just ID