Implements Unit 2 "Offerings" (backend module, admin CRUD UI with drag-and-drop reordering, public GET /api/v1/offerings endpoint) and executes the feature's D-15 CI/CD cutover, switching the deploy pipeline's build/publish target from SlpModularCms.Api to SlpModularCms.Api.SlpSoftware. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FWyStNL2ZsjrS7FLd7xvvN
3.1 KiB
Deployment Architecture — Unit: SlpSoftware Client Setup
Status note: this diagram documents the target state after the Operations-phase cutover (D-15) — it is reference/planning context for Code Generation, not something this unit deploys itself. No infrastructure changes happen as part of this Construction stage.
%%{init: {'themeVariables': {'primaryTextColor':'#000000','textColor':'#000000','tertiaryTextColor':'#000000'}}}%%
graph TD
visitor["Site Visitor / CMS Administrator browser"]
proxy["Proxy Pi<br/>nginx + TLS (certbot)"]
pimain["pi-main<br/>systemd --user"]
svc_test["slpsoftware-test.service<br/>port 5100"]
svc_prod["slpsoftware-production.service<br/>port 5101"]
dll["SlpModularCms.Api.SlpSoftware.dll<br/>(replaces Api.dll at cutover)"]
db["MariaDB<br/>SlpSoftwareTest / SlpSoftwareProduction"]
sentry["Sentry (shared project)"]
visitor -->|"HTTPS"| proxy
proxy -->|"proxy_pass, plain HTTP over LAN"| pimain
pimain --> svc_test
pimain --> svc_prod
svc_test --> dll
svc_prod --> dll
dll -->|"EF Core / MariaDB provider"| db
dll -->|"error/event reporting"| sentry
classDef external fill:#e9d8fd,stroke:#553c9a,stroke-width:2px,color:#000000,font-weight:bold;
classDef proxy fill:#bee3f8,stroke:#2b6cb0,stroke-width:2px,color:#000000,font-weight:bold;
classDef compute fill:#fefcbf,stroke:#b7791f,stroke-width:2px,color:#000000,font-weight:bold;
classDef data fill:#c6f6d5,stroke:#2f855a,stroke-width:2px,color:#000000,font-weight:bold;
class visitor external;
class proxy proxy;
class pimain,svc_test,svc_prod,dll compute;
class db,sentry data;
linkStyle default stroke:#666666,stroke-width:2px;
Text alternative: a visitor's browser reaches the proxy Pi over HTTPS, which forwards plain HTTP over the LAN to pi-main; pi-main runs two systemd-managed instances (test on port 5100, production on port 5101), both eventually running SlpModularCms.Api.SlpSoftware.dll after the cutover, each talking to its own MariaDB database and the shared Sentry project (purple = external actor, blue = the TLS-terminating proxy, yellow = compute/hosting, green = data/observability backends).
Local Development (Current Scope of This Unit)
%%{init: {'themeVariables': {'primaryTextColor':'#000000','textColor':'#000000','tertiaryTextColor':'#000000'}}}%%
graph LR
dev["Developer machine"]
api["SlpModularCms.Api<br/>(existing dev host)"]
apislp["SlpModularCms.Api.SlpSoftware<br/>(new, this unit)"]
dbA["Local DB: Api"]
dbB["Local DB: Api.SlpSoftware (isolated)"]
dev --> api
dev --> apislp
api --> dbA
apislp --> dbB
classDef dev fill:#fefcbf,stroke:#b7791f,stroke-width:2px,color:#000000,font-weight:bold;
classDef data fill:#c6f6d5,stroke:#2f855a,stroke-width:2px,color:#000000,font-weight:bold;
class dev,api,apislp dev;
class dbA,dbB data;
linkStyle default stroke:#666666,stroke-width:2px;
Text alternative: locally, Api and the new Api.SlpSoftware each connect to their own separate, isolated database (decision Q1 = B) — no shared local dev data between the two.