- Unify API: lib/api.ts uses /api/v1, inbox uses /api/inbox (rewrites) - Remove localhost refs: openapi, inbox page - Add rewrites: /api/inbox|tmc -> inbox-server, /api/v1 -> FastAPI - Add stub routes: knowledge/insights, recommendations, search, log-error - Transfer from PAPA: prompts (inspection, tmc), scripts, supabase, data/tmc-requests - Fix inbox-server: ORDER BY created_at, package.json - Remove redundant app/api/inbox/files route (rewrites handle it) - knowledge/ in gitignore (large PDFs) Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
"""
|
|
Redpanda интеграция. ARC-003: при ENABLE_REDPANDA=false — заглушка.
|
|
"""
|
|
|
|
from app.core.config import settings
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
producer = None
|
|
|
|
|
|
async def init_redpanda():
|
|
"""Инициализация Redpanda (только при ENABLE_REDPANDA=true)"""
|
|
global producer
|
|
if not settings.ENABLE_REDPANDA:
|
|
raise NotImplementedError("Redpanda отключён для MVP. Установите ENABLE_REDPANDA=true для использования.")
|
|
from aiokafka import AIOKafkaProducer
|
|
import json as _json
|
|
brokers = settings.REDPANDA_BROKERS.split(",")
|
|
producer = AIOKafkaProducer(
|
|
bootstrap_servers=brokers,
|
|
client_id=settings.REDPANDA_CLIENT_ID,
|
|
)
|
|
await producer.start()
|
|
logger.info("Redpanda producer connected to %s", brokers)
|
|
|
|
|
|
async def publish_event(topic: str, event: dict, key: str | None = None):
|
|
"""Публикация события в Redpanda"""
|
|
if not settings.ENABLE_REDPANDA:
|
|
raise NotImplementedError("Redpanda отключён для MVP.")
|
|
if not producer:
|
|
await init_redpanda()
|
|
import json
|
|
value = json.dumps(event).encode("utf-8")
|
|
key_bytes = key.encode("utf-8") if key else None
|
|
await producer.send_and_wait(topic, value, key=key_bytes)
|
|
logger.info("Event published to %s", topic)
|
|
|
|
|
|
async def get_producer():
|
|
"""Получение producer"""
|
|
if not settings.ENABLE_REDPANDA:
|
|
raise NotImplementedError("Redpanda отключён для MVP.")
|
|
if not producer:
|
|
await init_redpanda()
|
|
return producer
|