Improve UI

This commit is contained in:
Urtzi Alfaro
2025-12-30 14:40:20 +01:00
parent e494ea8635
commit c07df124fb
71 changed files with 647 additions and 265 deletions

View File

@@ -449,7 +449,41 @@ class EnhancedUserService:
new_role=new_role,
error=str(e))
raise DatabaseError(f"Failed to update role: {str(e)}")
async def update_user_field(
self,
user_id: str,
field_name: str,
field_value: Any
) -> bool:
"""Update a single field on a user record"""
try:
async with self.database_manager.get_session() as session:
user_repo = UserRepository(User, session)
# Update the specific field
updated_user = await user_repo.update(user_id, {field_name: field_value})
if not updated_user:
logger.error("User not found for field update",
user_id=user_id,
field_name=field_name)
return False
await session.commit()
logger.info("User field updated",
user_id=user_id,
field_name=field_name)
return True
except Exception as e:
logger.error("Failed to update user field",
user_id=user_id,
field_name=field_name,
error=str(e))
return False
async def get_user_activity(self, user_id: str) -> Dict[str, Any]:
"""Get user activity information using repository pattern"""
try:

View File

@@ -29,8 +29,10 @@ class Tenant(Base):
latitude = Column(Float)
longitude = Column(Float)
# Timezone configuration for accurate scheduling
# Regional/Localization configuration
timezone = Column(String(50), default="Europe/Madrid", nullable=False)
currency = Column(String(3), default="EUR", nullable=False) # Currency code: EUR, USD, GBP
language = Column(String(5), default="es", nullable=False) # Language code: es, en, eu
# Contact info
phone = Column(String(20))

View File

@@ -68,6 +68,10 @@ class TenantResponse(BaseModel):
address: str
city: str
postal_code: str
# Regional/Localization settings
timezone: Optional[str] = "Europe/Madrid"
currency: Optional[str] = "EUR" # Currency code: EUR, USD, GBP
language: Optional[str] = "es" # Language code: es, en, eu
phone: Optional[str]
is_active: bool
subscription_plan: Optional[str] = None # Populated from subscription relationship or service
@@ -125,6 +129,10 @@ class TenantUpdate(BaseModel):
phone: Optional[str] = None
business_type: Optional[str] = None
business_model: Optional[str] = None
# Regional/Localization settings
timezone: Optional[str] = None
currency: Optional[str] = Field(None, pattern=r'^(EUR|USD|GBP)$') # Currency code
language: Optional[str] = Field(None, pattern=r'^(es|en|eu)$') # Language code
class TenantListResponse(BaseModel):
"""Response schema for listing tenants"""

View File

@@ -68,7 +68,10 @@ def upgrade() -> None:
sa.Column('postal_code', sa.String(length=10), nullable=False),
sa.Column('latitude', sa.Float(), nullable=True),
sa.Column('longitude', sa.Float(), nullable=True),
sa.Column('timezone', sa.String(length=50), nullable=False),
# Regional/Localization configuration
sa.Column('timezone', sa.String(length=50), nullable=False, server_default='Europe/Madrid'),
sa.Column('currency', sa.String(length=3), nullable=False, server_default='EUR'), # Currency code: EUR, USD, GBP
sa.Column('language', sa.String(length=5), nullable=False, server_default='es'), # Language code: es, en, eu
sa.Column('phone', sa.String(length=20), nullable=True),
sa.Column('email', sa.String(length=255), nullable=True),
sa.Column('is_active', sa.Boolean(), nullable=True),

View File

@@ -364,6 +364,10 @@ class EnhancedTrainingService:
job_id, results=json_safe_result
)
# CRITICAL: Commit the session to persist the completed status to database
# Without this commit, the status update is lost when the session closes
await session.commit()
logger.info("Enhanced training job completed successfully",
job_id=job_id,
models_created=len(stored_models))
@@ -380,7 +384,10 @@ class EnhancedTrainingService:
await self.training_log_repo.complete_training_log(
job_id, error_message=str(e)
)
# Commit the failure status to database
await session.commit()
error_result = {
"job_id": job_id,
"tenant_id": tenant_id,