# タスクの CSV インポート

`POST /api/project/{projectId}/task/import-csv`

URL: https://repsona.com/ja/api/post-project-projectid-task-import-csv

CSV からプロジェクトにタスクを取り込み、取り込んだ件数を返します。
`multipart/form-data` で、`file` という名前のパートに CSV を入れて送ります (10 MB・10,000 行まで、UTF-8。BOM があってもかまいません)。
1 行目は見出しとして読み飛ばします。各行は次の 14 列をこの順に並べます。CSV エクスポートと同じ並びなので、書き出したファイルを直して取り込めます。
`id`, `name`, `description`, `responsibleUser`, `ballHoldingUser`, `startDate`, `dueDate`, `status`, `milestone`, `parent`, `tags`, `planned`, `actual`, `sortOrder`
・`id`: このプロジェクトのタスクの ID なら、そのタスクを更新します。空か、それ以外の値なら新しく作ります (その値は同じファイルの `parent` から参照できます)。
・`name` は必須です。`description` は Markdown です。
・`responsibleUser`・`ballHoldingUser`: ユーザー名か表示名。見つからない名前は無視します。
・`startDate`・`dueDate`: `YYYY-MM-DD`。
・`status`・`milestone`: このプロジェクトのステータス名・マイルストーン名。見つからない名前は空になります。
・`parent`: 親タスクの ID か、同じファイルの `id` 列の値。空なら最上位になります。
・`tags`: カンマ区切りのタグ名。無いタグは作ります。
・`planned`・`actual`・`sortOrder`: 数値 (予定・実績・並び順)。
更新する行では、空のセルはその項目を空にします。

## パラメーター

| name | in | type | required | description |
| --- | --- | --- | --- | --- |
| `projectId` | path | integer | 必須 | プロジェクトの ID です。 |

## リクエストボディ

| name | in | type | required | description |
| --- | --- | --- | --- | --- |
| `file` | body | file | 必須 | 取り込む CSV ファイル。 |

## リクエスト

```sh
curl -X POST "https://<space>.repsona.com/api/project/{projectId}/task/import-csv" \
  -H "Authorization: Bearer $REPSONA_API_KEY" \
  -F "file=@tasks.csv"
```

## レスポンス

- 200: Import result (count)
- 400: Invalid CSV, column count mismatch, row limit exceeded, or task limit exceeded
- 401: Authentication is required
- 403: Not a project member
- 404: Project not found

## レスポンスの例

```json
{
  "count": 2
}
```
