Add sync engine and wire it into the web app

- Add sync_engine.py: background asyncio loop syncing Evotor products to VK market
- Wire sync_loop into lifespan alongside health_check_loop
- Add SYNC_INTERVAL_SECONDS and VK_DEFAULT_PHOTO_PATH settings to config
- Mount default product image in docker-compose
- Add synced_at column to CachedProduct model + migration
- Show synced_at status in catalog products template
- Fix VK groups API response parsing (handle list vs dict)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mguschin
2026-03-10 17:05:37 +03:00
parent 9a68c083e3
commit 1bf82adbfc
8 changed files with 540 additions and 7 deletions

View File

@@ -0,0 +1,26 @@
"""add synced_at to cached_products
Revision ID: a7b8c9d0e1f2
Revises: f6a7b8c9d0e1
Branch Labels: None
Depends On: None
"""
from alembic import op
import sqlalchemy as sa
revision = "a7b8c9d0e1f2"
down_revision = "f6a7b8c9d0e1"
branch_labels = None
depends_on = None
def upgrade():
op.add_column(
"cached_products",
sa.Column("synced_at", sa.DateTime(), nullable=True),
)
def downgrade():
op.drop_column("cached_products", "synced_at")