繰り返し課題のAPI管理UIを追加、課題一覧のUX向上
This commit is contained in:
144
docs/API.md
144
docs/API.md
@@ -23,14 +23,15 @@ Super Homework Manager REST APIは、課題管理機能をプログラムから
|
||||
### 認証ヘッダー
|
||||
|
||||
```
|
||||
X-API-Key: hm_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
Authorization: Bearer hm_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
```
|
||||
|
||||
### 認証エラー
|
||||
|
||||
| ステータスコード | レスポンス |
|
||||
|------------------|------------|
|
||||
| 401 Unauthorized | `{"error": "API key required"}` |
|
||||
| 401 Unauthorized | `{"error": "Authorization header required"}` |
|
||||
| 401 Unauthorized | `{"error": "Invalid authorization format. Use: Bearer <api_key>"}` |
|
||||
| 401 Unauthorized | `{"error": "Invalid API key"}` |
|
||||
|
||||
---
|
||||
@@ -46,6 +47,10 @@ X-API-Key: hm_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
| DELETE | `/api/v1/assignments/:id` | 課題削除 |
|
||||
| PATCH | `/api/v1/assignments/:id/toggle` | 完了状態トグル |
|
||||
| GET | `/api/v1/statistics` | 統計情報取得 |
|
||||
| GET | `/api/v1/recurring` | 繰り返し設定一覧取得 |
|
||||
| GET | `/api/v1/recurring/:id` | 繰り返し設定詳細取得 |
|
||||
| PUT | `/api/v1/recurring/:id` | 繰り返し設定更新 |
|
||||
| DELETE | `/api/v1/recurring/:id` | 繰り返し設定削除 |
|
||||
|
||||
---
|
||||
|
||||
@@ -88,13 +93,13 @@ GET /api/v1/assignments
|
||||
|
||||
```bash
|
||||
# 全件取得
|
||||
curl -H "X-API-Key: hm_xxx" http://localhost:8080/api/v1/assignments
|
||||
curl -H "Authorization: Bearer hm_xxx" http://localhost:8080/api/v1/assignments
|
||||
|
||||
# 未完了のみ取得
|
||||
curl -H "X-API-Key: hm_xxx" http://localhost:8080/api/v1/assignments?filter=pending
|
||||
curl -H "Authorization: Bearer hm_xxx" http://localhost:8080/api/v1/assignments?filter=pending
|
||||
|
||||
# 期限切れのみ取得
|
||||
curl -H "X-API-Key: hm_xxx" http://localhost:8080/api/v1/assignments?filter=overdue
|
||||
curl -H "Authorization: Bearer hm_xxx" http://localhost:8080/api/v1/assignments?filter=overdue
|
||||
```
|
||||
|
||||
---
|
||||
@@ -140,7 +145,7 @@ GET /api/v1/assignments/:id
|
||||
### 例
|
||||
|
||||
```bash
|
||||
curl -H "X-API-Key: hm_xxx" http://localhost:8080/api/v1/assignments/1
|
||||
curl -H "Authorization: Bearer hm_xxx" http://localhost:8080/api/v1/assignments/1
|
||||
```
|
||||
|
||||
---
|
||||
@@ -159,6 +164,28 @@ POST /api/v1/assignments
|
||||
| `description` | string | | 説明 |
|
||||
| `subject` | string | | 教科・科目 |
|
||||
| `due_date` | string | ✅ | 提出期限(RFC3339 または `YYYY-MM-DDTHH:MM` または `YYYY-MM-DD`) |
|
||||
| `reminder_enabled` | boolean | | リマインダーを有効にするか(省略時: false) |
|
||||
| `reminder_at` | string | | リマインダー設定時刻(形式はdue_dateと同じ) |
|
||||
| `urgent_reminder_enabled` | boolean | | 期限切れ時の督促リマインダーを有効にするか(省略時: true) |
|
||||
| `recurrence` | object | | 繰り返し設定(以下参照) |
|
||||
|
||||
### Recurrence オブジェクト
|
||||
|
||||
| フィールド | 型 | 説明 |
|
||||
|------------|------|------|
|
||||
| `type` | string | 繰り返しタイプ (`daily`, `weekly`, `monthly`, または空文字で無効) |
|
||||
| `interval` | integer | 間隔 (例: 1 = 毎週, 2 = 隔週) |
|
||||
| `weekday` | integer | 週次の曜日 (0=日, 1=月, ..., 6=土) |
|
||||
| `day` | integer | 月次の日付 (1-31) |
|
||||
| `until` | object | 終了条件 |
|
||||
|
||||
#### Recurrence.Until オブジェクト
|
||||
|
||||
| フィールド | 型 | 説明 |
|
||||
|------------|------|------|
|
||||
| `type` | string | 終了タイプ (`never`, `count`, `date`) |
|
||||
| `count` | integer | 回数指定時の終了回数 |
|
||||
| `date` | string | 日付指定時の終了日 |
|
||||
|
||||
### リクエスト例
|
||||
|
||||
@@ -201,7 +228,7 @@ POST /api/v1/assignments
|
||||
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "X-API-Key: hm_xxx" \
|
||||
-H "Authorization: Bearer hm_xxx" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"title":"英語エッセイ","due_date":"2025-01-20"}' \
|
||||
http://localhost:8080/api/v1/assignments
|
||||
@@ -231,6 +258,9 @@ PUT /api/v1/assignments/:id
|
||||
| `description` | string | 説明 |
|
||||
| `subject` | string | 教科・科目 |
|
||||
| `due_date` | string | 提出期限 |
|
||||
| `reminder_enabled` | boolean | リマインダー有効/無効 |
|
||||
| `reminder_at` | string | リマインダー時刻 |
|
||||
| `urgent_reminder_enabled` | boolean | 督促リマインダー有効/無効 |
|
||||
|
||||
### リクエスト例
|
||||
|
||||
@@ -271,7 +301,7 @@ PUT /api/v1/assignments/:id
|
||||
|
||||
```bash
|
||||
curl -X PUT \
|
||||
-H "X-API-Key: hm_xxx" \
|
||||
-H "Authorization: Bearer hm_xxx" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"title":"更新されたタイトル"}' \
|
||||
http://localhost:8080/api/v1/assignments/2
|
||||
@@ -291,6 +321,12 @@ DELETE /api/v1/assignments/:id
|
||||
|------------|------|------|
|
||||
| `id` | integer | 課題ID |
|
||||
|
||||
### クエリパラメータ
|
||||
|
||||
| パラメータ | 型 | 説明 |
|
||||
|------------|------|------|
|
||||
| `delete_recurring` | boolean | `true` の場合、関連する繰り返し設定も削除する |
|
||||
|
||||
### レスポンス
|
||||
|
||||
**200 OK**
|
||||
@@ -313,7 +349,7 @@ DELETE /api/v1/assignments/:id
|
||||
|
||||
```bash
|
||||
curl -X DELETE \
|
||||
-H "X-API-Key: hm_xxx" \
|
||||
-H "Authorization: Bearer hm_xxx" \
|
||||
http://localhost:8080/api/v1/assignments/2
|
||||
```
|
||||
|
||||
@@ -364,7 +400,7 @@ PATCH /api/v1/assignments/:id/toggle
|
||||
|
||||
```bash
|
||||
curl -X PATCH \
|
||||
-H "X-API-Key: hm_xxx" \
|
||||
-H "Authorization: Bearer hm_xxx" \
|
||||
http://localhost:8080/api/v1/assignments/1/toggle
|
||||
```
|
||||
|
||||
@@ -444,16 +480,16 @@ GET /api/v1/statistics
|
||||
|
||||
```bash
|
||||
# 全体統計
|
||||
curl -H "X-API-Key: hm_xxx" http://localhost:8080/api/v1/statistics
|
||||
curl -H "Authorization: Bearer hm_xxx" http://localhost:8080/api/v1/statistics
|
||||
|
||||
# 科目で絞り込み
|
||||
curl -H "X-API-Key: hm_xxx" "http://localhost:8080/api/v1/statistics?subject=数学"
|
||||
curl -H "Authorization: Bearer hm_xxx" "http://localhost:8080/api/v1/statistics?subject=数学"
|
||||
|
||||
# 日付範囲で絞り込み
|
||||
curl -H "X-API-Key: hm_xxx" "http://localhost:8080/api/v1/statistics?from=2025-01-01&to=2025-03-31"
|
||||
curl -H "Authorization: Bearer hm_xxx" "http://localhost:8080/api/v1/statistics?from=2025-01-01&to=2025-03-31"
|
||||
|
||||
# 科目と日付範囲の組み合わせ
|
||||
curl -H "X-API-Key: hm_xxx" "http://localhost:8080/api/v1/statistics?subject=数学&from=2025-01-01&to=2025-03-31"
|
||||
curl -H "Authorization: Bearer hm_xxx" "http://localhost:8080/api/v1/statistics?subject=数学&from=2025-01-01&to=2025-03-31"
|
||||
```
|
||||
|
||||
---
|
||||
@@ -506,3 +542,83 @@ APIは以下の日付形式を受け付けます(優先度順):
|
||||
```
|
||||
|
||||
設定ファイル (`config.ini`) または環境変数で制限値を変更可能です。
|
||||
|
||||
---
|
||||
|
||||
## 繰り返し設定一覧取得
|
||||
|
||||
```
|
||||
GET /api/v1/recurring
|
||||
```
|
||||
|
||||
### レスポンス
|
||||
|
||||
**200 OK**
|
||||
|
||||
```json
|
||||
{
|
||||
"recurring_assignments": [
|
||||
{
|
||||
"id": 1,
|
||||
"user_id": 1,
|
||||
"title": "週次ミーティング",
|
||||
"recurrence_type": "weekly",
|
||||
"interval": 1,
|
||||
"weekday": 1,
|
||||
"is_active": true
|
||||
}
|
||||
],
|
||||
"count": 1
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 繰り返し設定詳細取得
|
||||
|
||||
```
|
||||
GET /api/v1/recurring/:id
|
||||
```
|
||||
|
||||
### レスポンス
|
||||
|
||||
**200 OK**
|
||||
|
||||
---
|
||||
|
||||
## 繰り返し設定更新
|
||||
|
||||
```
|
||||
PUT /api/v1/recurring/:id
|
||||
```
|
||||
|
||||
### リクエストボディ
|
||||
|
||||
各フィールドはオプション。省略時は更新なし。
|
||||
|
||||
| フィールド | 型 | 説明 |
|
||||
|------------|------|------|
|
||||
| `title` | string | タイトル |
|
||||
| `is_active` | boolean | `false` で停止、`true` で再開 |
|
||||
| `recurrence_type` | string | `daily`, `weekly`, `monthly` |
|
||||
| ... | ... | その他の設定フィールド |
|
||||
|
||||
### リクエスト例(停止)
|
||||
|
||||
```json
|
||||
{
|
||||
"is_active": false
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 繰り返し設定削除
|
||||
|
||||
```
|
||||
DELETE /api/v1/recurring/:id
|
||||
```
|
||||
|
||||
### レスポンス
|
||||
|
||||
**200 OK**
|
||||
|
||||
@@ -79,7 +79,33 @@ homework-manager/
|
||||
| UpdatedAt | time.Time | 更新日時 | 自動更新 |
|
||||
| DeletedAt | gorm.DeletedAt | 論理削除日時 | ソフトデリート |
|
||||
|
||||
### 2.3 UserNotificationSettings(通知設定)
|
||||
|
||||
### 2.3 RecurringAssignment(繰り返し課題)
|
||||
|
||||
繰り返し課題の設定を管理するモデル。
|
||||
|
||||
| フィールド | 型 | 説明 | 制約 |
|
||||
|------------|------|------|------|
|
||||
| ID | uint | 設定ID | Primary Key |
|
||||
| UserID | uint | 所有ユーザーID | Not Null, Index |
|
||||
| Title | string | 課題タイトル | Not Null |
|
||||
| Description | string | 説明 | - |
|
||||
| Subject | string | 教科・科目 | - |
|
||||
| Priority | string | 重要度 | Default: `medium` |
|
||||
| RecurrenceType | string | 繰り返しタイプ (`daily`, `weekly`, `monthly`) | Not Null |
|
||||
| RecurrenceInterval | int | 繰り返し間隔 | Default: 1 |
|
||||
| RecurrenceWeekday | *int | 曜日 (0-6, 日-土) | Nullable |
|
||||
| RecurrenceDay | *int | 日 (1-31) | Nullable |
|
||||
| DueTime | string | 締切時刻 (HH:MM) | Not Null |
|
||||
| EndType | string | 終了条件 (`never`, `count`, `date`) | Default: `never` |
|
||||
| EndCount | *int | 終了回数 | Nullable |
|
||||
| EndDate | *time.Time | 終了日 | Nullable |
|
||||
| IsActive | bool | 有効フラグ | Default: true |
|
||||
| CreatedAt | time.Time | 作成日時 | 自動設定 |
|
||||
| UpdatedAt | time.Time | 更新日時 | 自動更新 |
|
||||
| DeletedAt | gorm.DeletedAt | 論理削除日時 | ソフトデリート |
|
||||
|
||||
### 2.4 UserNotificationSettings(通知設定)
|
||||
|
||||
ユーザーの通知設定を管理するモデル。
|
||||
|
||||
@@ -95,7 +121,7 @@ homework-manager/
|
||||
| UpdatedAt | time.Time | 更新日時 | 自動更新 |
|
||||
| DeletedAt | gorm.DeletedAt | 論理削除日時 | ソフトデリート |
|
||||
|
||||
### 2.4 APIKey(APIキー)
|
||||
### 2.5 APIKey(APIキー)
|
||||
|
||||
REST API認証用のAPIキーを管理するモデル。
|
||||
|
||||
@@ -123,7 +149,7 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
|
||||
### 3.2 API認証
|
||||
|
||||
- **APIキー認証**: `X-API-Key` ヘッダーで認証
|
||||
- **APIキー認証**: `Authorization: Bearer <API_KEY>` ヘッダーで認証
|
||||
- **キー形式**: `hm_` プレフィックス + 32文字のランダム文字列
|
||||
- **ハッシュ保存**: SHA-256でハッシュ化して保存
|
||||
|
||||
@@ -155,13 +181,26 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
| 課題一覧 | フィルタ付き(未完了/今日が期限/今週が期限/完了済み/期限切れ)で課題を一覧表示 |
|
||||
| 課題登録 | タイトル、説明、教科、重要度、提出期限、通知設定を入力して新規登録 |
|
||||
| 課題編集 | 既存の課題情報を編集 |
|
||||
| 課題削除 | 課題を論理削除 |
|
||||
| 課題削除 | 課題を論理削除(繰り返し課題に関連する場合、繰り返し設定ごと削除するか選択可能) |
|
||||
| 完了トグル | 課題の完了/未完了状態を切り替え |
|
||||
| 統計 | 科目別の完了率、期限内完了率等を表示 |
|
||||
|
||||
### 4.3 通知機能
|
||||
### 4.3 繰り返し課題機能
|
||||
|
||||
#### 4.3.1 1回リマインダー
|
||||
周期的に発生する課題を自動生成する機能。
|
||||
|
||||
| 機能 | 説明 |
|
||||
|------|------|
|
||||
| 繰り返し作成 | 課題登録時に繰り返し条件(毎日/毎週/毎月)を設定して作成 |
|
||||
| 自動生成 | 未完了の課題がなくなったタイミングで、設定に基づき次回の課題を自動生成 |
|
||||
| 繰り返し一覧 | 登録されている繰り返し設定を一覧表示 (`/recurring`) |
|
||||
| 繰り返し編集 | 繰り返し設定の内容(タイトル、条件、時刻など)を編集 |
|
||||
| 停止・再開 | 繰り返し設定を一時停止、または停止中の設定を再開 |
|
||||
| 繰り返し削除 | 繰り返し設定を完全に削除 |
|
||||
|
||||
### 4.4 通知機能
|
||||
|
||||
#### 4.4.1 1回リマインダー
|
||||
|
||||
指定した日時に1回だけ通知を送信する機能。
|
||||
|
||||
@@ -170,7 +209,7 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
| 設定 | 課題登録・編集画面で通知日時を指定 |
|
||||
| 送信 | 指定日時にTelegram/LINEで通知 |
|
||||
|
||||
#### 4.3.2 督促通知
|
||||
#### 4.4.2 督促通知
|
||||
|
||||
課題を完了するまで繰り返し通知を送信する機能。デフォルトで有効。
|
||||
|
||||
@@ -182,14 +221,14 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
| 重要度「小」 | **60分**ごとに通知 |
|
||||
| 停止条件 | 課題の完了ボタンを押すまで継続 |
|
||||
|
||||
#### 4.3.3 通知チャンネル
|
||||
#### 4.4.3 通知チャンネル
|
||||
|
||||
| チャンネル | 設定方法 |
|
||||
|------------|----------|
|
||||
| Telegram | config.iniでBot Token設定、プロフィールでChat ID入力 |
|
||||
| LINE Notify | プロフィールでアクセストークン入力 |
|
||||
|
||||
### 4.4 プロフィール機能
|
||||
### 4.5 プロフィール機能
|
||||
|
||||
| 機能 | 説明 |
|
||||
|------|------|
|
||||
@@ -198,7 +237,7 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
| パスワード変更 | 現在のパスワードを確認後、新しいパスワードに変更 |
|
||||
| 通知設定 | Telegram/LINE通知の有効化とトークン設定 |
|
||||
|
||||
### 4.4 管理者機能
|
||||
### 4.6 管理者機能
|
||||
|
||||
| 機能 | 説明 |
|
||||
|------|------|
|
||||
|
||||
Reference in New Issue
Block a user