# 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.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.