仕様書(レビュー済)
アプリの名前はFreezerManです。com.yasumu.freezerman傘下で開発します。
機能要件
機能要件は下記のとおりです。 画面は ①ストック一覧画面 ②ストック追加画面 ③ストック編集画面 ④カテゴリ編集画面 ⑤保管場所編集画面 ⑥FreezerManについて画面 の6つ。
①ストック一覧画面
- タイトルは「ストック一覧」。トップバーに表示して左端には家アイコンを表示。
- トップバーの右端には設定(歯車)アイコンを配置してタップで、「カテゴリ編集」、「保管場所編集」、「FreezerManについて」のポップアップメニューを表示。タップでそれぞれの画面に遷移する。
- リスト表示でストック一覧を表示する。縦スクロールする形式。ストックが空のときは「ストックがありません。+ボタンからストックを追加できます」を表示する
- ストックにはアイテム名、アイコン、保管場所、消費期限、残り日数、カテゴリ、残数を表示
- 残り日数は当日を0日とする。負の場合には期限切れと表示する。いずれの場合も赤色で表示する。
- 残り日数は expireDate(00:00 JST) - 今日(00:00 JST) の日数差で計算する
- ストックデータには調理日と登録日を持たせるが一覧画面では表示しない
- 調理日、登録日はデータとしてはソート用に時刻も持たせる。ただし表示しない。
- アイコンは保管場所に紐づける
- ストック数の左右には+と-のボタンがあり残数をインクリメント、デクリメントできるようにする(0で下限ガード、上限ガードは30)。変更時点で確定してユーザーに確認は求めない。0のときは赤文字にする
- ストック数0の状態でアイテムを左スワイプで削除。ユーザーに確認は求めない(0にしてからでないとスワイプできないのでワンクッションおいている)
- アイテムをタップでストック編集画面に遷移
- FABでアイテム追加画面に遷移
- 調理日順、保管場所順、期限順のソートボタンをトップバーの下に配置してソートができるようにする
ソート仕様
- 調理日:昇順、保管場所:昇順、期限:昇順を規定値として、別のキーをタップした場合は規定値の順、現在のキーをタップした場合は昇順/降順を入れ替える。保管場所の順序はIDではなく保管場所設定画面の並び順。
- ソートキーの値が同じ場合は登録日時を第二キーにする(昇順・降順は第一キーに合わせる)
②ストック追加画面
- タイトルは「ストック追加」。トップバーに表示して左端には「←」アイコンを表示。
- アイテム名、調理日、数量、食べきり期限、保管場所、カテゴリを設定できるようにする
- 「保存」ボタンを配置し、設定項目すべてが有効な値のみアクティブにする。タップで確定してストック一覧画面へ戻る
- アイテム名は1文字以上30文字以内を有効とする(先頭末尾の半角および全角空白はトリムする)
- 数量は1以上30以下を有効とする(ただしスライダーで設定するので有効値しか設定できない)
- 食べきり期限>=調理日を有効とする
- 調理日、保管場所、カテゴリはすべて有効とする(保管場所、カテゴリ削除時に整合性チェックして存在しないIDが指定されたデータはすべて未設定に変更する)
- トップアプリバーの左上の「←」ボタンでストック一覧画面に戻る。ただし、編集されていたらタップ時に確認(OK or キャンセル)を求める。
- 編集されていたかどうかの判定は規定値との異なるデータがあるかどうかで判定する。
- (先頭末尾の半角および全角空白をトリムした)アイテム名が0文字のときはテキストエリアをエラー状態にする
- 数量はデフォルトを1とする。スライダーで1-30を設定できるようにする
- 調理日はデフォルトを当日の日付として設定しておき、右端にカレンダーピッカーを配置
- 食べきり期限はデフォルトを5週後の同曜日に設定しておき、右端にカレンダーピッカーを配置
- 食べきり期限が無効値の場合はテキストエリアをエラー状態にして「調理日以降を設定してください」と表示する
- 保管場所は保管場所リストから選択できるようにする(ボタンタップでポップアップリスト表示。未設定も選択可能。未設定は最上位に表示する)
- 保管場所の規定値は未設定
- カテゴリはカテゴリリストから選択できるようにする(ボタンタップでポップアップリスト表示。未設定も選択可能。未設定は最上位に表示する)
- カテゴリの規定値は未設定
- 追加時にアイテムの登録日時を設定する。
③ストック編集画面
- タイトルは「ストック編集」
- 設定項目はストック追加画面と同じだが現在の値で表示。
- ストック追加画面は保存ボタンだけだったが、その左隣に赤色で削除ボタンを配置する。
- 「保存」ボタンは設定項目すべてが有効な値のときのみアクティブにする。タップで確定してストック一覧画面へ戻る
- アイテム名は1文字以上30文字以内を有効とする(先頭末尾の半角および全角空白はトリムする)
- 数量は1以上30以下を有効とする
- 食べきり期限>=調理日を有効とする
- 調理日、保管場所、カテゴリはすべて有効とする(保管場所、カテゴリ削除時に整合性チェックして存在しないIDが指定されたデータはすべて未設定に変更する)
- トップアプリバーの左上の「←」ボタンでストック一覧画面に戻る。ただし、編集されていたらタップ時に確認(OK or キャンセル)を求める。
- 編集されていたかどうかの判定は遷移時の値と異なる値が存在するかどうかで判定する。
- 削除ボタンタップ時は確認ダイアログで確認(削除 or キャンセル)を求める
- 削除後はストック一覧画面に戻る
- (先頭末尾の半角および全角空白をトリムした)アイテム名が0文字のときはテキストエリアをエラー状態にする
- 数量はスライダーで0-30を設定できるようにする(0は一覧で0にしたケース)が0が設定されている場合はエラーカラーとする。数量0の場合は削除はできるが保存はできない。
- 調理日は既存データの日付を設定しておき、右端にカレンダーピッカーを配置
- 食べきり期限は既存データの日付に設定しておき、右端にカレンダーピッカーを配置
- 保管場所は保管場所リストから選択できるようにする(ボタンタップでポップアップリスト表示)リストの表示順序は保管場所の並び順(保管場所リストの順序は変更可能になっている)
- カテゴリはカテゴリリストから選択できるようにする(ボタンタップでポップアップリスト表示)リストの表示順序はカテゴリの並び順(カテゴリリストの順序は変更可能になっている)
- アイテムの登録日時は編集しても変更しない。
④カテゴリ編集画面
- タイトルは「カテゴリ編集」。トップバーに表示して左端には「←」アイコンを表示。
- トップアプリバーの左上の「←」ボタンでストック一覧画面に戻る。確認は不要。
- カテゴリはリスト表示。左端にはアイコン(データに紐づかない共通アイコン)を表示する
- カテゴリが0個の場合は「カテゴリがありません」と表示する。
- アイテムの追加はFABで行う。FABラベルは「カテゴリを追加」とする。
- リストの各アイテムの右端には編集アイコン「ペン」を表示。
- FABまたはペンをタップしたらボトムシートを表示する。
- ボトムシートにはカテゴリ名のテキストボックスと確定ボタン、削除ボタン、キャンセルボタンを表示する。確定ボタンはカテゴリ名が1文字以上のとき、かつ変更があった場合のみアクティブにする
- 削除ボタンがタップされた場合に、当該カテゴリを使用しているストックがある場合は、確認ダイアログを表示する(削除 or キャンセル)。削除がタップされた場合はカテゴリ削除と同時に当該カテゴリを使用しているすべてのストックのカテゴリを未設定にする
- (先頭末尾の半角および全角空白をトリムした)カテゴリ名は1文字以上。0文字のときはテキストボックスをエラーカラーにする。
- 確定とキャンセルはユーザーへの確認を求めないで実行する。いずれの場合もボトムシートを非表示にする
- アイテムが2個以上のとき、ドラッグで順序を入れ替えられるようにする。
⑤保管場所編集画面
- タイトルは「保管場所編集」。トップバーに表示して左端には「←」アイコンを表示。
- トップアプリバーの左上の「←」ボタンでストック一覧画面に戻る。確認は不要。
- アイテムはリスト表示。左端にはアイコン(保管場所ごとに決まっている)を表示する。アイコンリストはハードコーディングで追加も削除もできない。
- アイテムが0個の場合は「保管場所がありません」と表示する。
- アイテムの追加はFABで行う。FABラベルは「保管場所を追加」とする。
- リストの各アイテムの右端には編集アイコン「ペン」を表示。
- FABまたは、ペンをタップしたらボトムシートを表示する。
- ボトムシートにはアイコン、保管場所名のテキストボックス、確定ボタン、削除ボタン、キャンセルボタンを表示する。確定ボタンは保管場所名が1文字以上のとき、かつ変更があった場合のみアクティブにする。
- (先頭末尾の半角および全角空白をトリムした)保管場所名は1文字以上。0文字のときはテキストボックスをエラーカラーにする。
- 削除ボタンがタップされた場合、当該保管場所を使用しているストックがある場合は、確認ダイアログを表示する(削除 or キャンセル)。削除がタップされたら保管場所削除と同時に当該保管場所を使用しているすべてのストックの保管場所を未設定にする
- アイコンをタップしたら6×5=30個程度のアイコンをピックできるパレットのダイアログを表示する。選択したアイコンに変更する(ユーザーへの確認は求めない)
- 各保管場所は 30個のアイコン候補のいずれか1つを参照する
- 確定とキャンセルはユーザーへの確認を求めないで実行する。いずれの場合もボトムシートを非表示にする
- アイテムが2個以上のとき、ドラッグで順序を入れ替えられるようにする。
⑥FreezerManについて画面
- タイトルは「FreezerManについて」。トップバーに表示して左端には「←」アイコンを表示。
- トップアプリバーの左上の「←」ボタンでストック一覧画面に戻る。確認は不要。
- 画面上部中央にFreezerManのアプリアイコンを表示する。
- アプリアイコンの下にバージョン番号、著作権表記を表示する。
- その下に使用しているオープンソースライブラリの一覧をリスト表示する 。スクロールですべて表示できるようにする。
その他実装時の留意点
- カテゴリの未設定はnullを使用する。
- 保管場所の未設定はnullを使用する。