from typing import Iterable, List, Tuple from db_schema.schemas.admin import AuditLog, AuditLogTypes from flask import current_app, session from sqlalchemy.orm import Session from delphi_slz_admin.helpers import utcnow from delphi_slz_admin.services.config import Config class AuditLogService: def __init__(self, db_session: Session) -> None: self.db_session = db_session @staticmethod def _get_user_data_from_session() -> Tuple[str, str]: config: Config = current_app.config['CONFIG'] if config.fake_login_enabled: return 'fake_user_id', 'Fake User' if 'profile' not in session: return '', '' return session['profile'].get('user_id', ''), session['profile'].get('name', '') def log_content_status_set_completed(self, ids: List[int]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.CONTENT_STATUS_SET_COMPLETED audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'content_status_ids': ids, } self.db_session.add(audit_log) def log_unit_of_work_set_completed(self, ids: List[int]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.UOW_SET_COMPLETED audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'unit_of_work_ids': ids, } self.db_session.add(audit_log) def log_unit_of_work_set_min_completed(self, ids: List[int]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.UOW_SET_MIN_COMPLETED audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'unit_of_work_ids': ids, } self.db_session.add(audit_log) def log_apps_unit_of_work_restart_failed_backfill(self, ids: List[int]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.APPS_UOW_RESTART_FAILED_BACKFILL audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'apps_unit_of_work_ids': ids, } self.db_session.add(audit_log) def log_slz_unit_of_work_reprocessed(self, codes: Iterable[str]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.SLZ_UOW_REPROCESSED audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'slz_unit_of_work_codes': codes, } self.db_session.add(audit_log) def log_apps_unit_of_work_reprocessed(self, ids: List[int]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.APPS_UOW_REPROCESSED audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'apps_unit_of_work_ids': ids, } self.db_session.add(audit_log) def log_exp_unit_of_work_reprocessed(self, uow_ids: List[int], cs_ids: List[int]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.EXP_UOW_REPROCESSED audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'slz_unit_of_work_ids': uow_ids, 'slz_content_status_ids': cs_ids, } self.db_session.add(audit_log) def log_exp_content_status_reprocessed(self, ids: List[int]) -> None: audit_log = AuditLog() audit_log.created_at = utcnow() audit_log.event_type = AuditLogTypes.EXP_CONTENT_STATUS_REPROCESSED audit_log.user_id, audit_log.user_name = self._get_user_data_from_session() audit_log.extra_data = { 'slz_content_status_ids': ids, } self.db_session.add(audit_log)