forked from andika/membership-be
Test Preparation
This commit is contained in:
35
models.py
35
models.py
@@ -130,6 +130,12 @@ class User(Base):
|
||||
rejected_at = Column(DateTime(timezone=True), nullable=True, comment="Timestamp when application was rejected")
|
||||
rejected_by = Column(UUID(as_uuid=True), ForeignKey('users.id'), nullable=True, comment="Admin who rejected the application")
|
||||
|
||||
# WordPress Import Tracking
|
||||
import_source = Column(String(50), nullable=True, comment="Source of user creation: wordpress, manual, registration")
|
||||
import_job_id = Column(UUID(as_uuid=True), ForeignKey('import_jobs.id'), nullable=True, comment="Import job that created this user")
|
||||
wordpress_user_id = Column(BigInteger, nullable=True, comment="Original WordPress user ID")
|
||||
wordpress_registered_date = Column(DateTime(timezone=True), nullable=True, comment="Original WordPress registration date")
|
||||
|
||||
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
|
||||
updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
|
||||
|
||||
@@ -451,6 +457,9 @@ class ImportJobStatus(enum.Enum):
|
||||
completed = "completed"
|
||||
failed = "failed"
|
||||
partial = "partial"
|
||||
validating = "validating"
|
||||
preview_ready = "preview_ready"
|
||||
rolled_back = "rolled_back"
|
||||
|
||||
class ImportJob(Base):
|
||||
"""Track CSV import jobs with error handling"""
|
||||
@@ -466,6 +475,13 @@ class ImportJob(Base):
|
||||
status = Column(SQLEnum(ImportJobStatus), default=ImportJobStatus.processing, nullable=False)
|
||||
errors = Column(JSON, default=list, nullable=False) # [{row: 5, field: "email", error: "Invalid format"}]
|
||||
|
||||
# WordPress import enhancements
|
||||
field_mapping = Column(JSON, default=dict, nullable=False) # Maps CSV columns to DB fields
|
||||
wordpress_metadata = Column(JSON, default=dict, nullable=False) # Preview data, validation results
|
||||
imported_user_ids = Column(JSON, default=list, nullable=False) # User IDs for rollback
|
||||
rollback_at = Column(DateTime, nullable=True)
|
||||
rollback_by = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=True)
|
||||
|
||||
# Tracking
|
||||
imported_by = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
|
||||
started_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
|
||||
@@ -473,3 +489,22 @@ class ImportJob(Base):
|
||||
|
||||
# Relationships
|
||||
importer = relationship("User", foreign_keys=[imported_by])
|
||||
rollback_user = relationship("User", foreign_keys=[rollback_by])
|
||||
|
||||
|
||||
class ImportRollbackAudit(Base):
|
||||
"""Audit trail for import rollback operations"""
|
||||
__tablename__ = "import_rollback_audit"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
import_job_id = Column(UUID(as_uuid=True), ForeignKey("import_jobs.id"), nullable=False)
|
||||
rolled_back_by = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
|
||||
rolled_back_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
|
||||
deleted_user_count = Column(Integer, nullable=False)
|
||||
deleted_user_ids = Column(JSON, nullable=False) # List of deleted user UUIDs
|
||||
reason = Column(Text, nullable=True)
|
||||
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
|
||||
|
||||
# Relationships
|
||||
import_job = relationship("ImportJob")
|
||||
admin_user = relationship("User", foreign_keys=[rolled_back_by])
|
||||
|
||||
Reference in New Issue
Block a user