Queue gallery enrichment jobs

This commit is contained in:
qananasikq
2026-08-19 12:06:00 +03:00
parent 33b85ccecd
commit 2913199d1e
8 changed files with 487 additions and 212 deletions
+6 -3
View File
@@ -2,6 +2,7 @@
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy import func, select
from sqlalchemy.orm import selectinload
from ..deps import get_persistence
from ...storage.db import PersistenceService
@@ -24,7 +25,7 @@ def list_cars(
):
# Список авто с фильтрами.
with persistence.session_scope() as session:
query = select(Car)
query = select(Car).options(selectinload(Car.images))
if brand:
query = query.where(Car.brand.ilike(f"%{brand}%"))
@@ -61,7 +62,9 @@ def get_car(
):
# Карточка авто с фото.
with persistence.session_scope() as session:
car = session.get(Car, car_id)
car = session.execute(
select(Car).options(selectinload(Car.images)).where(Car.id == car_id)
).scalar_one_or_none()
if car is None:
raise HTTPException(status_code=404, detail="Car not found")
return CarRead.model_validate(car).model_dump(mode="json")
@@ -75,7 +78,7 @@ def get_car_by_origin(
# Поиск по origin_id.
with persistence.session_scope() as session:
car = session.execute(
select(Car).where(Car.origin_id == origin_id)
select(Car).options(selectinload(Car.images)).where(Car.origin_id == origin_id)
).scalars().first()
if car is None:
raise HTTPException(status_code=404, detail="Car not found")
+16 -7
View File
@@ -14,8 +14,9 @@ from ...storage.models import SyncRun
from ...worker.celery_app import celery_app
from ...worker.constants import MOBILEDE_IMAGES_QUEUE, MOBILEDE_SYNC_QUEUE
from ...worker.tasks import (
_get_redis,
_queue_mobilede_detail_listing_ids,
mobilede_enrich_images_batch_task,
mobilede_sync_detail_task,
mobilede_sync_runtime_segments_task,
mobilede_sync_search_task,
)
@@ -74,15 +75,23 @@ def start_mobilede_sync_search(body: MobileDeSyncSearchRequest):
@router.post("/mobilede/tasks/sync-detail")
def start_mobilede_sync_detail(body: MobileDeSyncDetailRequest):
result = mobilede_sync_detail_task.apply_async(
kwargs=body.model_dump(),
queue=MOBILEDE_SYNC_QUEUE,
queue_result = _queue_mobilede_detail_listing_ids(
_get_redis(),
[body.listing_id],
lane=body.lane,
priority=9,
)
if queue_result["queued"]:
status = "queued"
elif queue_result["duplicate"]:
status = "duplicate"
else:
status = "queue_full"
return {
"task_id": result.id,
"status": "queued",
"queue": MOBILEDE_SYNC_QUEUE,
"status": status,
"queue": MOBILEDE_IMAGES_QUEUE,
"listing_id": body.listing_id,
**queue_result,
}