"""MediaPlan model.""" from typing import List from sqlalchemy import func from db import db from models.campaign_approval import ApprovalRequest from models.media_plan_phases import MediaPlanPhase DEFAULT_MEDIA_PLAN_NAME = "Untitled" MEDIA_PLANS_MAX_NUMBER = 15 class MediaPlan(db.Model): """MediaPlan model.""" __tablename__ = "MediaPlan" id = db.Column(db.BigInteger, primary_key=True) name = db.Column(db.String, nullable=False, server_default=DEFAULT_MEDIA_PLAN_NAME) project_id = db.Column(db.BigInteger, db.ForeignKey("Project.id", ondelete="CASCADE")) release_name = db.Column(db.String, nullable=True) release_type_id = db.Column(db.Integer, db.ForeignKey("ReleaseType.id"), nullable=True) created_at = db.Column(db.TIMESTAMP(timezone=True), nullable=False, server_default=func.current_timestamp()) create_user_id = db.Column(db.Integer, db.ForeignKey("User.id"), nullable=True) order = db.Column(db.Integer, nullable=True) create_user = db.relationship("User", foreign_keys=[create_user_id]) release_type = db.relationship("ReleaseType", foreign_keys=[release_type_id]) phases: List["MediaPlanPhase"] = db.relationship( "MediaPlanPhase", back_populates="media_plan", order_by=MediaPlanPhase.order ) project = db.relationship("Project") approval_requests: List["ApprovalRequest"] = db.relationship( "ApprovalRequest", back_populates="media_plan", order_by=ApprovalRequest.requested_at ) history = db.relationship("ProjectHistoryItem") __table_args__ = ( db.UniqueConstraint( "project_id", "name", name="uq_MediaPlan_project_id_name" ), )