diff --git a/web/migrations/versions/0009_sync_config_task_flags.py b/web/migrations/versions/0009_sync_config_task_flags.py new file mode 100644 index 0000000..d76dbe5 --- /dev/null +++ b/web/migrations/versions/0009_sync_config_task_flags.py @@ -0,0 +1,18 @@ +"""Add evo_mirror_enabled and vk_mirror_enabled to sync_configs.""" +revision = "0009" +down_revision = "0008" +branch_labels = None +depends_on = None + +import sqlalchemy as sa +from alembic import op + + +def upgrade(): + op.add_column("sync_configs", sa.Column("evo_mirror_enabled", sa.Boolean, nullable=False, server_default="0")) + op.add_column("sync_configs", sa.Column("vk_mirror_enabled", sa.Boolean, nullable=False, server_default="0")) + + +def downgrade(): + op.drop_column("sync_configs", "vk_mirror_enabled") + op.drop_column("sync_configs", "evo_mirror_enabled") diff --git a/web/models/connections.py b/web/models/connections.py index 392ddc1..e486187 100644 --- a/web/models/connections.py +++ b/web/models/connections.py @@ -57,6 +57,8 @@ class SyncConfig(Base): id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) is_enabled = Column(Boolean, nullable=False, default=False) + evo_mirror_enabled = Column(Boolean, nullable=False, default=False) + vk_mirror_enabled = Column(Boolean, nullable=False, default=False) confirmed_at = Column(DateTime, nullable=True) price_multiplier = Column(Numeric(10, 4), nullable=False, default=1.0) created_at = Column(DateTime, nullable=False, server_default=func.now()) diff --git a/web/routes/sync.py b/web/routes/sync.py index f344927..6e423b5 100644 --- a/web/routes/sync.py +++ b/web/routes/sync.py @@ -3,7 +3,6 @@ from datetime import datetime, timezone from fastapi import APIRouter, Depends, Request from fastapi.responses import RedirectResponse - from sqlalchemy.orm import Session from web.auth.session import get_current_user @@ -21,10 +20,6 @@ def _render(request: Request, ctx: dict): return templates.TemplateResponse(ctx.pop("request"), "sync.html", ctx) -def _now(): - return datetime.now(timezone.utc).replace(tzinfo=None) - - @router.get("/sync") async def sync_get(request: Request, db: Session = Depends(get_db)): try: @@ -48,8 +43,12 @@ async def sync_settings_post(request: Request, db: Session = Depends(get_db)): return RedirectResponse("/login", 303) form = await request.form() - raw_multiplier = str(form.get("price_multiplier", "1")).strip() + evo_mirror_enabled = form.get("evo_mirror_enabled") == "1" + vk_mirror_enabled = form.get("vk_mirror_enabled") == "1" + sync_enabled = form.get("is_enabled") == "1" + + raw_multiplier = str(form.get("price_multiplier", "1")).strip() try: multiplier = float(raw_multiplier) if multiplier <= 0: @@ -59,11 +58,16 @@ async def sync_settings_post(request: Request, db: Session = Depends(get_db)): config = db.query(SyncConfig).filter_by(user_id=user.id).first() if config: + config.evo_mirror_enabled = evo_mirror_enabled + config.vk_mirror_enabled = vk_mirror_enabled + config.is_enabled = sync_enabled config.price_multiplier = multiplier else: config = SyncConfig( user_id=user.id, - is_enabled=False, + evo_mirror_enabled=evo_mirror_enabled, + vk_mirror_enabled=vk_mirror_enabled, + is_enabled=sync_enabled, price_multiplier=multiplier, ) db.add(config) diff --git a/web/tasks/catalog.py b/web/tasks/catalog.py index 9e5581c..782c046 100644 --- a/web/tasks/catalog.py +++ b/web/tasks/catalog.py @@ -215,6 +215,9 @@ def refresh_catalog(self) -> dict: .all() ) for conn in connections: + cfg = db.query(SyncConfig).filter_by(user_id=conn.user_id).first() + if not cfg or not cfg.evo_mirror_enabled: + continue try: _sync_user(db, conn.user_id, conn.access_token) results["ok"] += 1 diff --git a/web/tasks/vk_catalog.py b/web/tasks/vk_catalog.py index c8c3cb4..c994202 100644 --- a/web/tasks/vk_catalog.py +++ b/web/tasks/vk_catalog.py @@ -10,7 +10,7 @@ from celery import shared_task import web.lib.api_logger as api_logger from web.config import settings from web.database import SessionLocal -from web.models.connections import VkCachedAlbum, VkCachedProduct, VkConnection +from web.models.connections import SyncConfig, VkCachedAlbum, VkCachedProduct, VkConnection logger = logging.getLogger(__name__) @@ -172,6 +172,9 @@ def refresh_vk_catalog(self) -> dict: .all() ) for conn in connections: + cfg = db.query(SyncConfig).filter_by(user_id=conn.user_id).first() + if not cfg or not cfg.vk_mirror_enabled: + continue try: _sync_user(db, conn.user_id, conn.access_token, conn.vk_user_id) results["ok"] += 1 diff --git a/web/templates/sync.html b/web/templates/sync.html index aac08a8..536347d 100644 --- a/web/templates/sync.html +++ b/web/templates/sync.html @@ -10,17 +10,62 @@
Настройки сохранены.