초기화
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# setting package marker
|
||||
from .db_manager import (
|
||||
get_all_settings,
|
||||
get_setting,
|
||||
update_settings
|
||||
)
|
||||
from .router import router
|
||||
@@ -0,0 +1,75 @@
|
||||
import mysql.connector
|
||||
from database.connection import get_db_connection
|
||||
import logging
|
||||
|
||||
# 모든 설정 조회
|
||||
def get_all_settings():
|
||||
settings = []
|
||||
try:
|
||||
with get_db_connection() as conn:
|
||||
with conn.cursor(dictionary=True) as cursor:
|
||||
cursor.execute("SELECT `id`, `setting_group`, `setting_key`, `setting_value`, `setting_type`, `description` FROM settings")
|
||||
results = cursor.fetchall()
|
||||
for row in results:
|
||||
settings.append({
|
||||
"id": row['id'],
|
||||
"setting_group": row['setting_group'],
|
||||
"setting_key": row['setting_key'],
|
||||
"setting_value": row['setting_value'],
|
||||
"setting_type": row['setting_type'],
|
||||
"description": row['description']
|
||||
})
|
||||
return settings
|
||||
except mysql.connector.Error as err:
|
||||
logging.error(f"Error getting all settings: {err}")
|
||||
return []
|
||||
|
||||
# 특정 설정 조회
|
||||
def get_setting(key):
|
||||
try:
|
||||
with get_db_connection() as conn:
|
||||
with conn.cursor(dictionary=True) as cursor:
|
||||
cursor.execute("SELECT `setting_value`, `setting_type` FROM settings WHERE `setting_key` = %s", (key,))
|
||||
result = cursor.fetchone()
|
||||
if result:
|
||||
value = result['setting_value']
|
||||
value_type = result['setting_type']
|
||||
if value_type == 'integer':
|
||||
return int(value)
|
||||
elif value_type == 'decimal':
|
||||
return float(value)
|
||||
elif value_type == 'boolean':
|
||||
return value.lower() in ('true', '1', 't')
|
||||
else:
|
||||
return value
|
||||
return None
|
||||
except mysql.connector.Error as err:
|
||||
logging.error(f"Error getting setting for key {key}: {err}")
|
||||
return None
|
||||
|
||||
# 설정 업데이트
|
||||
def update_settings(settings_data):
|
||||
try:
|
||||
with get_db_connection() as conn:
|
||||
with conn.cursor() as cursor:
|
||||
sql = """
|
||||
UPDATE settings
|
||||
SET `setting_value` = %s
|
||||
WHERE `setting_key` = %s
|
||||
"""
|
||||
|
||||
values_to_update = []
|
||||
for setting in settings_data:
|
||||
key = setting.get('setting_key')
|
||||
value = setting.get('setting_value')
|
||||
|
||||
if key is not None and value is not None:
|
||||
values_to_update.append((str(value), key))
|
||||
|
||||
if values_to_update:
|
||||
cursor.executemany(sql, values_to_update)
|
||||
conn.commit()
|
||||
return True
|
||||
except mysql.connector.Error as err:
|
||||
logging.error(f"Error updating settings: {err}")
|
||||
return False
|
||||
@@ -0,0 +1,36 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from typing import List, Optional
|
||||
from .db_manager import (
|
||||
get_all_settings,
|
||||
update_settings
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/settings", tags=["settings"])
|
||||
|
||||
# --- Pydantic Schemas ---
|
||||
class SettingSchema(BaseModel):
|
||||
id: Optional[int] = None
|
||||
setting_group: str
|
||||
setting_key: str
|
||||
setting_value: str
|
||||
setting_type: str
|
||||
description: Optional[str] = None
|
||||
|
||||
class SettingUpdateSchema(BaseModel):
|
||||
setting_key: str
|
||||
setting_value: str
|
||||
|
||||
# --- Settings APIs ---
|
||||
@router.get("/", response_model=List[SettingSchema])
|
||||
def list_settings():
|
||||
return get_all_settings()
|
||||
|
||||
@router.put("/", response_model=dict)
|
||||
def update_multiple_settings(settings: List[SettingUpdateSchema]):
|
||||
# Pydantic 모델 리스트를 일반 dict 리스트로 변환하여 전달
|
||||
data = [s.dict() for s in settings]
|
||||
success = update_settings(data)
|
||||
if not success:
|
||||
raise HTTPException(status_code=500, detail="Failed to update settings")
|
||||
return {"status": "success"}
|
||||
Reference in New Issue
Block a user