# Task: Multi-level approval step configuration backend

## Feature

`docs/FEATURES/approval-workflow.md`

## Goal

Persist workspace-level multi-level approval step configuration and expose it through workspace settings APIs.

## Context

The workspace can currently select `Multi-level`, but there is no backend model or API surface for defining the ordered steps that make multi-level approval usable.

## Scope

- Add a workspace-owned approval step configuration data model.
- Each configured step must include:
  - display name
  - sort order
  - target type: `Role`, `Membership`, or `Member`
  - target value
  - required approver count
- Add EF Core configuration and migration.
- Return configured approval steps from workspace APIs.
- Allow workspace managers/admins to replace the configured step list for a workspace.
- Validate:
  - `Multi-level` workspaces must have at least one step.
  - step names are required and bounded.
  - target type is one of `Role`, `Membership`, or `Member`.
  - role targets use known workspace roles.
  - membership targets use known membership categories.
  - member targets reference a user with workspace access.
  - required approver count is at least 1.
  - sort order is stable and unique per workspace.

## Constraints

- Do not implement active approval workflow instance recalculation in this task.
- Do not implement approval step execution or per-step approval decisions in this task.
- Do not implement reminders, comments, reopening, or magic links in this task.
- Keep backend feature code under `backend/src/Socialize.Api/Modules/Approvals` or `Modules/Workspaces` according to existing ownership patterns.
- If backend contracts change, update OpenAPI when the backend is running.

## Likely Files

- `backend/src/Socialize.Api/Modules/Approvals/Data/*`
- `backend/src/Socialize.Api/Modules/Approvals/Handlers/*`
- `backend/src/Socialize.Api/Modules/Workspaces/Handlers/*`
- `backend/src/Socialize.Api/Data/AppDbContext.cs`
- `backend/src/Socialize.Api/Migrations/*`
- `backend/tests/Socialize.Tests/Approvals/*`
- `shared/openapi/openapi.json`
- `frontend/src/api/schema.d.ts`

## Done When

- [x] Multi-level step configuration is persisted per workspace.
- [x] Workspace responses include configured approval steps.
- [x] Managers/admins can save an ordered list of approval steps.
- [x] Invalid target types, target values, counts, and empty multi-level configurations are rejected.
- [x] Backend tests cover validation and persistence rules.
- [x] OpenAPI and generated frontend schema are updated.

## Validation Commands

```bash
dotnet build backend/Socialize.slnx
dotnet test backend/Socialize.slnx
./scripts/update-openapi.sh
```
