first
This commit is contained in:
51
app/models/submission.py
Normal file
51
app/models/submission.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from sqlalchemy import Column, Integer, DateTime, ForeignKey, String, Float, Boolean, Index
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
||||
from datetime import datetime
|
||||
import uuid
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class Submission(BaseModel):
|
||||
__tablename__ = "submissions"
|
||||
|
||||
form_id = Column(Integer, ForeignKey("forms.id", ondelete="CASCADE"))
|
||||
submission_uuid = Column(UUID(as_uuid=True), default=uuid.uuid4, unique=True, nullable=False, index=True)
|
||||
submission_data = Column(JSONB, nullable=False) # переименовано с data
|
||||
submission_metadata = Column(JSONB, default={}) # переименовано с metadata
|
||||
status = Column(String(50), default="completed")
|
||||
submitted_at = Column(DateTime, default=datetime.utcnow, index=True)
|
||||
submitted_by = Column(Integer, nullable=True)
|
||||
|
||||
# Для аналитики
|
||||
completion_time_seconds = Column(Float, nullable=True)
|
||||
referrer = Column(String(500))
|
||||
|
||||
# Relationships
|
||||
form = relationship("Form", back_populates="submissions")
|
||||
audit_logs = relationship("SubmissionAuditLog", back_populates="submission")
|
||||
|
||||
__table_args__ = (
|
||||
Index('ix_submissions_data_gin', submission_data, postgresql_using='gin'),
|
||||
Index('ix_submissions_metadata_gin', submission_metadata, postgresql_using='gin'),
|
||||
Index('ix_submissions_form_status', 'form_id', 'status'),
|
||||
Index('ix_submissions_date_status', 'submitted_at', 'status'),
|
||||
Index('ix_submissions_created_at', 'created_at'),
|
||||
)
|
||||
|
||||
|
||||
class SubmissionAuditLog(BaseModel):
|
||||
__tablename__ = "submission_audit_logs"
|
||||
|
||||
submission_id = Column(Integer, ForeignKey("submissions.id", ondelete="CASCADE"))
|
||||
action = Column(String(50))
|
||||
changed_data = Column(JSONB)
|
||||
ip_address = Column(String(45))
|
||||
user_agent = Column(String(500))
|
||||
|
||||
submission = relationship("Submission", back_populates="audit_logs")
|
||||
|
||||
__table_args__ = (
|
||||
Index('ix_audit_submission', 'submission_id'),
|
||||
Index('ix_audit_created_at', 'created_at'),
|
||||
)
|
||||
Reference in New Issue
Block a user