Validation_Suite/validation-suite/backend/mercury/app/services/report_settings.py

77 lines
3 KiB
Python

from __future__ import annotations
from sqlalchemy import select
from sqlalchemy.orm import Session
from app.models.report_settings import (
OrionImagePosition,
OrionImageSize,
OrionLayoutProfile,
OrionLogoSize,
OrionPageMargin,
OrionReportSettings,
OrionReportSettingsScope,
OrionSignatureMode,
OrionSpacing,
OrionTableFontSize,
)
from app.models.user import User
from app.schemas.domain import OrionReportSettingsUpdate
class OrionReportSettingsService:
def __init__(self, session: Session) -> None:
self.session = session
def get_global(self) -> OrionReportSettings:
settings = self.session.scalar(
select(OrionReportSettings).where(
OrionReportSettings.scope == OrionReportSettingsScope.global_.value
)
)
if settings is not None:
return settings
settings = OrionReportSettings(
scope=OrionReportSettingsScope.global_.value,
layout_profile=OrionLayoutProfile.standard.value,
show_cover_result_text=True,
signature_mode=OrionSignatureMode.technical_only.value,
image_size=OrionImageSize.medium.value,
page_break_before_main_chapters=True,
page_margin=OrionPageMargin.standard.value,
section_spacing=OrionSpacing.standard.value,
table_layout=OrionSpacing.standard.value,
table_font_size=OrionTableFontSize.standard.value,
image_position=OrionImagePosition.side_by_side.value,
max_images_per_page=2,
show_image_captions=True,
show_header=True,
show_footer=True,
logo_size=OrionLogoSize.medium.value,
compact_cover=False,
)
self.session.add(settings)
self.session.flush()
return settings
def update_global(self, payload: OrionReportSettingsUpdate, user: User) -> OrionReportSettings:
settings = self.get_global()
settings.layout_profile = payload.layout_profile.value
settings.show_cover_result_text = payload.show_cover_result_text
settings.signature_mode = payload.signature_mode.value
settings.image_size = payload.image_size.value
settings.page_break_before_main_chapters = payload.page_break_before_main_chapters
settings.page_margin = payload.page_margin.value
settings.section_spacing = payload.section_spacing.value
settings.table_layout = payload.table_layout.value
settings.table_font_size = payload.table_font_size.value
settings.image_position = payload.image_position.value
settings.max_images_per_page = payload.max_images_per_page
settings.show_image_captions = payload.show_image_captions
settings.show_header = payload.show_header
settings.show_footer = payload.show_footer
settings.logo_size = payload.logo_size.value
settings.compact_cover = payload.compact_cover
settings.updated_by_user_id = user.id
self.session.flush()
return settings