# BACKEND_V1_CONSOLIDATION.md

## Doel
Consolidatie van de huidige backend v1 contracten en beperkingen.

## Huidige endpoints

Directe endpoints (geen task-creatie):
- `GET /api/browse`
- `POST /api/files/mkdir`
- `POST /api/files/rename`
- `POST /api/files/delete`
- `GET /api/tasks`
- `GET /api/tasks/{task_id}`

Task-based create endpoints:
- `POST /api/files/copy`
- `POST /api/files/move`

## Semantiek per endpoint

### `GET /api/browse`
- Browse van een directory binnen whitelist roots.
- Hidden files standaard verborgen, optioneel via `show_hidden=true`.

### `POST /api/files/mkdir`
- Maakt directory op exact `parent_path + name`.
- Geen impliciete pad-normalisatie buiten `path_guard` validatie.

### `POST /api/files/rename`
- Hernoemt binnen dezelfde parent directory.
- Geen verborgen move naar andere map.

### `POST /api/files/delete`
- Verwijdert file direct.
- Verwijdert alleen lege directory.
- Non-empty directory => conflict.

### `POST /api/files/copy`
- File-only copy.
- `destination` is volledig doelpad (geen "copy into directory").
- Task wordt aangemaakt (`202`, `task_id`, `queued`) en daarna uitgevoerd.

### `POST /api/files/move`
- File-only move.
- `destination` is volledig doelpad.
- Task wordt aangemaakt (`202`, `task_id`, `queued`) en daarna uitgevoerd.
- Same-root: native move.
- Cross-root: copy + delete binnen dezelfde task.

### `GET /api/tasks`
- Lijst van tasks, gesorteerd op `created_at DESC`.
- Item bevat minimaal: `id`, `operation`, `status`, `source`, `destination`, `created_at`, `finished_at`.

### `GET /api/tasks/{task_id}`
- Detailstatus inclusief progress/foutvelden.
- Statusset: `queued`, `running`, `completed`, `failed`.

## Foutmodel per endpointgroep

### Browse/file-validatie
- `invalid_request`
- `path_traversal_detected`
- `path_outside_whitelist`
- `invalid_root_alias`
- `path_not_found`
- `type_conflict`
- `already_exists`
- `directory_not_empty` (delete)

### Task create runtime
- validatiefouten vóór task-creatie: directe API-fout, geen task
- runtime-fouten tijdens task-uitvoering: task naar `failed` met `io_error`

### Tasks read
- `task_not_found` bij onbekend task id

## Expliciete v1-beperkingen

- copy: file-only
- move: file-only
- delete: alleen file + lege directory
- geen recursive delete
- geen directory copy/move
- geen rollback
- geen cancel/retry
- geen batch-operaties
