かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その1 )( 概要 )

概要

下記の概要の Web アプリケーションを作成します。

  • 今まで使っていない以下の要素・機能が絡む Web アプリケーションを作成します。
    • ファイルアップロード・ダウンロード
    • Cookieに値をセットする・取り出す
    • セッションに値をセットする・取り出す
    • Spring Session
    • WebAPI
    • Spring Security 関連の以下の機能
      • 認証機能で UserDetailsService の継承クラスを実装して locked, expired, credentialsExpired のチェック、エラーメッセージ表示が行われるようにする
      • 認可機能 ( 権限によって機能が使える/使えない等 )
      • remember-me
    • RabbitMQ を利用した MQ連携 ( Spring AMQP )
  • カーリル図書館API を利用して Web アプリケーションを作成します。
  • 仕様、利用イメージは以下の通りとします。
    1. ユーザは管理者、承認者、一般ユーザの3通りに分かれます。
    2. 権限は管理権限、承認権限の2つを用意します。管理権限が付与されたユーザを管理者、承認権限を付与されたユーザを承認者と呼びます。1人のユーザに複数権限を付与できます。ユーザのID・パスワード等の登録、権限の付与は直接DBに登録します。画面は用意しません。
    3. 管理者が検索対象の図書館を登録します。
    4. 一般ユーザは書籍の ISBN、書名が書かれた CSV ファイルをアップロードします。
    5. バックグラウンドでカーリルの図書館APIを呼び出し、アップロードされた書籍の貸出状況を取得します。
    6. 一般ユーザは貸出状況を見て、借りたい書籍を選択します。
    7. 承認者は申請された内容を見て承認あるいは却下します。
    8. 一般ユーザは申請結果を確認します。
  • 以下の画面、WebAPI、タスクを実装します。
    • ログイン画面
      • ID、パスワードを入力してログインします。
      • パスワードを5回間違えた場合には ID をロックします。
      • ID には有効期限を設定しておくことができ、有効期限を過ぎている場合にはログインできないようにします。
      • パスワードには有効期限を設定しておくことができ、有効期限を過ぎている場合にはログインできないようにします。今回はエラーメッセージを表示するだけで、パスワードの変更画面へ遷移するような機能は実装しません。
      • 「次回から自動的にログインする」チェックボックスを表示して、チェックしてログインできた場合には次回からログイン画面が表示されないようにします。
    • ログアウト機能
    • 検索対象図書館登録画面 ( 管理者のみ )
      • 都道府県名を入力すると、Javascript で図書館一覧取得 WebAPI を呼び出して図書館一覧を表示します。
      • 表示された図書館一覧から検索対象の図書館を選択して登録します。登録できる図書館は1つだけとします。
    • 図書館一覧取得 WebAPI
      • カーリルの図書館データベース WebAPI を呼び出し、指定された都道府県の図書館一覧を取得します。
      • 結果は JSON で返します。
    • 貸出希望書籍 CSV ファイルアップロード画面
      • 書籍の ISBN、書名が記入された CSV ファイルをアップロードします。
      • ファイルの内容をチェックし、エラーがある場合にはエラーメッセージを表示します。エラーがない場合には CSV ファイルの内容を表示します。
      • 内容を確認して問題なければ「登録」ボタンをクリックします。この時に貸出申請 ID を発行します。
    • 貸出状況取得タスク
      • RabbitMQのキューを監視し、貸出希望書籍 CSV ファイルアップロード画面から貸出状況取得依頼のメッセージが送信されているかチェックします。
      • データが登録されている場合にはカーリルの蔵書検索 WebAPI を呼び出して貸出状況を取得します。
      • 処理が完了したらデータを登録したユーザへメールを送信します。
    • 貸出申請画面
      • CSV ファイルでアップロードされた書籍と貸出状況の一覧を表示します。
      • 書籍毎に貸出希望のチェックボックスと理由記入の入力フィールドを表示します。
      • 借りたい書籍をチェックして理由を記入した後、「申請」ボタンをクリックします。
      • 最後に表示した貸出申請の ID を Cookie に保存しておき、URL を指定せずにログインした場合には前回表示していた貸出申請画面が表示されるようにします。
      • 「一時保存」ボタンを用意し、クリックされたら現在入力中のチェック、理由をセッションに保存し、同じ貸出申請 ID の画面が表示された場合には保存しておいたチェック、理由が再現されるようにします。
      • 承認者にメールを送信します。
    • 貸出承認画面 ( 承認者のみ )
      • 貸出申請されたユーザ名、書籍と理由の一覧を表示します。
      • 承認する場合には「承認」ボタンを、却下する場合には「却下」ボタンをクリックします。
      • 却下理由記入の入力フィールドを表示し、却下する場合には必須入力とします。
      • 承認あるいは却下されたら申請したユーザへメールを送信します。
    • 貸出申請結果確認画面
      • 書籍一覧、承認結果を表示します。
      • 申請結果は CSV ファイルでダウンロードできるようにします。
  • Project 名は ksbysample-webapp-lending とします。
  • 構成要素は、
    • Spring Boot、Spring Framework
    • Thymeleaf
    • Doma 2
    • Velocity
      • メールのテンプレートに使用します。今回のメールはテキストメールとし、HTML メールにはしません。
    • Spring Session
    • Spring AMQP ( RabbitMQ )
  • DB は前回に引き続き PostgreSQL 9.4.1 を使用します。
  • 実行環境は開発用 ( develop )、ユニットテスト用 ( unittest )、本番用 ( product ) の3種類を想定し、spring.profiles.active に指定された文字列で切り替えられるようにします。
  • 画面は Bootstrap+AdminLTE を使用して作成します。
  • 以下の順序で進める予定です。今回は画面は最初ではなく必要に応じて作成します。
    • Redis ( Windows 版 ) のインストール
    • RabbitMQ ( Windows 版 ) のインストール
    • Project の作成
    • DB、テーブルの作成
      • 想定できる仕様で作成しておいて、後から必要に応じて調整します。
    • URL の決定
    • ログイン画面・ログアウト機能の作成
    • 画面の共通部分の作成 ( 画面の構成は AdminLTE の Top Navigation のレイアウトにし、画面上部にメニューを表示します )
    • 図書館一覧取得 WebAPI の作成
    • 検索対象図書館登録画面 ( 管理者のみ ) の作成
    • 貸出希望書籍 CSV ファイルアップロード画面の作成
    • 貸出状況取得タスクの作成
    • 貸出申請画面の作成
    • 貸出承認画面 ( 承認者のみ ) の作成
    • 貸出申請結果確認画面の作成

履歴

2015/06/28
初版発行。
2015/10/03
* 貸出状況取得タスクの動作を「5秒毎に実行し、」→「RabbitMQのキューを監視し、」へ、また「貸出希望書籍 CSV ファイルアップロード画面からデータが登録されているか」→「貸出希望書籍 CSV ファイルアップロード画面から貸出状況取得依頼のメッセージが送信されているか」へ変更しました。