第2回
ToDo管理Webアプリケーション†
要件定義†
ある組織では,週例ミーティングで各自が1週間の活動についてToDo/Doneに基づく進捗報告を行っている.
しかしながら,現状では自然言語で記述されており,管理が人それぞれバラバラであるため全体の見渡しも悪い.
この現状を,Webアプリケーションを用いたシステム化で改善したい.
- 要求
- 各自が自分のToDoを登録・管理.メンバーで共有できるようにする
- 管理者はメンバー(id,名前)をシステムに登録する
- 各ユーザは自分のToDoを新規登録,更新,完了(done)する
- ユーザは他人のToDoを閲覧(R)できるが,作成(C)・更新(U)・完了(D or U?)できるのは,そのユーザのみ
- システムは個人,あるいは全ユーザについて,ToDoと直近1週間のDoneを一覧する
- フィルタ:自分だけ,全員
- ソート:更新日時,ユーザ名
- 基本機能
- ユーザのCRUD
- ToDoのCRUD
- ユーザ管理画面(管理者用)
- ToDo一覧・管理画面(ユーザごと.UIDをURLのパスパラメータで渡して生成)
- エンティティ
- ユーザ: UID, 名前
- ToDo: TID, title, description, createdAt, updatedAt, doneAt,UID
- 発展機能
- ログイン
- 締め切り管理・アラート
- レポート・各種メトリクスの計算
- 平均ToDo処理時間,週当たりのToDo個数,...
- モチベーション維持の仕組み(いいね!など)
【実装・第1弾】名前を登録するアプリを作ってみよう†
- spring initializrで下記4つをDependenciesで選択.Artifactはtodo
- Spring Boot DevTools
- Lombok
- Thymleaf
- Spring Data JPA
- build.gradleへの追加
- implementation 'org.springframework.boot:spring-boot-starter-validation'
- runtimeOnly 'mysql:mysql-connector-java'
- war (前回参照)
⓪データモデリングをしよう†
- 扱うデータの属性を決める
- UID: [A-z0-9_-]+ かぶらないこと
- Name: 任意の文字列
①ビューを作ろう†
- inputform.html
- success.html
- error.html
- userinfo.html
- userlist.html
②レポジトリを作ろう†
③サービスを作ろう†
④コントローラを作ろう†
- UserController.java
- ビューとロジックの橋渡し
- ServiceからのDTOをテンプレートに渡す
- 動的ページの生成
- バリデーション
⑤登録したユーザをリストしてみよう(thymeleaf)†
各種オブジェクト†
動作テスト†
【実装・第2弾】ユーザに紐づくアプリを作ってみよう「ToDoリストアプリ」†
⓪ ToDoエンティティのモデリング†
- ToDo: TID, title, description, isOpen, createdAt, updatedAt, doneAt,UID
①ビュー†
②~④†
③サービス†
- ToDoService.java(ToDoに関する操作)
- createTodo(uid, form)
- updateToDo(uid, tid, form)
- deleteToDo(uid, tid, form)
- done(uid, tid)
- undone(uid, tid)