Files
slp-modular-cms/aidlc-docs/features/slpsoftware-api/construction/offerings/nfr-design/logical-components.md
T
SluijsensandClaude Sonnet 5 cfb06b28b6
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
Adds the Offerings module and retargets the CI/CD pipeline to Api.SlpSoftware
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
2026-08-02 16:23:09 +02:00

1.5 KiB

Logical Components — Unit: Offerings

Component: OfferingsService Transactional Operations

Type: Application-service logic (existing component from Application Design, no new class) — three of its methods gain an explicit transaction boundary per NFR Design Pattern 1.

Scope: CreateAsync/UpdateAsync (when Featured transitions to true), ReorderAsync, MoveUpAsync, MoveDownAsync. Each wraps its read-modify-write sequence in a single EF Core transaction, committed on success and rolled back on any exception (letting the exception propagate to GlobalExceptionHandler unchanged — no new error-handling path).

Component: offerings-public Rate-Limiting Policy

Type: Configuration + attribute, not a new class — an addition to the existing AddCmsRateLimiting registration (see tech-stack-decisions.md), applied via [EnableRateLimiting("offerings-public")] on OfferingsController's public GET action only.

Consumers: OfferingsController (public GET action).

Component: Structured Audit Logging in OfferingsService

Type: Logging calls within the existing service, not a new component — ILogger<OfferingsService>.LogInformation on create/update/delete, per NFR Design Pattern 3's field list.

No Other New Logical Components

This unit introduces no new queues, caches, background jobs, or infrastructure components — the only additions are the transaction boundary around three existing service methods, one rate-limiting policy, and structured logging calls.