2026.03.29 20:00 Gitea_manager javítás előtt
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user