feat: V2 microservices stack — backend services, gateway, JWT auth
Add full V2 architecture: identity, content, studio (.NET 10) and file, render, notification, gateway (Go) services with vendored deps, plus DB migrations, event/API contracts, and an init-db script. Wire the Next.js frontend to the gateway: server-side JWT auth routes (login/register/refresh/logout/me), gateway fetch helper, and session/ cookie/jwt helpers under src/lib. Containerize the stack via docker-compose.v2.yml and per-service Dockerfiles. Base images resolve through a Nexus mirror (Docker Hub) and MCR directly; npm/NuGet pull from Nexus groups. Self-host fonts via next/font/local to avoid Google Fonts (geo-blocked). Add CI workflow and ignore .env.v2, *.stackdump, and .NET bin/obj. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# =====================================================================
|
||||
# Content Events — published by Content Service
|
||||
# =====================================================================
|
||||
events:
|
||||
|
||||
content.template.published.v1:
|
||||
routing_key: content.template.published.v1
|
||||
description: A template (project_container) was published.
|
||||
payload:
|
||||
type: object
|
||||
required: [container_id, slug, primary_mode]
|
||||
properties:
|
||||
container_id: { type: string, format: uuid }
|
||||
tenant_id: { type: string, format: uuid, nullable: true }
|
||||
slug: { type: string }
|
||||
name: { type: string }
|
||||
primary_mode: { type: string }
|
||||
project_ids:
|
||||
type: array
|
||||
items: { type: string, format: uuid }
|
||||
|
||||
content.template.unpublished.v1:
|
||||
routing_key: content.template.unpublished.v1
|
||||
payload:
|
||||
type: object
|
||||
required: [container_id, reason]
|
||||
properties:
|
||||
container_id: { type: string, format: uuid }
|
||||
tenant_id: { type: string, format: uuid, nullable: true }
|
||||
slug: { type: string }
|
||||
reason: { type: string }
|
||||
|
||||
content.font.installed.v1:
|
||||
routing_key: content.font.installed.v1
|
||||
description: Font registered as installed on render nodes.
|
||||
payload:
|
||||
type: object
|
||||
required: [font_id, name, system_name, node_ids]
|
||||
properties:
|
||||
font_id: { type: string, format: uuid }
|
||||
name: { type: string }
|
||||
system_name: { type: string }
|
||||
node_ids:
|
||||
type: array
|
||||
items: { type: string, format: uuid }
|
||||
|
||||
content.svg_preview.generated.v1:
|
||||
routing_key: content.svg_preview.generated.v1
|
||||
description: AI service produced an SVG color preview for a scene/project.
|
||||
payload:
|
||||
type: object
|
||||
required: [svg_preview_id, svg_url, color_zones_count]
|
||||
properties:
|
||||
svg_preview_id: { type: string, format: uuid }
|
||||
project_id: { type: string, format: uuid, nullable: true }
|
||||
scene_id: { type: string, format: uuid, nullable: true }
|
||||
svg_url: { type: string }
|
||||
thumbnail_url: { type: string, nullable: true }
|
||||
color_zones_count: { type: integer }
|
||||
quality_score: { type: number, minimum: 0, maximum: 1 }
|
||||
generated_by_ai: { type: boolean }
|
||||
Reference in New Issue
Block a user