# PUT /api/item_categories/{id}/list_order

カテゴリの並び順を変更する

指定したカテゴリを、同じ上位カテゴリを持つカテゴリの中で移動します。

移動先は `move_to` で指定できます。

- `first`：同じ階層の先頭
- `last`：同じ階層の末尾
- `before` / `after`：`neighbor_category_id` で指定したカテゴリの直前 / 直後

1 回のリクエストで移動できるのは 1 カテゴリです。
何番目かを表す数値での指定や、別の上位カテゴリの下への移動はできません。
`neighbor_category_id` には、移動するカテゴリ自身を指定できません。

変更後の並び順は `GET /api/item_categories` で確認することができます。

## 要求スコープ

- `item_categories.write`
- `items.read`

## パラメータ

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | `string` | 必須 | 並び順を変更するカテゴリの ID（1 以上の整数を文字列で表したもの） |

## リクエストボディ

`application/json`

`move_to` の値により分岐します。

- ItemCategoryListOrderEndInput の場合
  - `move_to` "first" | "last"（必須）: 移動先。`first`＝同じ親を持つカテゴリの先頭、`last`＝同じ親を持つカテゴリの末尾。基準のカテゴリは指定しません。
- ItemCategoryListOrderRelativeInput の場合
  - `move_to` "before" | "after"（必須）: 移動先。`before`＝ `neighbor_category_id` のカテゴリの直前、`after`＝ `neighbor_category_id` のカテゴリの直後。
  - `neighbor_category_id` integer（必須 / ≥ 0 / ≤ 2147483647）: 移動先の基準にするカテゴリの ID。移動するカテゴリと同じ親を持つカテゴリだけを指定できます。並び順を変更するカテゴリ自身は指定できません。

## リクエスト例

```sh
curl -X PUT "https://apiv2.thebase.com/api/item_categories/123/list_order" \
  -H "Authorization: Bearer <your-token>" \
  -H "Content-Type: application/json" \
  -d '{
  "move_to": "first"
}'
```

## レスポンス

| Status | Description |
| --- | --- |
| `204` | 変更成功。レスポンス body は持ちません。 |

## エラー

エラーは `application/problem+json` の Problem 形式で返します。認証・スコープ・予期しない内部エラーなど、すべてのエンドポイントに共通のエラーと構造・判別方法は [エラーレスポンス](/docs/errors.md) を参照してください。

このエンドポイントが返すその他のエラーは次のとおりです。

| Status | Type | Description |
| --- | --- | --- |
| `400` | `/errors/request/malformed-body` | リクエストボディをこのエンドポイントが要求する形式として解釈できない場合に返します。 |
| `400` | `/errors/request/invalid-params` | 1 つ以上のパスパラメータがエンドポイントのスキーマを満たさない場合に返します。 |
| `400` | `/errors/item_categories/invalid-body` | リクエストボディがエンドポイントのスキーマを満たさない場合に返します。 |
| `404` | `/errors/item_categories/not-found` | 指定したカテゴリが存在しない、または呼び出し元から参照できない場合に返します。 |
| `413` | `/errors/request/body-too-large` | JSON リクエストボディが 1 MiB の上限を超える場合に返します。 |
| `415` | `/errors/request/unsupported-media-type` | JSON 形式のリクエストボディを要求するエンドポイントに、対応していない Content-Type が指定された、または Content-Type が指定されていない場合に返します。 |
| `422` | `/errors/item_categories/invalid-list-order` | 並び順の変更の指定が成立しない場合に返します。移動するカテゴリ自身を移動先の基準（neighbor_category_id）に指定した場合や、異なる親を持つカテゴリを基準に指定した場合が該当します。 |
| `422` | `/errors/item_categories/write-rejected` | カテゴリの作成・編集、またはカテゴリと商品の結びつけを業務ルールにより実行できない場合に返します (親カテゴリが存在しない、階層の上限を超える、同じ階層に同名のカテゴリが既にある、など)。 |
| `502` | `/errors/internal/bad-gateway` | BASE API が処理を完了するために必要な内部処理で不整合が発生した場合に返します。 |
| `504` | `/errors/internal/gateway-timeout` | BASE API が処理を完了するために必要な内部処理が制限時間内に完了しなかった場合に返します。 |

