"""Project changes history.""" from typing import List from sqlalchemy.sql import func from db import db from enum import Enum class HistoryActionType(Enum): ADD_CAMPAIGN = 1 REMOVE_CAMPAIGN = 2 UPDATE_CAMPAIGN_TIMELINE = 3 UPDATE_CAMPAIGN_BUDGET = 4 CHANGE_TERRITORIES = 5 ADD_PHASE = 6 REMOVE_PHASE = 7 UPDATE_PROJECT_BUDGET = 9 UPDATE_ARTIST = 10 CHANGE_PROJECT_TEAM = 11 CHANGE_CAMPAIGN_PHASES = 12 CHANGE_CAMPAIGN_PLATFORM = 13 ADD_PROJECT = 14 REMOVE_PROJECT = 15 UPDATE_PROJECT_NOTES = 16 UPDATE_PROJECT_NAME = 17 UPDATE_PROJECT_TARGET_TYPE = 18 ADD_PRIMARY_ARTISTS_TO_PROJECT = 19 ADD_FEATURED_ARTISTS_TO_PROJECT = 20 REMOVE_PRIMARY_ARTISTS_FROM_PROJECT = 21 REMOVE_FEATURED_ARTISTS_FROM_PROJECT = 22 ADD_PLAYLISTS_TO_PROJECT = 23 REMOVE_PLAYLISTS_FROM_PROJECT = 24 UPDATE_CAMPAIGN_OBJECTIVE = 25 UPDATE_CAMPAIGN_NOTES = 26 UPDATE_CAMPAIGN_TYPES = 27 UPDATE_CAMPAIGN_NAME = 28 UPDATE_PROJECT_TYPE = 29 CLAIM_PROJECT_OWNERSHIP = 30 APPROVE_DSP_CAMPAIGN = 31 REJECT_DSP_CAMPAIGN = 32 CHANGE_CAMPAIGN_LINKFIRE_LINKS = 33 CHANGE_PROJECT_LINKFIRE_LINKS = 34 ADD_MEDIA_PLAN = 35 REMOVE_MEDIA_PLAN = 36 UPDATE_MEDIA_PLAN_NAME = 37 UPDATE_MEDIA_PLAN_ORDER = 38 UPDATE_PHASE_NAME = 39 APPROVAL_REQUEST = 40 SUBMIT_APPROVAL_REQUEST = 41 CHANGE_CAMPAIGN = 42 @staticmethod def all_values() -> List[int]: # noinspection PyTypeChecker return list(map(lambda c: c.value, HistoryActionType)) class ProjectHistoryItem(db.Model): __tablename__ = "ProjectHistoryItem" id = db.Column(db.BigInteger, primary_key=True) created_at = db.Column(db.TIMESTAMP(timezone=True), nullable=False, server_default=func.current_timestamp()) project_id = db.Column(db.BigInteger, db.ForeignKey("Project.id", ondelete="CASCADE"), nullable=True) media_plan_id = db.Column(db.BigInteger, db.ForeignKey("MediaPlan.id", ondelete="CASCADE")) campaign_id = db.Column(db.BigInteger, db.ForeignKey("Campaign.id", ondelete="CASCADE")) user_id = db.Column(db.Integer, db.ForeignKey("User.id"), nullable=True) action_id = db.Column(db.Integer, db.ForeignKey("ProjectHistoryAction.id"), nullable=False) old_value = db.Column(db.JSON, nullable=False, server_default="{}") new_value = db.Column(db.JSON, nullable=False, server_default="{}") keywords = db.Column(db.String, nullable=True, server_default="") history_action = db.relationship("ProjectHistoryAction") user = db.relationship("User") project = db.relationship("Project") campaign = db.relationship("Campaign") action = db.relationship("ProjectHistoryAction") media_plan = db.relationship("MediaPlan") class ProjectHistoryAction(db.Model): """History action model.""" __tablename__ = "ProjectHistoryAction" id = db.Column(db.Integer, primary_key=True) type = db.Column(db.String, nullable=False)