プロジェクト

全般

プロフィール

バグ #138

未完了

【実装】Redmineドキュメント機能のAPI連携

Redmine Admin さんが3日前に追加. 3日前に更新.

ステータス:
新規
優先度:
通常
担当者:
-
開始日:
2025-06-02
期日:
進捗率:

0%

予定工数:

説明

実装

実施内容

  1. ドキュメントサービス層の実装
  2. API層の実装
  3. 設定機能の実装
  4. ユニットテストの実装

実装詳細

ドキュメントサービス (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日前に更新

親チケット #135 に紐づけます。

Redmine Admin さんが3日前に更新

実装の進捗

チケットの種別を「バグ」から「機能」に変更しました。

現在の実装状況(80%完了)

  • ドキュメントサービス層(document_service.py)

    • ✅ ファイルアップロード機能
    • ✅ チケット添付機能
    • ✅ 独立ドキュメント作成機能(Issue形式)
    • ✅ 独立ドキュメント作成機能(Wiki形式)
    • ✅ カテゴリ管理機能
    • ✅ コンテンツタイプ管理
    • 🔄 ドキュメント検索機能(基本実装完了、フィルタリング拡張中)
    • 🔄 エラーハンドリング(基本実装完了、エッジケース対応中)
  • API層(api.py)

    • ✅ エンドポイント定義
    • ✅ リクエスト/レスポンスモデル
    • ✅ 基本バリデーション
    • ✅ CORS設定
    • 🔄 エラーハンドリング(拡充中)
    • 🔄 API文書自動生成(拡充中)
  • 設定機能(config)

    • ✅ 設定ファイル読み込み
    • ✅ パラメータバリデーション
    • 🔄 環境変数サポート(実装中)
  • ユニットテスト

    • ✅ サービス層基本機能テスト
    • 🔄 エラーケーステスト(追加中)
    • 🔄 API層テスト(実装中)

今週の実装タスク

  1. ドキュメント検索機能の拡張(複合フィルタ、ソート機能)
  2. エラーハンドリングの強化(全APIエンドポイント)
  3. 環境変数サポートの実装(設定の柔軟化)
  4. ユニットテストの拡充(カバレッジ向上)

現在のところ、基本機能は予定通り実装できており、主要な技術的課題は解決済みです。エラーハンドリングの強化とエッジケース対応を進めています。

Redmine Admin さんが3日前に更新

実装完了詳細報告

実装ファイル一覧

新規作成ファイル

  1. src/services/documentClient.ts - Redmine Document API クライアント
  2. src/pages/Documents.tsx - ドキュメント管理メインページ
  3. src/components/documents/CreateDocument.tsx - ドキュメント作成コンポーネント
  4. src/components/documents/AttachToIssue.tsx - チケット添付コンポーネント

更新ファイル

  1. src/App.tsx - /documents ルート追加
  2. src/pages/TicketDetail.tsx - 添付機能統合
  3. 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履歴

  1. aa2de85 - Initial commit: baseline
  2. eb447d2 - feat: 基本実装追加
  3. b3818ca - feat: 完全実装
  4. 11d7de1 - feat: チケット詳細統合

テスト対象

  • ファイルアップロード機能
  • チケット添付機能
  • ドキュメント検索・一覧
  • エラーハンドリング
  • パフォーマンス検証

他の形式にエクスポート: Atom PDF