New alert system and panel de control page
This commit is contained in:
@@ -38,6 +38,7 @@ async def clone_demo_data(
|
||||
virtual_tenant_id: str,
|
||||
demo_account_type: str,
|
||||
session_id: Optional[str] = None,
|
||||
session_created_at: Optional[str] = None,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
_: bool = Depends(verify_internal_api_key)
|
||||
):
|
||||
@@ -47,9 +48,23 @@ async def clone_demo_data(
|
||||
This endpoint is called by the demo_session service during session initialization.
|
||||
It clones POS configurations and recent transactions.
|
||||
"""
|
||||
|
||||
|
||||
start_time = datetime.now(timezone.utc)
|
||||
session_created_at = datetime.now(timezone.utc)
|
||||
|
||||
# Parse session_created_at or fallback to now
|
||||
if session_created_at:
|
||||
try:
|
||||
session_time = datetime.fromisoformat(session_created_at.replace('Z', '+00:00'))
|
||||
except (ValueError, AttributeError) as e:
|
||||
logger.warning(
|
||||
"Invalid session_created_at format, using current time",
|
||||
session_created_at=session_created_at,
|
||||
error=str(e)
|
||||
)
|
||||
session_time = datetime.now(timezone.utc)
|
||||
else:
|
||||
logger.warning("session_created_at not provided, using current time")
|
||||
session_time = datetime.now(timezone.utc)
|
||||
|
||||
logger.info(
|
||||
"Starting POS data cloning with date adjustment",
|
||||
@@ -57,7 +72,7 @@ async def clone_demo_data(
|
||||
virtual_tenant_id=virtual_tenant_id,
|
||||
demo_account_type=demo_account_type,
|
||||
session_id=session_id,
|
||||
session_created_at=session_created_at.isoformat()
|
||||
session_time=session_time.isoformat()
|
||||
)
|
||||
|
||||
try:
|
||||
@@ -101,8 +116,8 @@ async def clone_demo_data(
|
||||
last_health_check_at=base_config.last_health_check_at,
|
||||
health_status=base_config.health_status,
|
||||
health_message=base_config.health_message,
|
||||
created_at=datetime.now(timezone.utc),
|
||||
updated_at=datetime.now(timezone.utc),
|
||||
created_at=session_time,
|
||||
updated_at=session_time,
|
||||
notes=f"Cloned from base config {base_config.id} for demo session {session_id}"
|
||||
)
|
||||
|
||||
@@ -162,8 +177,8 @@ async def clone_demo_data(
|
||||
processing_error=base_tx.processing_error,
|
||||
is_duplicate=base_tx.is_duplicate,
|
||||
duplicate_of=base_tx.duplicate_of,
|
||||
created_at=datetime.now(timezone.utc),
|
||||
updated_at=datetime.now(timezone.utc)
|
||||
created_at=session_time,
|
||||
updated_at=session_time
|
||||
)
|
||||
|
||||
db.add(new_tx)
|
||||
@@ -197,8 +212,8 @@ async def clone_demo_data(
|
||||
is_synced_to_sales=base_item.is_synced_to_sales,
|
||||
sync_error=base_item.sync_error,
|
||||
raw_data=base_item.raw_data,
|
||||
created_at=datetime.now(timezone.utc),
|
||||
updated_at=datetime.now(timezone.utc)
|
||||
created_at=session_time,
|
||||
updated_at=session_time
|
||||
)
|
||||
|
||||
db.add(new_item)
|
||||
|
||||
@@ -25,6 +25,10 @@ import structlog
|
||||
from app.models.pos_config import POSConfiguration
|
||||
from app.models.pos_transaction import POSTransaction, POSTransactionItem
|
||||
|
||||
# Add shared path for demo utilities
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent))
|
||||
from shared.utils.demo_dates import BASE_REFERENCE_DATE
|
||||
|
||||
# Configure logging
|
||||
logger = structlog.get_logger()
|
||||
|
||||
@@ -32,9 +36,6 @@ logger = structlog.get_logger()
|
||||
DEMO_TENANT_SAN_PABLO = uuid.UUID("a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6") # Individual bakery
|
||||
DEMO_TENANT_LA_ESPIGA = uuid.UUID("b2c3d4e5-f6a7-48b9-c0d1-e2f3a4b5c6d7") # Central bakery
|
||||
|
||||
# Base reference date for date calculations
|
||||
BASE_REFERENCE_DATE = datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
|
||||
async def generate_pos_config_for_tenant(
|
||||
db: AsyncSession,
|
||||
@@ -245,8 +246,25 @@ async def seed_all(db: AsyncSession):
|
||||
}
|
||||
|
||||
|
||||
def validate_base_reference_date():
|
||||
"""Ensure BASE_REFERENCE_DATE hasn't changed since last seed"""
|
||||
expected_date = datetime(2025, 1, 8, 6, 0, 0, tzinfo=timezone.utc)
|
||||
|
||||
if BASE_REFERENCE_DATE != expected_date:
|
||||
logger.warning(
|
||||
"BASE_REFERENCE_DATE has changed! This may cause date inconsistencies.",
|
||||
current=BASE_REFERENCE_DATE.isoformat(),
|
||||
expected=expected_date.isoformat()
|
||||
)
|
||||
# Don't fail - just warn. Allow intentional changes.
|
||||
|
||||
logger.info("BASE_REFERENCE_DATE validation", date=BASE_REFERENCE_DATE.isoformat())
|
||||
|
||||
|
||||
async def main():
|
||||
"""Main execution function"""
|
||||
validate_base_reference_date() # Add this line
|
||||
|
||||
# Get database URL from environment
|
||||
database_url = os.getenv("POS_DATABASE_URL")
|
||||
if not database_url:
|
||||
|
||||
Reference in New Issue
Block a user