feat: strengthen backup and mobile workflows
This commit is contained in:
@@ -255,6 +255,52 @@ class Memo(Base):
|
||||
deleted_at: Mapped[datetime | None] = mapped_column(UTCDateTime(), nullable=True)
|
||||
|
||||
|
||||
class BackupPreflight(Base):
|
||||
__tablename__ = "backup_preflights"
|
||||
id: Mapped[UUID] = mapped_column(primary_key=True, default=new_id)
|
||||
token_hash: Mapped[str] = mapped_column(String(64), unique=True, index=True)
|
||||
user_id: Mapped[UUID] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"), index=True)
|
||||
backup_id: Mapped[UUID] = mapped_column(index=True)
|
||||
archive_sha256: Mapped[str] = mapped_column(String(64))
|
||||
archive_size: Mapped[int] = mapped_column(Integer)
|
||||
staging_path: Mapped[str] = mapped_column(String(1024), unique=True)
|
||||
mode: Mapped[str] = mapped_column(String(16))
|
||||
status: Mapped[str] = mapped_column(String(32), default="pending", index=True)
|
||||
expires_at: Mapped[datetime] = mapped_column(UTCDateTime(), index=True)
|
||||
consumed_at: Mapped[datetime | None] = mapped_column(UTCDateTime(), nullable=True)
|
||||
cleanup_path: Mapped[str | None] = mapped_column(String(1024), nullable=True)
|
||||
created_at: Mapped[datetime] = mapped_column(UTCDateTime(), default=utcnow)
|
||||
|
||||
|
||||
class BackupImport(Base):
|
||||
__tablename__ = "backup_imports"
|
||||
__table_args__ = (UniqueConstraint("user_id", "backup_id", name="uq_backup_import_user_backup"),)
|
||||
id: Mapped[UUID] = mapped_column(primary_key=True, default=new_id)
|
||||
user_id: Mapped[UUID] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"), index=True)
|
||||
backup_id: Mapped[UUID] = mapped_column(index=True)
|
||||
archive_sha256: Mapped[str] = mapped_column(String(64))
|
||||
mode: Mapped[str] = mapped_column(String(16))
|
||||
created_at: Mapped[datetime] = mapped_column(UTCDateTime(), default=utcnow)
|
||||
|
||||
|
||||
class BackupImportEntity(Base):
|
||||
__tablename__ = "backup_import_entities"
|
||||
__table_args__ = (
|
||||
UniqueConstraint(
|
||||
"user_id", "backup_id", "entity_type", "source_id",
|
||||
name="uq_backup_import_entity_source",
|
||||
),
|
||||
)
|
||||
id: Mapped[UUID] = mapped_column(primary_key=True, default=new_id)
|
||||
user_id: Mapped[UUID] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"), index=True)
|
||||
backup_id: Mapped[UUID] = mapped_column(index=True)
|
||||
entity_type: Mapped[str] = mapped_column(String(64))
|
||||
source_id: Mapped[UUID] = mapped_column(index=True)
|
||||
target_id: Mapped[UUID] = mapped_column(index=True)
|
||||
content_digest: Mapped[str] = mapped_column(String(64))
|
||||
created_at: Mapped[datetime] = mapped_column(UTCDateTime(), default=utcnow)
|
||||
|
||||
|
||||
class AuditLog(Base):
|
||||
__tablename__ = "audit_logs"
|
||||
id: Mapped[UUID] = mapped_column(primary_key=True, default=new_id)
|
||||
|
||||
Reference in New Issue
Block a user