feat: microservices scaffold + Auth Service (Step 1)
- Add shared/ module: config, db, models, schemas, redis utilities - Add Auth Service (services/auth/): register, login, refresh, me, ForwardAuth /verify endpoint for Traefik - Add Traefik config: ACME/Cloudflare DNS-01, dynamic routing, ForwardAuth middleware, sticky sessions for WS Gateway - Add service scaffolds: ws-gateway, chat, batch-agent, billing (READMEs) - Add redis>=5.0.0 to requirements.txt - Monolith app/ is untouched — strangler fig migration
This commit is contained in:
53
shared/redis.py
Normal file
53
shared/redis.py
Normal file
@@ -0,0 +1,53 @@
|
||||
"""Redis client and pub/sub utilities for inter-service communication.
|
||||
|
||||
All services that need Redis import from here.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import redis.asyncio as aioredis
|
||||
|
||||
from shared.config import settings
|
||||
|
||||
redis_client: aioredis.Redis = aioredis.from_url(
|
||||
settings.REDIS_URL,
|
||||
decode_responses=True,
|
||||
)
|
||||
|
||||
|
||||
# ── Channel naming conventions ────────────────────────────────────────
|
||||
# See /memories/repo/microservices-architecture.md for full list.
|
||||
|
||||
def ws_out_channel(user_id: str) -> str:
|
||||
"""Frames to forward to Electron via WS Gateway."""
|
||||
return f"ws:out:{user_id}"
|
||||
|
||||
|
||||
def chat_request_channel(user_id: str) -> str:
|
||||
"""Chat requests (home + floating) from WS Gateway → Chat Service."""
|
||||
return f"chat:request:{user_id}"
|
||||
|
||||
|
||||
def batch_request_channel(user_id: str) -> str:
|
||||
"""Batch requests (journey + triggers) from WS Gateway → Batch Agent."""
|
||||
return f"batch:request:{user_id}"
|
||||
|
||||
|
||||
def tool_result_key(call_id: str) -> str:
|
||||
"""Tool result list: LPUSH by WS Gateway, BRPOP by Chat/Batch."""
|
||||
return f"tool:result:{call_id}"
|
||||
|
||||
|
||||
def device_key(user_id: str) -> str:
|
||||
"""Device registry hash."""
|
||||
return f"ws:devices:{user_id}"
|
||||
|
||||
|
||||
def tier_changed_channel(user_id: str) -> str:
|
||||
"""Billing tier change notifications."""
|
||||
return f"tier:changed:{user_id}"
|
||||
|
||||
|
||||
def journey_session_key(user_id: str) -> str:
|
||||
"""Journey builder session (String + TTL 1800s)."""
|
||||
return f"journey:{user_id}"
|
||||
Reference in New Issue
Block a user