Skip to content

Commit c24a844

Browse files
Copilotnotfolder
andcommitted
Update design: DBTask model, TaskDBManager class, and decomposed task_key fields
Co-authored-by: notfolder <20558197+notfolder@users.noreply.github.com>
1 parent 5504583 commit c24a844

1 file changed

Lines changed: 51 additions & 53 deletions

File tree

docs/spec/DB_SEPARATION_SPECIFICATION.md

Lines changed: 51 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -9,62 +9,57 @@
99
- **タスク情報DB(tasksテーブル)のみ**を対象とする
1010
- メッセージ履歴、要約履歴、ツール実行履歴(JSONLファイル)は対象外
1111

12-
### 1.3 現在のテーブル構造(tasks テーブル)
13-
```
14-
uuid TEXT PRIMARY KEY, -- タスクの一意識別子
15-
task_source TEXT NOT NULL, -- タスクソース(github/gitlab)
16-
owner TEXT NOT NULL, -- リポジトリオーナー
17-
repo TEXT NOT NULL, -- リポジトリ名
18-
task_type TEXT NOT NULL, -- タスクタイプ(issue/pull_request/merge_request)
19-
task_id TEXT NOT NULL, -- タスクID(Issue番号等)
20-
status TEXT NOT NULL, -- ステータス(running/completed/failed/stopped)
21-
created_at TEXT NOT NULL, -- 作成日時
22-
started_at TEXT, -- 開始日時
23-
completed_at TEXT, -- 完了日時
24-
process_id INTEGER, -- プロセスID
25-
hostname TEXT, -- ホスト名
26-
llm_provider TEXT, -- LLMプロバイダー
27-
model TEXT, -- 使用モデル
28-
context_length INTEGER, -- コンテキスト長
29-
llm_call_count INTEGER, -- LLM呼び出し回数
30-
tool_call_count INTEGER, -- ツール呼び出し回数
31-
total_tokens INTEGER, -- 総トークン数
32-
compression_count INTEGER, -- 圧縮回数
33-
error_message TEXT, -- エラーメッセージ
34-
user TEXT -- ユーザー名
35-
```
12+
### 1.3 TaskKey構造の分析
13+
現在のTaskKeyは以下の4種類があり、それぞれ異なるフィールドを持つ:
14+
15+
| TaskKey種別 | task_source | task_type | owner | repo | project_id | number |
16+
|------------|-------------|-----------|-------|------|------------|--------|
17+
| GitHubIssueTaskKey | github | issue ||| - ||
18+
| GitHubPullRequestTaskKey | github | pull_request ||| - ||
19+
| GitLabIssueTaskKey | gitlab | issue | - | - || ○(issue_iid) |
20+
| GitLabMergeRequestTaskKey | gitlab | merge_request | - | - || ○(mr_iid) |
21+
22+
これらを統一的に扱うため、以下のフィールド構成でtask_keyを分解する:
23+
- `task_source`: タスクソース(github/gitlab)
24+
- `task_type`: タスクタイプ(issue/pull_request/merge_request)
25+
- `owner`: GitHubリポジトリオーナー(GitLabの場合はNULL)
26+
- `repo`: GitHubリポジトリ名(GitLabの場合はNULL)
27+
- `project_id`: GitLabプロジェクトID(GitHubの場合はNULL)
28+
- `number`: タスク番号(GitHub: number、GitLab: issue_iid/mr_iid)
3629

3730
---
3831

3932
## 2. 詳細設計
4033

4134
### 2.1 ファイル構成
42-
1ファイルにTaskモデルとDBアクセスロジックをまとめる
35+
1ファイルにDBTaskモデルとDBアクセスロジックをまとめる
4336

4437
```
4538
db/
46-
└── task_db.py # Taskモデル定義 + DBアクセスロジッククラス
39+
└── task_db.py # DBTaskモデル定義 + TaskDBManagerクラス
4740
```
4841

4942
### 2.2 task_db.py の設計
5043

51-
#### 2.2.1 Task モデル
44+
#### 2.2.1 DBTask モデル
5245
SQLAlchemy ORMを使用してtasksテーブルを定義する。
5346

