2.1 KiB
Architecture
Backend
backend/
├─ Socialize.slnx
├─ src/Socialize.Api/
│ ├─ Common/
│ ├─ Data/
│ ├─ Infrastructure/
│ ├─ Migrations/
│ ├─ Modules/
│ └─ Program.cs
└─ tests/Socialize.Tests/
The backend is one API project plus one test project.
The original bootstrap scaffold uses Endpoints/<Feature> and Contracts/<Feature> for a minimal API. Socialize already uses FastEndpoints modules, so current backend feature code stays under Modules/<Feature> until a task intentionally changes that pattern.
Backend Composition
Entry point:
backend/src/Socialize.Api/Program.cs
Composition registers:
- web services and auth in
DependencyInjection.cs - infrastructure in
Infrastructure/DependencyInjection.cs - domain modules for Identity, Workspaces, Clients, Projects, ContentItems, Assets, Comments, Approvals, Notifications, and Feedback
Data Ownership
The current implementation uses a shared AppDbContext in:
backend/src/Socialize.Api/Data/AppDbContext.cs
Workflow data is organized by module folders. Do not couple unrelated modules through ad hoc service calls; keep ownership boundaries explicit.
Frontend
frontend/src/
├─ api/
├─ app/
├─ components/
├─ features/
├─ layouts/
├─ pages/
├─ plugins/
├─ router/
└─ stores/
Feature-owned frontend code lives under frontend/src/features/<feature>/. Feature folders may contain route views, stores, composables, constants, utilities, and local components. Cross-cutting shell code remains in layouts/, shared UI remains in components/, global plugins remain in plugins/, and app-wide stores may remain in stores/.
API Contract
The backend exposes NSwag OpenAPI in development at:
http://localhost:5080/swagger/v1/swagger.json
The frontend updates its OpenAPI model with:
./scripts/update-openapi.sh
Contract flow:
Backend contracts -> OpenAPI -> frontend TypeScript types
Deployment Shape
Docker Compose runs:
postgresapiweb
Caddy serves the frontend and reverse-proxies API paths to the backend.