"""Content model for media files.""" from datetime import datetime from typing import Optional, List from app.extensions import db from app.models.group import group_content class Content(db.Model): """Content model representing media files for display. Attributes: id: Primary key filename: Original filename content_type: Type of content (image, video, pdf, presentation, other) duration: Display duration in seconds file_size: File size in bytes description: Optional content description position: Display order position uploaded_at: Upload timestamp """ __tablename__ = 'content' id = db.Column(db.Integer, primary_key=True) filename = db.Column(db.String(255), nullable=False, index=True) content_type = db.Column(db.String(50), nullable=False, index=True) duration = db.Column(db.Integer, default=10, nullable=True) file_size = db.Column(db.BigInteger, nullable=True) description = db.Column(db.Text, nullable=True) position = db.Column(db.Integer, default=0, index=True) uploaded_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False, index=True) # Relationships groups = db.relationship('Group', secondary=group_content, back_populates='contents', lazy='dynamic') def __repr__(self) -> str: """String representation of Content.""" return f'' @property def file_size_mb(self) -> float: """Get file size in megabytes.""" if self.file_size: return round(self.file_size / (1024 * 1024), 2) return 0.0 @property def group_count(self) -> int: """Get number of groups containing this content.""" return self.groups.count() def is_image(self) -> bool: """Check if content is an image.""" return self.content_type == 'image' def is_video(self) -> bool: """Check if content is a video.""" return self.content_type == 'video' def is_pdf(self) -> bool: """Check if content is a PDF.""" return self.content_type == 'pdf'