5447
**処理内容**:
5548
- SQLAlchemy 2.0スタイルの宣言的ベースクラスを使用する
5649
- PostgreSQL用の型定義を行う
57-
- インデックスを定義する
50+
- task_key分解フィールドのインデックスを定義する
51+
- `get_task_key()` メソッドでTaskKeyオブジェクトを復元する
5852

5953
**カラム定義**:
6054
| カラム名 || PostgreSQL型 | 制約 | 説明 |
6155
|---------|-----|-------------|------|------|
6256
| uuid | String(36) | VARCHAR(36) | PRIMARY KEY | タスク一意識別子 |
63-
| task_source | String(50) | VARCHAR(50) | NOT NULL | タスクソース |
64-
| owner | String(255) | VARCHAR(255) | NOT NULL | リポジトリオーナー |
65-
| repo | String(255) | VARCHAR(255) | NOT NULL | リポジトリ名 |
66-
| task_type | String(50) | VARCHAR(50) | NOT NULL | タスクタイプ |
67-
| task_id | String(50) | VARCHAR(50) | NOT NULL | タスクID |
57+
| task_source | String(50) | VARCHAR(50) | NOT NULL | タスクソース(github/gitlab) |
58+
| task_type | String(50) | VARCHAR(50) | NOT NULL | タスクタイプ(issue/pull_request/merge_request) |
59+
| owner | String(255) | VARCHAR(255) | NULL可 | GitHubリポジトリオーナー |
60+
| repo | String(255) | VARCHAR(255) | NULL可 | GitHubリポジトリ名 |
61+
| project_id | String(255) | VARCHAR(255) | NULL可 | GitLabプロジェクトID |
62+
| number | Integer | INTEGER | NOT NULL | タスク番号 |
6863
| status | String(20) | VARCHAR(20) | NOT NULL | ステータス |
6964
| created_at | DateTime | TIMESTAMP WITH TIME ZONE | NOT NULL | 作成日時 |
7065
| started_at | DateTime | TIMESTAMP WITH TIME ZONE | - | 開始日時 |
@@ -87,8 +82,14 @@ SQLAlchemy ORMを使用してtasksテーブルを定義する。
8782
| ix_tasks_status | status | ステータス別検索の高速化 |
8883
| ix_tasks_created_at | created_at | 作成日時順ソートの高速化 |
8984
| ix_tasks_user | user | ユーザー別検索の高速化 |
85+
| ix_tasks_task_key | task_source, task_type, owner, repo, project_id, number | TaskKey検索の高速化 |
86+
87+
**DBTaskモデルのメソッド**:
88+
| メソッド名 | 引数 | 戻り値 | 説明 |
89+
|-----------|------|--------|------|
90+
| get_task_key | - | TaskKey | task_key分解フィールドからTaskKeyオブジェクトを復元する |
9091

91-
#### 2.2.2 TaskDB クラス
92+
#### 2.2.2 TaskDBManager クラス
9293
タスクのDB操作を行うロジッククラスを実装する。
9394

9495
**初期化処理**:
@@ -110,13 +111,10 @@ SQLAlchemy ORMを使用してtasksテーブルを定義する。
110111

111112
| メソッド名 | 引数 | 戻り値 | 説明 |
112113
|-----------|------|--------|------|
113-
| create_task | task_data: dict | Task | 新規タスクを作成する |
114-
| get_task | uuid: str | Task または None | UUIDでタスクを取得する |
115-
| update_task | uuid: str, updates: dict | bool | タスクを更新する |
116-
| update_status | uuid: str, status: str, error_message: str (optional) | bool | ステータスを更新する |
117-
| update_statistics | uuid: str, llm_calls: int, tool_calls: int, tokens: int, compressions: int | bool | 統計情報を加算更新する |
118-
| complete_task | uuid: str | bool | タスクを完了状態に更新する |
119-
| fail_task | uuid: str, error_message: str | bool | タスクを失敗状態に更新する |
114+
| create_task | task_data: dict | DBTask | 新規タスクを作成する |
115+
| get_task | uuid: str | DBTask または None | UUIDでタスクを取得する |
116+
| get_task_by_key | task_key: TaskKey | DBTask または None | TaskKeyでタスクを取得する |
117+
| save_task | db_task: DBTask | DBTask | DBTaskオブジェクトを保存(更新)する |
120118

