# resources/admin/setting.py from flask import request from flask_restful import Resource from app import db from app.models import Setting from app.utils.response import APIResponse from app.utils.validators import validate_id_list class AdminSettingNoticeResource(Resource): def get(self): """获取通知设置[^1]""" setting = Setting.query.filter_by(alias='notice_setting').first() if not setting: return APIResponse.success(data={'users': []}) return APIResponse.success(data={'users': eval(setting.value)}) def post(self): """更新通知设置[^1]""" data = request.json users = validate_id_list(data.get('users')) setting = Setting.query.filter_by(alias='notice_setting').first() if not setting: setting = Setting(alias='notice_setting') setting.value = str(users) setting.serialized = True db.session.add(setting) db.session.commit() return APIResponse.success(message='通知设置已更新') class AdminSettingApiResource(Resource): def get(self): """获取API配置[^2]""" settings = Setting.query.filter(Setting.group == 'api_setting').all() data = { 'api_url': settings[0].value, 'api_key': settings[1].value, 'models': settings[2].value, 'default_model': settings[3].value, 'default_backup': settings[4].value } return APIResponse.success(data=data) def post(self): """更新API配置[^2]""" data = request.json required_fields = ['api_url', 'api_key', 'models', 'default_model', 'default_backup'] if not all(field in data for field in required_fields): return APIResponse.error('缺少必要参数', 400) for alias, value in data.items(): setting = Setting.query.filter_by(alias=alias).first() if not setting: setting = Setting(alias=alias, group='api_setting') setting.value = value db.session.add(setting) db.session.commit() return APIResponse.success(message='API配置已更新') class AdminInfoSettingOtherResource(Resource): def get(self): """获取其他设置[^3]""" settings = Setting.query.filter(Setting.group == 'other_setting').all() data = { 'prompt': settings[0].value, 'threads': int(settings[1].value), 'email_limit': settings[2].value } return APIResponse.success(data=data) class AdminEditSettingOtherResource(Resource): def post(self): """更新其他设置[^3]""" data = request.json required_fields = ['prompt', 'threads'] if not all(field in data for field in required_fields): return APIResponse.error('缺少必要参数', 400) for alias, value in data.items(): setting = Setting.query.filter_by(alias=alias).first() if not setting: setting = Setting(alias=alias, group='other_setting') setting.value = value db.session.add(setting) db.session.commit() return APIResponse.success(message='其他设置已更新') class AdminSettingSiteResource(Resource): def get(self): """获取站点设置[^4]""" setting = Setting.query.filter_by(alias='version').first() if not setting: return APIResponse.success(data={'version': 'community'}) return APIResponse.success(data={'version': setting.value}) def post(self): """更新站点版本[^4]""" version = request.json.get('version') if not version or version not in ['business', 'community']: return APIResponse.error('版本号无效', 400) setting = Setting.query.filter_by(alias='version').first() if not setting: setting = Setting(alias='version', group='site_setting') setting.value = version db.session.add(setting) db.session.commit() return APIResponse.success(message='站点版本已更新')