feat: Add organization name and scheduler refresh interval settings

- Superadmin-only organization name setting displayed in dashboard header
- Advanced Options tab with configurable scheduler refresh interval (0 = disabled)
- Make system settings GET endpoint public for frontend reads
- Scheduler reads refresh_seconds from DB dynamically each loop
- Seed default system settings in init_defaults.py
This commit is contained in:
RobbStarkAustria
2026-01-10 08:33:18 +00:00
parent 5a0c1bc686
commit 10f446dfb5
9 changed files with 275 additions and 16 deletions

View File

@@ -5,7 +5,7 @@ Provides key-value storage for system-wide configuration.
from flask import Blueprint, jsonify, request
from server.database import Session
from models.models import SystemSetting
from server.permissions import admin_or_higher
from server.permissions import admin_or_higher, superadmin_only
from sqlalchemy.exc import SQLAlchemyError
system_settings_bp = Blueprint('system_settings', __name__, url_prefix='/api/system-settings')
@@ -31,11 +31,10 @@ def get_all_settings():
@system_settings_bp.route('/<key>', methods=['GET'])
@admin_or_higher
def get_setting(key):
"""
Get a specific system setting by key.
Admin+ only.
Public endpoint - settings are read-only configuration.
"""
session = Session()
try:
@@ -265,3 +264,66 @@ def update_holiday_banner_setting():
finally:
session.close()
@system_settings_bp.route('/organization-name', methods=['GET'])
def get_organization_name():
"""
Get organization name.
Public endpoint - header needs this.
"""
session = Session()
try:
setting = session.query(SystemSetting).filter_by(key='organization_name').first()
name = setting.value if setting and setting.value else ''
return jsonify({'name': name}), 200
except SQLAlchemyError as e:
return jsonify({'error': str(e)}), 500
finally:
session.close()
@system_settings_bp.route('/organization-name', methods=['POST'])
@superadmin_only
def update_organization_name():
"""
Update organization name.
Superadmin only.
Request body:
{
"name": "Meine Organisation"
}
"""
session = Session()
try:
data = request.get_json()
if not data:
return jsonify({'error': 'No data provided'}), 400
name = data.get('name', '')
# Update or create setting
setting = session.query(SystemSetting).filter_by(key='organization_name').first()
if setting:
setting.value = name
else:
setting = SystemSetting(
key='organization_name',
value=name,
description='Name der Organisation (wird im Header angezeigt)'
)
session.add(setting)
session.commit()
return jsonify({
'name': name,
'message': 'Organization name updated successfully'
}), 200
except SQLAlchemyError as e:
session.rollback()
return jsonify({'error': str(e)}), 500
finally:
session.close()