121119
**処理内容**:
122120
- セッション管理をコンテキストマネージャーで自動化する
@@ -126,19 +124,19 @@ SQLAlchemy ORMを使用してtasksテーブルを定義する。
126124
### 2.3 既存コード修正設計
127125

128126
#### 2.3.1 TaskContextManager の修正(context_storage/task_context_manager.py)
129-
現在のSQLite直接操作を、TaskDBクラスを使用したアクセスに変更する
127+
現在のSQLite直接操作を、TaskDBManagerクラスを使用したアクセスに変更する
130128

131129
**修正対象メソッド**:
132130
| メソッド | 修正内容 |
133131
|---------|---------|
134-
| `__init__` | TaskDBクラスのインスタンスを作成する |
135-
| `_init_database` | 削除。初期化はTaskDBクラスで行う |
136-
| `_register_or_update_task` | TaskDB.create_task または TaskDB.update_task を使用する |
137-
| `update_status` | TaskDB.update_status を使用する |
138-
| `update_statistics` | TaskDB.update_statistics を使用する |
139-
| `complete` | TaskDB.complete_task を使用する |
140-
| `stop` | TaskDB.update_status を使用する |
141-
| `fail` | TaskDB.fail_task を使用する |
132+
| `__init__` | TaskDBManagerクラスのインスタンスを作成する |
133+
| `_init_database` | 削除。初期化はTaskDBManagerクラスで行う |
134+
| `_register_or_update_task` | TaskDBManager.create_task または TaskDBManager.save_task を使用する |
135+
| `update_status` | DBTaskオブジェクトを取得し、ステータスを変更後、save_taskを使用する |
136+
| `update_statistics` | DBTaskオブジェクトを取得し、統計情報を更新後、save_taskを使用する |
137+
| `complete` | DBTaskオブジェクトを取得し、完了状態に変更後、save_taskを使用する |
138+
| `stop` | DBTaskオブジェクトを取得し、停止状態に変更後、save_taskを使用する |
139+
| `fail` | DBTaskオブジェクトを取得し、失敗状態に変更後、save_taskを使用する |
142140

143141
### 2.4 設定ファイル設計
144142

@@ -220,7 +218,7 @@ PostgreSQLコンテナを追加する。
220218

221219
| テストファイル | 対象 | 内容 |
222220
|--------------|------|------|
223-
| test_task_db.py | db/task_db.py | TaskDBクラスのテスト |
221+
| test_task_db.py | db/task_db.py | TaskDBManagerクラスのテスト |
224222

225223
### 5.2 テスト用データベース
226224
テスト実行時はテスト用PostgreSQLコンテナを使用する。
@@ -232,7 +230,7 @@ PostgreSQLコンテナを追加する。
232230
### 6.1 修正対象ファイル
233231
| ファイル | 修正内容 |
234232
|---------|---------|
235-
| context_storage/task_context_manager.py | DB操作をTaskDBクラス経由に変更 |
233+
| context_storage/task_context_manager.py | DB操作をTaskDBManagerクラス経由に変更 |
236234
| config.yaml | database セクションを追加 |
237235
| docker-compose.yml | postgres サービスを追加 |
238236
| pyproject.toml | 依存パッケージを追加 |
@@ -241,7 +239,7 @@ PostgreSQLコンテナを追加する。
241239
### 6.2 新規作成ファイル
242240
| ファイル | 内容 |
243241
|---------|------|
244-
| db/task_db.py | Taskモデル + TaskDBクラス |
242+
| db/task_db.py | DBTaskモデル + TaskDBManagerクラス |
245243
| scripts/create_db.py | DB作成ツール |
246244

247245
---

0 commit comments

Comments
 (0)