Files
social-media/docs/ARCHITECTURE.md

92 lines
2.1 KiB
Markdown

# Architecture
## Backend
```txt
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:
```txt
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:
```txt
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
```txt
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:
```txt
http://localhost:5080/swagger/v1/swagger.json
```
The frontend updates its OpenAPI model with:
```bash
./scripts/update-openapi.sh
```
Contract flow:
```txt
Backend contracts -> OpenAPI -> frontend TypeScript types
```
## Deployment Shape
Docker Compose runs:
- `postgres`
- `api`
- `web`
Caddy serves the frontend and reverse-proxies API paths to the backend.