焼きぶろぐ

思いついたことをだらだら書いてます

Tracチケット管理ツールを作る:設計

要件定義の続き

INDEX:Tracチケット管理ツールを作る:まとめ - 焼きぶろぐ

要件おさらい

  • 管理するチケットの対象
    • 複数プロジェクトの担当チケットを一画面で表示したい
    • プロジェクトによっては、自分が表示させたいチケットを登録したい
    • 自分が過去担当していたチケットは表示させておきたい
  • 表示する項目
    • プロジェクトごとに表示する項目を変えたい
    • チケットごとにメモとかリンクとかを保存して表示したい
  • 画面
    • メイン画面:今担当しているチケット一覧が見たい
    • 過去チケット一覧画面:過去に担当していたチケットを一覧で見たい。検索もしたい

前提

Tracはカスタムクエリという機能があり、
http://Tracプロジェクトのサーバ名/query?[列名1]=[抽出条件1]&[列名2]=[抽出条件2]...&colum=[表示する列名1]&column=[表示する列名2]...
のようなURLをHttpリクエストすることで、抽出条件に該当するチケット・指定した表示列のチケット一覧を返してくれます。
urlの後ろに&format=csvを付けることでcsv形式(のStream)で帰ってきます。
TracAPIを使用すればHttpリクエストで行わなくてもチケットを取得できるようですが、これはTracプロジェクトごとに設定する必要があり今回は採用していません(API非対応のものがあったため)

今回はこの仕組みを使ってTracのチケット情報を取得します。
また、Tracはプロジェクト別にカスタム列を作成することができ、カラム名を自由に設定できます。(status2:進捗状態など)

DB設計(モデル設計)

必要な要素洗い出し(エンティティ)

  • プロジェクト
    • プロジェクトの名前
    • プロジェクトのサーバ名 →http://Tracプロジェクトのサーバ名/
    • プロジェクトの初期表示条件 →[列名1]=[抽出条件1]...の箇所
    • プロジェクトの表示列 →colum=[表示する列名1]... の箇所
    • プロジェクトのカスタム列 
  • チケット
    • プロジェクト
    • TracチケットID(≠チケットの主キー)
    • Tracから取得する情報
      • タイトル
      • ステータス
      • 期日
      • 更新日
      • 起票者
      • 担当者
    • 自分で保存する情報
      • カテゴリ
      • 自分の進捗状態
      • メモ
      • 表示フラグ(メイン画面に表示するかどうか)
    • プロジェクト別の表示列に対応する値 →プロジェクト別に保存が必要なので、DBは対象外

※チケットはプロジェクトID×TracチケットIDで一意になるが、複合主キーは管理上めんどくさいのでチケットの主キーはチケットID、プロジェクトIDを外部キーに持つことにした

モデルと関係性

  • プロジェクト:プロジェクトに対して1個
    • エンティティ:プロジェクト名、URL、クエリ条件、取得列の設定
  • プロジェクトカスタム項目:プロジェクトに対してn個
    • エンティティ:プロジェクト別のカスタム列と日本語名の設定
  • チケット:プロジェクトに対してn個、チケットに対して1個。プロジェクト×TracチケットIDで一意になる。
    • エンティティ:TracのチケットID、メモ項目、表示フラグなどを保持

NEXT:Tracチケット管理ツールを作る:フレームワーク選定 - 焼きぶろぐ

INDEX:Tracチケット管理ツールを作る:まとめ - 焼きぶろぐ