Overview

Evaluations (評価)

+
評価 API

評価 API リファレンス

TaskWorks API のポモドーロ評価関連エンドポイントの詳細ドキュメントです。

# 評価 API リファレンス

TaskWorks API のポモドーロ評価関連エンドポイントの詳細ドキュメントです。すべてのエンドポイントはユーザー固有のデータのみを返します(RLS保護)。

## 認証方式

### ApiKey 認証(推奨)
```
Authorization: ApiKey <token>
```
- 設定 > APIキー管理 から生成
- トークンは一度しか表示されないため安全に保管
- ほとんどのエンドポイントで使用可能

### Bearer トークン認証
```
Authorization: Bearer <token>
```
- サービス間通信で使用
- 一部のエンドポイントで必須(例: /api/v1/blocks/windows)

### Cookie 認証
- 標準のセッションベース認証
- Webクライアントで使用
- Cookie専用エンドポイントで必須

## 共通レスポンス形式

すべての成功レスポンスは以下の構造に従います:
```json
{
  "data": <response_data>,
  "error": null
}
```

すべてのエラーレスポンスは以下の構造に従います:
```json
{
  "error": "<error_type>",
  "message": "<human_readable_message>",
  "code": "<optional_error_code>",
  "context": <optional_additional_context>
}
```

## HTTP ステータスコード

- 200: 成功
- 201: 作成完了
- 400: 不正なリクエスト(検証エラー)
- 401: 未認証(認証が必要)
- 403: 禁止(権限なし)
- 404: 未検出
- 409: 衝突(リソースの競合)
- 500: サーバー内部エラー

## ページネーション

一部のエンドポイントはカーソルベースのページネーションをサポート:
- cursor: 次ページの開始位置
- limit: 返す項目数(1-100、デフォルトはエンドポイントにより異なる)

レスポンス形式:
```json
{
  "data": {
    "items": [...],
    "nextCursor": "string | null",
    "hasMore": boolean
  },
  "error": null
}
```

## API エンドポイント

### 評価(Evaluations - ポモドーロ)

#### POST /api/v1/evaluations/submit

ポモドーロ評価を提出します(集中度・気分)。

**認証:** ApiKey / Bearer / Cookie

**リクエストボディ:**
```json
{
  "task_id": "string (required)",
  "concentration_level": -2 | -1 | 0 | 1 | 2,
  "mood_level": -2 | -1 | 0 | 1 | 2,
  "has_comment": boolean,
  "comment_text": "string | null",
  "pomodoro_session_id": "string | null",
  "execute_task": boolean,
  "task_qty": number
}
```

**レスポンス スキーマ:**
```json
{
  "data": {
    "id": "string",
    "user_id": "string",
    "task_id": "string | null",
    "pomodoro_session_id": "string | null",
    "happened_at": "string",
    "concentration_level": -2 | -1 | 0 | 1 | 2,
    "mood_level": -2 | -1 | 0 | 1 | 2,
    "has_comment": boolean,
    "comment_text": "string | null"
  },
  "task_execution": {
    "qty": number,
    "rewardTotal": number,
    "streakDays": number,
    "bonusAmount": number,
    "rewardErrors": Array<{ "source": string, "message": string }>,
    "hasRewardFailure": boolean
  },
  "error": null
}
```

**エラーケース:**
- 400: task_idは必須、またはconcentration_level/mood_levelが範囲外(-2から2)
- 403: タスク実行の権限がありません

---

#### GET /api/v1/evaluations/last-task

最後のタスクを取得します(デフォルト選択用)。

**認証:** ApiKey / Bearer / Cookie

**レスポンス スキーマ:**
```json
{
  "data": {
    "task_id": "string",
    "task_title": "string",
    "selected_at": "string"
  },
  "error": null
}
```

---

#### POST /api/v1/evaluations/unanswered

未回答のポモドーロ評価を記録します。

**認証:** ApiKey / Bearer / Cookie

**リクエストボディ:**
```json
{
  "events": Array<{
    "id": "string",
    "user_id": "string",
    "task_id": "string | null",
    "pomodoro_session_id": "string | null",
    "happened_at": "string",
    "reason": "ignored" | "closed" | "cancelled"
  }>
}
```

**レスポンス スキーマ:**
```json
{
  "data": {
    "success": true,
    "count": number
  },
  "error": null
}
```