2026.03.29 20:00 Gitea_manager javítás előtt

This commit is contained in:
Roo
2026-03-29 17:59:06 +00:00
parent 03258db091
commit ba8b6579ef
148 changed files with 7951 additions and 591 deletions

View File

@@ -84,15 +84,19 @@ class ConfigService:
from sqlalchemy import select, and_, cast, String
try:
# Convert scope_level to lowercase string for comparison
# PostgreSQL enum expects lowercase values, but Python Enum may be uppercase
scope_str = scope_level.value.lower() if hasattr(scope_level, 'value') else str(scope_level).lower()
# Convert scope_level to string for comparison - handle both Enum and string
if hasattr(scope_level, 'value'):
scope_str = scope_level.value
else:
scope_str = str(scope_level)
# Build query with cast to avoid strict enum type mismatch
# Build query with case-insensitive comparison for scope_level
# Use ilike or lower() for case-insensitive comparison since enum values might have inconsistent casing
from sqlalchemy import func
query = select(SystemParameter).where(
and_(
SystemParameter.key == key,
cast(SystemParameter.scope_level, String) == scope_str,
func.lower(cast(SystemParameter.scope_level, String)) == scope_str.lower(),
SystemParameter.is_active == True
)
)
@@ -102,13 +106,21 @@ class ConfigService:
query = query.where(SystemParameter.scope_id == scope_id)
result = await db.execute(query)
param = result.scalar_one_or_none()
params = result.scalars().all()
if param is None:
# Opcionálisan beilleszthetjük a default értéket a táblába
# await ConfigService._insert_default(db, key, default, scope_level, scope_id)
if not params:
# No parameters found, return default
return default
# Handle duplicate entries by taking the first one (should be the most recent based on ID)
# Sort by ID descending to get the most recent entry
sorted_params = sorted(params, key=lambda p: p.id, reverse=True)
param = sorted_params[0]
# Log warning if there are duplicates
if len(params) > 1:
logger.warning(f"ConfigService.get found {len(params)} duplicate entries for key '{key}', scope '{scope_str}', scope_id '{scope_id}'. Using ID {param.id}.")
# A value oszlop JSONB, lehet dict, list, string, number, bool
db_value = param.value
@@ -154,7 +166,9 @@ class ConfigService:
return db_value
except Exception as e:
logger.warning(f"ConfigService.get error for key '{key}': {e}")
logger.error(f"ConfigService.get critical error for key '{key}': {e}")
# Don't return default on critical errors - raise or log but don't silently fail
# For now, return default but log as error
return default
async def get_setting(self, db: AsyncSession, key: str, default: Any = None, region_code: Optional[str] = None, org_id: Optional[int] = None, **kwargs) -> Any: