操作
バグ #138
未完了【実装】Redmineドキュメント機能のAPI連携
ステータス:
新規
優先度:
通常
担当者:
-
開始日:
2025-06-02
期日:
進捗率:
0%
予定工数:
説明
実装¶
実施内容¶
- ドキュメントサービス層の実装
- API層の実装
- 設定機能の実装
- ユニットテストの実装
実装詳細¶
ドキュメントサービス (document_service.py)¶
ドキュメント操作の核となるサービス層を実装:
- ファイルアップロード機能
- チケット添付機能
- 独立ドキュメント作成機能(Issue/Wiki)
- ドキュメント検索機能
- カテゴリ管理機能
- コンテンツタイプ管理
class DocumentService:
"""Redmineドキュメント操作サービス"""
def __init__(self, config_path: str = None):
# 設定ファイル読み込み
# ...
def attach_document_to_issue(self, issue_id, file_path, filename, content_type, comment):
# チケットにドキュメントを添付
# ...
def create_standalone_document(self, project_id, title, description, file_path, filename, content_type, keywords):
# 独立したドキュメントを作成
# ...
def search_documents(self, project_id, keyword, limit):
# ドキュメント検索
# ...
API層 (api.py)¶
FastAPIを使用したRESTful API実装:
- エンドポイント定義
- リクエスト/レスポンスモデル
- バリデーション
- エラーハンドリング
- CORS設定
app = FastAPI(title="Redmine Document API")
@app.post("/documents/standalone", response_model=DocumentResponse)
async def create_standalone_document(document: DocumentCreate, file: UploadFile):
# 独立ドキュメント作成API
# ...
@app.post("/documents/attach")
async def attach_document_to_issue(document: DocumentAttach, file: UploadFile):
# チケット添付API
# ...
@app.get("/documents")
async def search_documents(project_id: Optional[int] = None, keyword: Optional[str] = None):
# ドキュメント検索API
# ...
モデル定義 (models.py)¶
データモデルの定義:
- ドキュメントモデル
- 検索フィルタモデル
- API入出力モデル
設定ファイル (document_config.json)¶
可変パラメータの外部設定化:
- Redmine接続情報
- ドキュメント設定
- 許可ファイル設定
テスト実装 (test_document_api.py)¶
単体テスト:
- サービス層のテスト
- API層のテスト
- エラーケースのテスト
実装状況¶
- コアサービス層: 完了
- API層: 完了
- モデル定義: 完了
- 設定機能: 完了
- ユニットテスト: 実装中(基本機能のテストは完了)
Redmine Admin さんが3日前に更新
実装の進捗¶
チケットの種別を「バグ」から「機能」に変更しました。
現在の実装状況(80%完了)¶
-
ドキュメントサービス層(document_service.py)
- ✅ ファイルアップロード機能
- ✅ チケット添付機能
- ✅ 独立ドキュメント作成機能(Issue形式)
- ✅ 独立ドキュメント作成機能(Wiki形式)
- ✅ カテゴリ管理機能
- ✅ コンテンツタイプ管理
- 🔄 ドキュメント検索機能(基本実装完了、フィルタリング拡張中)
- 🔄 エラーハンドリング(基本実装完了、エッジケース対応中)
-
API層(api.py)
- ✅ エンドポイント定義
- ✅ リクエスト/レスポンスモデル
- ✅ 基本バリデーション
- ✅ CORS設定
- 🔄 エラーハンドリング(拡充中)
- 🔄 API文書自動生成(拡充中)
-
設定機能(config)
- ✅ 設定ファイル読み込み
- ✅ パラメータバリデーション
- 🔄 環境変数サポート(実装中)
-
ユニットテスト
- ✅ サービス層基本機能テスト
- 🔄 エラーケーステスト(追加中)
- 🔄 API層テスト(実装中)
今週の実装タスク¶
- ドキュメント検索機能の拡張(複合フィルタ、ソート機能)
- エラーハンドリングの強化(全APIエンドポイント)
- 環境変数サポートの実装(設定の柔軟化)
- ユニットテストの拡充(カバレッジ向上)
現在のところ、基本機能は予定通り実装できており、主要な技術的課題は解決済みです。エラーハンドリングの強化とエッジケース対応を進めています。
Redmine Admin さんが3日前に更新
実装完了詳細報告¶
実装ファイル一覧¶
新規作成ファイル¶
-
src/services/documentClient.ts
- Redmine Document API クライアント -
src/pages/Documents.tsx
- ドキュメント管理メインページ -
src/components/documents/CreateDocument.tsx
- ドキュメント作成コンポーネント -
src/components/documents/AttachToIssue.tsx
- チケット添付コンポーネント
更新ファイル¶
-
src/App.tsx
- /documents ルート追加 -
src/pages/TicketDetail.tsx
- 添付機能統合 -
src/components/common/LoadingSpinner.tsx
- サイズプロパティ追加
機能仕様¶
ドキュメント管理ページ¶
-
URL:
/documents
-
機能: 3タブ構成
- ドキュメント一覧: 検索・フィルタリング・削除
- ドキュメント作成: ファイルアップロード・メタデータ入力
- チケット添付: チケット検索・ファイル添付
API仕様¶
-
ベースURL:
task.call2arm.com/api
- 認証: X-Redmine-API-Key ヘッダー
- アップロード: 2段階プロセス (upload → attach)
UI/UX仕様¶
- デザイン: Tailwind CSS + LINEテーマ
- レスポンシブ: モバイル・タブレット・デスクトップ対応
- アクセシビリティ: ドラッグ&ドロップ + クリック選択
Git履歴¶
-
aa2de85
- Initial commit: baseline -
eb447d2
- feat: 基本実装追加 -
b3818ca
- feat: 完全実装 -
11d7de1
- feat: チケット詳細統合
テスト対象¶
- ファイルアップロード機能
- チケット添付機能
- ドキュメント検索・一覧
- エラーハンドリング
- パフォーマンス検証
操作