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
@@ -10,6 +10,7 @@
"dashboard": "Dashboard",
"users": "Users",
"cms": "CMS",
"offerings": "Offerings",
"profile": "Profile",
"settings": "Settings",
"openMenu": "Open navigation",
@@ -230,6 +231,50 @@
"successUnreachableToast": "Status saved — cliënt unreachable"
}
},
"offerings": {
"title": "Offerings",
"addButton": "Add Offering",
"emptyState": {
"heading": "No offerings yet",
"description": "Add your first offering to get started."
},
"table": {
"title": "Title",
"price": "Price",
"featured": "Featured",
"actions": "Actions"
},
"actions": {
"drag": "Drag to reorder",
"edit": "Edit",
"delete": "Delete",
"moveUp": "Move up",
"moveDown": "Move down",
"markFeatured": "Mark as featured",
"unmarkFeatured": "Remove featured"
},
"deleteDialog": {
"title": "Delete offering",
"message": "Are you sure you want to delete '{{title}}'?",
"confirmButton": "Delete",
"cancelButton": "Cancel"
},
"form": {
"createTitle": "New Offering",
"editTitle": "Edit Offering",
"titleLabel": "Title",
"descriptionLabel": "Description",
"priceLabel": "Price",
"priceNoteLabel": "Price note",
"featuresLabel": "Features",
"addFeatureButton": "Add feature",
"removeFeatureButton": "Remove",
"ctaLabelLabel": "Button text",
"featuredLabel": "Featured",
"submitButton": "Save",
"successToast": "Offering saved successfully"
}
},
"error": {
"403": {
"title": "Access Denied",