= Soft-Scheduler の実装概略

このアプリケーションで提供する機能の概要について説明します。

== 実現したいこと

大規模でないチーム開発向けの、チケット管理アプリケーションを実現する。ここでのチケットとは、ソフトウェア開発のタスクや、バグ情報、問い合わせ情報を管理する単位とする。
基本的には、私が自分で使って満足できるものを作成する。

=== 目標

- 小規模プロジェクトのソフトウェア開発をサポートできるようにする。
- マルチユーザ(チーム)にて利用できるようにする。


== 提供する機能

以下に主要な機能を列挙する。

- チケットをプロジェクトという単位で管理する機能。
- チケットを管理する機能。
  - チケット一覧の情報を表示しつつ、チケットの詳細情報を更新できるようにする。
  - 全チケットをプロジェクト毎に表示できるようにする。
  - 指定したプロジェクトのチケットのみを表示できるようにする。

- プロジェクトの属性を設定して閲覧を管理する機能。
  - 個人プロジェクトかグループのプロジェクトか。
    - personal ... 個人のプロジェクト。メンバ管理や担当者の割り当てが不要。
    - public ... 複数人のプロジェクト。
  - 公開か非公開か。
    - opened ... メンバー以外も閲覧可能。メンバー以外は、新規チケットの登録と閲覧が可能。
    - closed ... メンバーのみ閲覧、変更できる。メンバー以外は閲覧すらできない。

- Burn down char を表示する機能。


== ページフローの概要

基本的に "チケット一覧と詳細 / プロジェクト一覧" を表示する。必要に応じて "Burn down チャート" や "プロジェクト管理", "個人設定", "システム管理" (管理者のみ) にリンクできるようにする。
また、最初は "ログイン / ユーザの新規登録" のページを表示する。

リンクヘッダには "チケット一覧と詳細 / プロジェクト一覧", "プロジェクト管理", "個人設定", "システム管理ページ", "ログアウト" (ログインしてないときは "ログイン") へのリンクを表示する。
リンクヘッダは、スクロールしないようにする。


== 各ページで提供する機能と実装

=== チケットの一覧と詳細 / プロジェクト一覧

- 左側のペインにチケット一覧を表示する。
  - 最後にログインしたときに表示していたプロジェクトのチケット一覧を表示する。
  - 最後のチケットの下に、新規チケットを発行するためのボタンを配置する。
    - 新規チケットを発行するボタンを押すと、右側のペインに新規チケット登録のための詳細表示を行うようにする。

- 右側のペインには、プロジェクト一覧を表示する。
  - あるチケットがクリックされたら、そのチケットの詳細情報を右側のペインに表示する。そのとき、プロジェクト一覧の表示は隠す。

- 詳細表示では、チケットの属性変更やコメントの追加、ファイルの添付ができるようにする。
  - 過去に追加されたコメントや、属性の変更が履歴表示されるようにする。
  - 添付されたファイルが画像のときは、サムネイル画像を表示する。

- チケット一覧は、全てのプロジェクトのチケットを表示 or 選択したプロジェクトのチケットのみを表示 のどちらかの表示を行う。
- チケットリストのプロジェクト名の横に Burn Down チャートを表示するためのリンク画像を配置する。
  - Private Project の場合には Burn Down チャートへのリンクを表示しない。


=== Burn Down チャート

- Resolved チケットの情報を元に Burn Down チャートを表示する。
- 閉じるボタンを押すと "チケットの一覧と詳細 / プロジェクト一覧" ページへ遷移させる。


=== ログイン / ユーザの新規登録

- メールアドレスとパスワードの入力を促すフォームを配置する。
- 新規作成のリンクをクリックすると、ユーザ新規登録のためのフォームも表示する。
  - ユーザ作成時に、そのユーザに対して Private Project を追加する。
- 新規ユーザの登録の処理は、入力されたメールアドレスにメールを送信し、そのメール内の手順に従うことで完了するようにする。
  - 最初のユーザは管理者として登録する。その旨はメール送信のメッセージに含める。


=== 個人設定

- ハンドルを変更できるようにする。
  - デフォルトのハンドルは、メールアドレスの @ 以前の文字列とする。
- ユーザの画像を表示できるようにする。


=== プロジェクト管理

プロジェクトの表示順や、管理しているプロジェクト情報を変更できるようにする。

==== プロジェクトの表示順の変更

- プロジェクト名を ドラッグ & ドロップ して「保存」することで、表示するプロジェクトの順番を変更できるようにする。

==== プロジェクト設定の変更

- 管理しているプロジェクトの情報は変更できるようにする。
  - プロジェクト名
  - プロジェクトの説明
  - メンバー
  - メンバー外のユーザが閲覧することを許可するかどうか。
  - メンバー外のユーザが投稿することを許可するかどうか。


=== システム管理

- ユーザ一覧の管理が行える。

==== ユーザ一覧の管理

ユーザの有効化や無効化が行える。
