""" Release Correction Detail Model. This Release Correction Detail model uses sqlalchemy. """ import enum from datetime import datetime from typing import Any from sqlalchemy import Column, DateTime, Enum, Integer, String, Text, func from sqlalchemy.orm import Mapped, mapped_column from assets.connectors import mysql class LastUpdatedTypeEnum(enum.Enum): """Enum type for last updated column.""" oa = "oa" vendor = "vendor" class ReleaseCorrectionDetail(mysql.ArModel): """Table definition for release_correction_detail table.""" __tablename__ = "release_correction_detail" release_correction_id = Column(Integer) release_correction_detail_id = Column(Integer, primary_key=True, autoincrement=True) table_name = Column(String(45)) field_name = Column(String(45)) key_id = Column(Integer) key_value = Column(Text) last_updated: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), ) last_updated_by = Column(Integer) last_updated_type = Column(Enum(LastUpdatedTypeEnum)) def as_dict(self) -> dict[str, Any]: """Return object as dict. Returns: dict: Dictionary representation of the object """ return { "release_correction_id": self.release_correction_id, "release_correction_detail_id": self.release_correction_detail_id, "table_name": self.table_name, "key_id": self.key_id, "key_value": self.key_value, "field_name": self.field_name, "last_updated": self.last_updated, "last_updated_by": self.last_updated_by, "last_updated_type": self.last_updated_type, } def set_release_correction_detail_by_track_unique_id( release_correction_id: int, track_unique_id: int, field_name: str, field_value: Any ) -> None: """Get release correction detail by release correction detail id. Args: release_correction_id (int): Release correction id. track_unique_id (int): Track unique id. field_name (str): field name. field_value (Any): Field value. """ filters = [ (ReleaseCorrectionDetail.release_correction_id == release_correction_id), # noqa (ReleaseCorrectionDetail.field_name == field_name), (ReleaseCorrectionDetail.key_id == track_unique_id), ] with mysql.ar_db_session() as session: release_correction_detail = ( session.query(ReleaseCorrectionDetail).filter(*filters).first() ) if not release_correction_detail: release_correction_detail = ReleaseCorrectionDetail( table_name="track", release_correction_id=release_correction_id, field_name=field_name, key_value=field_value, key_id=track_unique_id, last_updated_by=179, ) session.add(release_correction_detail)