report.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from datetime import datetime, timezone
  2. from app import db
  3. def format_datetime(dt: datetime) -> str:
  4. """Format datetime to ISO format with UTC timezone indicator"""
  5. if dt is None:
  6. return None
  7. # If datetime is naive (no timezone), assume it's UTC
  8. if dt.tzinfo is None:
  9. dt = dt.replace(tzinfo=timezone.utc)
  10. return dt.isoformat()
  11. class Report(db.Model):
  12. """Report model for generated Word documents"""
  13. __tablename__ = 'reports'
  14. id = db.Column(db.Integer, primary_key=True)
  15. task_id = db.Column(db.Integer, db.ForeignKey('tasks.id'), nullable=False, unique=True)
  16. file_name = db.Column(db.String(255), nullable=False)
  17. file_path = db.Column(db.String(500), nullable=False)
  18. file_size = db.Column(db.Integer)
  19. created_at = db.Column(db.DateTime, default=datetime.utcnow, index=True)
  20. # Relationships
  21. task = db.relationship('Task', back_populates='report')
  22. def to_dict(self) -> dict:
  23. """Convert report to dictionary"""
  24. return {
  25. 'id': self.id,
  26. 'task_id': self.task_id,
  27. 'file_name': self.file_name,
  28. 'file_size': self.file_size,
  29. 'created_at': format_datetime(self.created_at),
  30. 'download_url': f'/api/reports/download?id={self.id}'
  31. }
  32. def __repr__(self):
  33. return f'<Report {self.id} {self.file_name}>'