- Implemented SvelteKit frontend with authentication callback handling. - Created demo routes and paraglide localization functionality. - Added health check and entrypoint scripts for backend services. - Established PostgreSQL and Keycloak initialization scripts with health checks. - Introduced models for database schema using SQLAlchemy. - Configured Vite and SvelteKit for development and testing environments. - Added health check script to verify service statuses and resource usage. - Created Docker entrypoint scripts for seamless service startup.
144 lines
4.1 KiB
Python
144 lines
4.1 KiB
Python
"""
|
|
DTOs para módulo de licencias
|
|
"""
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
from enum import Enum
|
|
|
|
|
|
class LicensePlanDTO(str, Enum):
|
|
"""Planes de licencia"""
|
|
FREE = "free"
|
|
BASIC = "basic"
|
|
PROFESSIONAL = "professional"
|
|
ENTERPRISE = "enterprise"
|
|
|
|
|
|
class LicenseStatusDTO(str, Enum):
|
|
"""Estados de licencia"""
|
|
ACTIVE = "active"
|
|
EXPIRED = "expired"
|
|
SUSPENDED = "suspended"
|
|
PENDING = "pending"
|
|
CANCELLED = "cancelled"
|
|
|
|
|
|
class LicenseCreateDTO(BaseModel):
|
|
"""DTO para crear una nueva licencia"""
|
|
tenant_id: int = Field(..., description="ID del tenant")
|
|
plan: LicensePlanDTO = Field(..., description="Plan de licencia")
|
|
max_users: int = Field(default=5, ge=1, description="Número máximo de usuarios")
|
|
max_storage_gb: int = Field(default=10, ge=1, description="Almacenamiento máximo en GB")
|
|
max_monthly_operations: int = Field(default=1000, ge=1, description="Operaciones mensuales máximas")
|
|
|
|
feature_api_access: bool = Field(default=True)
|
|
feature_advanced_reports: bool = Field(default=False)
|
|
feature_integrations: bool = Field(default=False)
|
|
feature_dedicated_support: bool = Field(default=False)
|
|
|
|
starts_at: datetime = Field(..., description="Fecha de inicio de vigencia")
|
|
expires_at: datetime = Field(..., description="Fecha de expiración")
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"tenant_id": 1,
|
|
"plan": "professional",
|
|
"max_users": 20,
|
|
"max_storage_gb": 100,
|
|
"max_monthly_operations": 10000,
|
|
"feature_api_access": True,
|
|
"feature_advanced_reports": True,
|
|
"feature_integrations": True,
|
|
"feature_dedicated_support": False,
|
|
"starts_at": "2025-01-01T00:00:00Z",
|
|
"expires_at": "2025-12-31T23:59:59Z"
|
|
}
|
|
}
|
|
|
|
|
|
class LicenseUpdateDTO(BaseModel):
|
|
"""DTO para actualizar una licencia"""
|
|
plan: Optional[LicensePlanDTO] = None
|
|
status: Optional[LicenseStatusDTO] = None
|
|
max_users: Optional[int] = Field(None, ge=1)
|
|
max_storage_gb: Optional[int] = Field(None, ge=1)
|
|
max_monthly_operations: Optional[int] = Field(None, ge=1)
|
|
|
|
feature_api_access: Optional[bool] = None
|
|
feature_advanced_reports: Optional[bool] = None
|
|
feature_integrations: Optional[bool] = None
|
|
feature_dedicated_support: Optional[bool] = None
|
|
|
|
expires_at: Optional[datetime] = None
|
|
|
|
|
|
class LicenseResponseDTO(BaseModel):
|
|
"""DTO para respuesta de licencia"""
|
|
id: int
|
|
tenant_id: int
|
|
plan: LicensePlanDTO
|
|
status: LicenseStatusDTO
|
|
|
|
max_users: int
|
|
max_storage_gb: int
|
|
max_monthly_operations: int
|
|
|
|
feature_api_access: bool
|
|
feature_advanced_reports: bool
|
|
feature_integrations: bool
|
|
feature_dedicated_support: bool
|
|
|
|
starts_at: datetime
|
|
expires_at: datetime
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class LicenseValidationResponseDTO(BaseModel):
|
|
"""DTO para respuesta de validación de licencia"""
|
|
is_valid: bool
|
|
status: LicenseStatusDTO
|
|
plan: LicensePlanDTO
|
|
expires_at: datetime
|
|
reason: Optional[str] = None
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"is_valid": True,
|
|
"status": "active",
|
|
"plan": "professional",
|
|
"expires_at": "2025-12-31T23:59:59Z",
|
|
"reason": None
|
|
}
|
|
}
|
|
|
|
|
|
class LicenseUsageResponseDTO(BaseModel):
|
|
"""DTO para respuesta de uso de licencia"""
|
|
tenant_id: int
|
|
period_start: datetime
|
|
period_end: datetime
|
|
active_users: int
|
|
storage_used_gb: int
|
|
operations_count: int
|
|
api_calls_count: int
|
|
|
|
# Límites actuales
|
|
max_users: int
|
|
max_storage_gb: int
|
|
max_monthly_operations: int
|
|
|
|
# Porcentajes de uso
|
|
users_usage_percent: float
|
|
storage_usage_percent: float
|
|
operations_usage_percent: float
|
|
|
|
class Config:
|
|
from_attributes = True
|