# 開発演習 スケジュール共有システムを作りましょう。 ## 背景(fiction) リモートワークが増えて、社外の方とのオンラインミーティングも一般的になってきました。 社員が予定を効率よく管理できるようにしたいと思っています。 ## アプリ要件 ### 初回案 - 社員(ユーザー) - ユーザ登録機能 - 以下の情報は必須で登録できるようにする - ID(社員番号):自動採番でOK - ユーザ名 - パスワード - ログイン機能 - ログアウト機能 - スケジュールを登録機能 - 以下の情報は必須で登録できるようにする  - タイトル  - 場所 or ビデオ会議のURL  - 参加者  - 詳細  - スケジュールを確認機能  - 日毎の予定の一覧を確認できる画面を作成 ### 機能追加 - [追加]管理者(ユーザー)用機能 - グループ管理機能 - 登録 - 登録できる項目 - グループ名 - 編集 - 編集できる項目 - グループ名 - 削除 - グループへのユーザ登録機能 - ユーザをグループに割り当てる(1人のユーザは1グループにしか所属しない) - 社員(ユーザー) - ユーザ管理機能 - 登録機能は必須 - 以下の情報は必須で登録できるようにする - ID(社員番号):自動採番でOK - ユーザ名 - パスワード - [追加]編集機能 - 編集できる項目 - ユーザ名 - [追加]削除機能 - 名前 - パスワード - ログイン機能 - ログアウト機能 - スケジュールを登録できる - タイトル - 場所 or ビデオ会議のURL - 参加者 - 詳細 - スケジュールを確認機能 - 日毎のスケジュールを確認できる機能 - 日付ごとの予定の一覧を確認できる画面を作成 - [追加]週毎のスケジュール、月ごとのスケジュールを確認できる機能 - [追加]自分と同じグループのユーザのスケジュールを確認する機能 - [追加]スケジュール共有機能 - [追加]未ログインユーザにスケジュールを確認してもらえる - [追加]予定のタイトルは見えずに `予定あり` ということだけがわかる(場所などの情報も非公開) ### 機能追加2 - 管理者(ユーザー)用機能 - グループ管理機能 - 登録 - 登録できる項目 - グループ名 - 編集 - 編集できる項目 - グループ名 - 削除 - グループへのユーザ登録機能 - ユーザをグループに割り当てる(1人のユーザは1グループにしか所属しない) - 社員(ユーザー) - ユーザ管理機能 - 登録機能は必須 - 以下の情報は必須で登録できるようにする - ID(社員番号):自動採番でOK - ユーザ名 - パスワード - 編集機能 - 編集できる項目 - ユーザ名 - 削除機能 - 名前 - パスワード - [追加]パスワードを暗号化してDBに登録 - 参考:[bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt) - ログイン機能 - ログアウト機能 - スケジュールを登録できる - タイトル - 場所 or ビデオ会議のURL - 参加者 - 詳細 - [追加]スケジュール登録をした際に、登録完了メールを送信する - スケジュールを確認機能 - 日毎のスケジュールを確認できる機能 - 日付ごとの予定の一覧を確認できる画面を作成 - [追加]画面遷移をせずに、同じ画面の中で、日付を変更することで、別の日の予定を確認することができるようにする(APIの作成&利用) [イメージ](https://i.gyazo.com/11845c14d8c0e0c9ba058b5cf9ee78a1.mp4) - 週毎のスケジュール、月ごとのスケジュールを確認できる機能 - [追加]場所が登録されている時に、その予定に、GoogleMapを開くためのボタンを表示する - [追加]ビデオ会議のURLが登録されている時に、その予定に、ビデオ通話を開くためのボタンを表示する - 自分と同じグループのユーザのスケジュールを確認する機能 - [追加]自分と同じグループのユーザへのスケジュールの登録依頼機能 - [追加]自分と同じグループのユーザからのスケジュール登録承認機能 - スケジュール共有機能 - 未ログインユーザにスケジュールを確認してもらえる - 予定のタイトルは見えずに `予定あり` ということだけがわかる(場所などの情報も非公開) - [追加]共有したURLから1度だけ、ユーザのスケジュールを登録することができる ### 最終版 - 管理者(ユーザー)用機能 - グループ管理機能 - 登録 - 登録できる項目 - グループ名 - 編集 - 編集できる項目 - グループ名 - 削除 - グループへのユーザ登録機能 - ユーザをグループに割り当てる(1人のユーザは1グループにしか所属しない) - 社員(ユーザー) - ユーザ管理機能 - 登録機能は必須 - 以下の情報は必須で登録できるようにする - ID(社員番号):自動採番でOK - ユーザ名 - パスワード - 編集機能 - 編集できる項目 - ユーザ名 - 削除機能 - 名前 - パスワード - [追加]パスワードを暗号化してDBに登録 - 参考:[bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt) - ログイン機能 - ログアウト機能 - スケジュールを登録できる - タイトル - 場所 or ビデオ会議のURL - 参加者 - 詳細 - [追加]スケジュール登録をした際に、登録完了メールを送信する - スケジュールを確認機能 - 日毎のスケジュールを確認できる機能 - 日付ごとの予定の一覧を確認できる画面を作成 - [追加2]画面遷移をせずに、同じ画面の中で、日付を変更することで、別の日の予定を確認することができるようにする(APIの作成&利用) [イメージ](https://i.gyazo.com/11845c14d8c0e0c9ba058b5cf9ee78a1.mp4) - [追加1]週毎のスケジュール、月ごとのスケジュールを確認できる機能 - [追加2]場所が登録されている時に、その予定に、GoogleMapを開くためのボタンを表示する - [追加2]ビデオ会議のURLが登録されている時に、その予定に、ビデオ通話を開くためのボタンを表示する - [追加1]自分と同じグループのユーザのスケジュールを確認する機能 - [追加2]自分と同じグループのユーザへのスケジュールの登録依頼機能 - [追加2]自分と同じグループのユーザからのスケジュール登録承認機能 - [追加1]スケジュール共有機能 - [追加1]未ログインユーザにスケジュールを確認してもらえる - [追加1]予定のタイトルは見えずに `予定あり` ということだけがわかる(場所などの情報も非公開) - [追加2]共有したURLから1度だけ、ユーザのスケジュールを登録することができる