# Service Layer

`service` adapts HTTP-facing DTOs to business usecases and owns application
orchestration. Request/response/filter contracts live in `dto/`; the root
package aggregates module provider sets for Wire.

Implementations are grouped by the same business modules as `biz` and `data`:

| Directory | Responsibility |
| --- | --- |
| `system/` | authentication, users, authorization, menus, organization, dictionaries, settings, audit, media, announcements, email, versions, exports |
| `payment/` | payment orchestration and callback handling |
| `integration/` | integration configuration orchestration |
| `task/` | scheduled task orchestration |
| `dto/` | HTTP request/response contracts |

The stateless router-prefix helper lives in `internal/utils/routepath` because
both service modules and HTTP middleware use it; it does not depend on a
business usecase or DTO.

Each module owns its Wire `ProviderSet`; the root package only composes those
sets and does not re-export service types or constructors.

Within `system/`, larger cross-cutting resources stay in the same package while
being split by concern (`audit.go` and its error/log companions, `media.go` and
upload companion, and `export.go`/`export_excel.go`). New transport code should
import the module package directly when it does not need the compatibility
facade.
