# File Manager

# Delete, Restore, Purge 

## Ringkasan Endpoint Utama

1. `DELETE /api/v1/file-manager/delete` untuk soft delete bulk (file/folder)
2. `PATCH /api/v1/file-manager/restore` untuk restore bulk (file/folder) ke lokasi asal
3. `DELETE /api/v1/file-manager/purge-delete` untuk hard delete bulk (file/folder)
4. `GET /api/v1/file-manager/trash/get-all` untuk list trash merged

## Catatan Kontrak

1. Tidak ada endpoint delete single.
2. Tidak ada endpoint restore single.
3. Gunakan endpoint bulk untuk delete/restore/purge.

## Step 1 - Soft Delete Node (Bulk)

### Endpoint
- `DELETE /api/v1/file-manager/delete`

### Tujuan
- soft delete file/folder (masuk trash)
- jika folder di-delete, subtree (child folder + child file) ikut ke-trash

### Contoh request

```json
{
  "data": [
    { "uuid": "folder-uuid" },
    { "uuid": "file-uuid" }
  ]
}
```

### Contoh response

```json
{
  "data": [
    {
      "index": 0,
      "success": true,
      "resource": {
        "type": "file_manager_delete_result",
        "id": "folder-uuid",
        "attributes": {
          "node_type": "folder",
          "status": "trashed"
        }
      }
    },
    {
      "index": 1,
      "success": true,
      "resource": {
        "type": "file_manager_delete_result",
        "id": "file-uuid",
        "attributes": {
          "node_type": "file",
          "status": "trashed"
        }
      }
    }
  ],
  "meta": {
    "total": 2,
    "success": 2,
    "failed": 0,
    "partial_success": false
  }
}
```

## Step 3 - Lihat Trash

### Endpoint
- `GET /api/v1/file-manager/trash/get-all`

### Tujuan
- menampilkan data trash merged (folder + file)

### Contoh response

```json
{
  "data": [
    {
      "type": "file_manager_trash_node",
      "id": "folder-uuid",
      "attributes": {
        "node_type": "folder",
        "name": "Documents",
        "path_cache": "/Documents",
        "trashed_at": "2026-04-01T10:00:00Z"
      }
    },
    {
      "type": "file_manager_trash_node",
      "id": "file-uuid",
      "attributes": {
        "node_type": "file",
        "name": "LOGO.png",
        "extension": "png",
        "size_bytes": 100988,
        "mime_type": "image/png",
        "trashed_at": "2026-04-01T10:00:00Z"
      }
    }
  ],
  "meta": {
    "page_number": 1,
    "page_size": 20,
    "folders": 1,
    "files": 1,
    "total": 2
  }
}
```

## Step 4 - Restore Node (Bulk, kembali ke lokasi asal)

### Endpoint
- `PATCH /api/v1/file-manager/restore`

### Contoh request

```json
{
  "data": [{ "uuid": "folder-uuid" }, { "uuid": "file-uuid" }]
}
```

Aturan:
- restore tidak menerima `destination_folder_uuid` lagi
- node akan kembali ke lokasi asal (parent/folder saat sebelum di-trash)
- jika lokasi asal root, field `location` tidak dimunculkan

### Contoh response

```json
{
  "data": [
    {
      "index": 0,
      "success": true,
      "resource": {
        "type": "file_manager_restore_result",
        "id": "folder-uuid",
        "attributes": {
          "node_type": "folder",
          "status": "ready"
        }
      }
    },
    {
      "index": 1,
      "success": true,
      "resource": {
        "type": "file_manager_restore_result",
        "id": "file-uuid",
        "attributes": {
          "node_type": "file",
          "status": "ready",
          "location": {
            "folder_id": "folder-uuid-optional"
          }
        }
      }
    }
  ],
  "meta": {
    "total": 2,
    "success": 2,
    "failed": 0,
    "partial_success": false
  }
}
```

## Step 5 - Purge Node (Hard Delete)

### Endpoint
- `DELETE /api/v1/file-manager/purge-delete` (bulk)

### Tujuan
- hapus permanen file atau folder (UUID bisa keduanya)
- kalau UUID folder: subtree ikut dihapus permanen
- kalau UUID file: file dihapus permanen

### Contoh request bulk

```json
{
  "data": [
    { "uuid": "folder-uuid" },
    { "uuid": "file-uuid" }
  ]
}
```

### Contoh response

```json
{
  "data": [
    {
      "index": 0,
      "success": true,
      "resource": {
        "type": "file_manager_purge_result",
        "id": "folder-uuid",
        "attributes": {
          "node_type": "folder",
          "status": "purged"
        }
      }
    },
    {
      "index": 1,
      "success": true,
      "resource": {
        "type": "file_manager_purge_result",
        "id": "file-uuid",
        "attributes": {
          "node_type": "file",
          "status": "purged"
        }
      }
    }
  ],
  "meta": {
    "total": 2,
    "success": 2,
    "failed": 0,
    "partial_success": false
  }
}
```
