Adds the Offerings module and retargets the CI/CD pipeline to Api.SlpSoftware
Continuous Integration / config (pull_request) Successful in 12s
Continuous Integration / changes (pull_request) Successful in 22s
Continuous Integration / backend-build (pull_request) Successful in 5m53s
Continuous Integration / vulnerability-scan (pull_request) Successful in 5m46s
Continuous Integration / frontend-prepare (pull_request) Successful in 1m54s
Continuous Integration / backend-test (pull_request) Successful in 7m37s
Continuous Integration / frontend-build (pull_request) Successful in 2m14s
Continuous Integration / frontend-test (pull_request) Successful in 4m59s
Continuous Integration / frontend-lint (pull_request) Successful in 2m2s
Continuous Integration / publish-production (pull_request) Skipped
Continuous Integration / deploy-production (pull_request) Skipped
Continuous Integration / publish-test (pull_request) Successful in 7m34s
Continuous Integration / deploy-test (pull_request) Skipped

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
This commit is contained in:
2026-08-02 16:23:09 +02:00
co-authored by Claude Sonnet 5
parent b6e9c07c06
commit cfb06b28b6
79 changed files with 4069 additions and 94 deletions
@@ -5,8 +5,8 @@
- **Feature Slug**: slpsoftware-api
- **Project Type**: Brownfield
- **Start Date**: 2026-08-01T00:00:00Z
- **Current Stage**: CONSTRUCTION - Unit 1 "SlpSoftware Client Setup" - Code Generation complete
- **Branch**: master (no feature branch created yet)
- **Current Stage**: CONSTRUCTION complete — both units done, feature-wide Build and Test green; ready for OPERATIONS phase
- **Branch**: feature/slpsoftware-api (PR #9 open against master)
## Workspace State
- **Existing Code**: Yes
@@ -71,25 +71,25 @@
- [x] NFR Requirements — Complete (new pipeline-level regression tests required; `CmsHostOptions` added, must never touch the Data Protection discriminator)
- [x] NFR Design — Complete (regression tests scoped to `Api` only; `CmsHostOptions` stays an empty placeholder for now)
- [x] Infrastructure Design — Complete (cutover target documented: same Pi/systemd units/ports/DB, only the deployed `.dll` changes at Operations time; `Api.SlpSoftware` gets its own isolated local dev database)
- [x] Code Generation — Complete (build succeeded after 2 fixes; Core.Tests 196/196, new Api.Tests 4/4)
- [x] Code Generation — Complete and **approved** (build succeeded after 2 fixes; CI green after a further CI-only MariaDB fix; 372/372 tests passing across the whole solution)
#### Unit 2: Offerings
- [ ] Functional Design
- [ ] NFR Requirements
- [ ] NFR Design
- [ ] Infrastructure Design
- [ ] Code Generation
- [x] Functional Design — Complete (drag-and-drop + buttons for reorder; separate create/edit pages not modals; validation bounds set; delete confirmation; featured toggle available from both the form and the list row)
- [x] NFR Requirements — Complete (rate limiting on public GET only via new `offerings-public` policy; no HTTP caching; `LastModifiedByUserId` closes SECURITY-13's "who"; ≥80% coverage standard, same as `master-cms-module`)
- [x] NFR Design — Complete (multi-row operations transactional per-operation; rate-limiting attribute on public GET action only, following `AuthController` precedent; structured audit-log fields defined)
- [x] Infrastructure Design**SKIPPED** (reuses existing MariaDB / per-module-migration infrastructure, nothing new to map — matches the preliminary assessment in `unit-of-work.md`; confirmed at this stage, no new deployment target/ports/services introduced)
- [x] Code Generation — Complete (backend: full `Modules.Offerings` module, 38 new tests, 414/414 solution-wide green; frontend: full `features/offerings` feature, 43 new tests, 254/254 suite-wide green, build+lint clean)
#### Feature-wide
- [ ] Build and Test — EXECUTE (ALWAYS, after both units complete)
- [x] Build and Test — Complete. Full solution: build succeeded, 414/414 tests passing. Frontend: `pnpm build` succeeded, `pnpm lint` clean, `pnpm test` 254/254 passing. No regressions.
### 🟡 OPERATIONS PHASE
- [ ] Deployment Setup — EXECUTE
- [x] Deployment Setup — Complete. `continuous_integration.yaml` retargeted to `Api.SlpSoftware` (D-15 cutover); `deploy-scp.yaml`/`rollback-plan.md` needed no changes; `deployment-instructions.md` § 1.6 updated with an explicit manual host-side action item for the user (edit the Pi's existing systemd units). No nginx/database/Gitea-variable changes (D-6).
- [ ] Monitoring Setup — EXECUTE
- [ ] Production Readiness Validation — EXECUTE (ALWAYS, once phase reached)
## Current Status
- **Lifecycle Phase**: CONSTRUCTION
- **Current Stage**: Unit 1 "SlpSoftware Client Setup" — Code Generation complete
- **Next Stage**: Unit 2 "Offerings" (Functional Design → NFR Requirements → NFR Design → Infrastructure Design → Code Generation), then feature-wide Build and Test
- **Status**: Ready to proceed
- **Lifecycle Phase**: OPERATIONS
- **Current Stage**: Deployment Setup — Complete (repo-side changes done; user still needs to manually update the Pi's two systemd unit files)
- **Next Stage**: Monitoring Setup, then Production Readiness Validation
- **Status**: Awaiting user approval to proceed