Closed Kassy0220 closed 1 month ago
notified_on_the_day
通知を送った時間を入れるカラムにしてもいいのかなーと思いました。単なるbooleanでもいいのですが、いつ送ったのかがわかるほうが情報量が多くなるしなぁ、と。最終的にどうするかはお任せします。
time : 出席時間帯または欠席が保存されます。
確かにカラム名悩ましいですね。出席or欠席を別カラムでbooleanとして持って、出席のときの時間帯を別カラムにすればもう少し命名は考えやすそうな気がしますが、冗長ですかねー。
Hibernation
パソコンの休止モードで使われる単語のイメージありますね。hiatus
は個人的に馴染みがなかったです。というただの感想です。
@maedana さん、コメントありがとうございます!
通知を送った時間を入れるカラムにしてもいいのかなーと思いました。単なるbooleanでもいいのですが、いつ送ったのかがわかるほうが情報量が多くなるしなぁ、と。
なるほど、送った時刻を保存すると情報量が多くなりますね👀
Booleanではなく通知を送った時間を保存するようにし、カラム名をnotified_at
に変更しました。
確かにカラム名悩ましいですね。出席or欠席を別カラムでbooleanとして持って、出席のときの時間帯を別カラムにすればもう少し命名は考えやすそうな気がしますが、冗長ですかねー。
アドバイスを受けて、「出席時間帯」と「欠席」という異なる括りの情報を一つのカラムに保存しようとしていることに違和感を覚えました。 そこで、「出欠」と「出席時間帯」を分けて保存するように変更しました。
status
カラムを追加し、このカラムに出席/欠席を保存するtime
カラムは、昼の部/夜の部のいずれかを保存するこれに伴い、ペーパープロトタイプの出席登録/編集ページも変更しました。 ペーパープロトタイプの出席登録の箇所
出欠に応じて異なる入力フォームを表示するようにしたことで、利用しやすくなったように思います。
パソコンの休止モードで使われる単語のイメージありますね。hiatusは個人的に馴染みがなかったです。
パソコンの休止モードをHibernationというの知らなかったです、勉強になりました🙏 ハイバネーション(休止状態)とは?スリープとの違いや無効化のメリット・デメリットを解説 | @niftyIT小ネタ帳
Hibernation
の方が伝わりやすいと判断し、テーブル名をHibernations
に変更しました。
以下変更箇所のまとめになります。
Minutes
テーブル
notified_on_the_day
→ notified_at
に変更Attendances
テーブル
status
カラムの追加Hiatuses
テーブル
Hibernations
に変更 DBの修正案をmaedanaさんにご確認いただいたので、DB設計はOKとし、このIssueをクローズします。
10/28追記
exported
カラムをMinutes
テーブルに追加しました。
5 に基づき、このIssueではDB設計を行います。
ER図
各テーブル説明
リソース型
Admins(管理者)
管理者のテーブルです。駒形さんと町田さんのみ
Admin
モデルでログインすることになります。remember_created_at
: DeviseのRememberableモジュールに付随して追加されるカラムです。Rememberableモジュール内で利用されているようです。provider
,uid
: GitHub認証で必要となるカラムです。Members(チーム開発メンバー)
チーム開発メンバーのテーブルです。サービスを利用するユーザーは
Member
モデルでログインすることになります。remember_created_at
: DeviseのRememberableモジュールに付随して追加されるカラムです。provider
,uid
: GitHub認証で必要となるカラムです。Courses(コース)
コースを表すテーブルです。現時点(2024/09/13)では「Railsエンジニアコース」または「フロントエンドエンジニアコース」の二種類しか存在しません。
meeting_week
: ミーティングが開催される週(奇数週開催/偶数週開催)が保存されます。enum :meeting_week, %i(odd even), suffix: true
といった形で実装しようと考えています。Minutes(議事録)
議事録を表すテーブルです。
other
: 議事録の「その他」の項目が保存されます。meeting_date
: 議事録のミーティング開催日が保存されます。next_meeting_date
: 次回開催されるミーティングの開催日が保存されます。notified_at
: ミーティング開催日のDiscord通知を送った日時が保存されます。exported
: 議事録がエクスポートされたか否かが保存されます。(デフォルトでfalse)Topics(話題にしたいこと・心配事)
議事録の「話題にしたいこと・心配事」を表すテーブルです。
topicable_id
,topicable_type
: ポリモーフィック関連付けを表すカラムです。Admin
とMember
がTopic
を作成することができます。イベント型
Attendances(出席)
ミーティングに出席することを表すテーブルです。
status
: 出席の状態が保存されますenum :status, [:present, :absent]
(出席or欠席)で実装しようと考えています。time
: 出席時間帯が保存されます。enum :time, [:day, :night]
(昼の部or夜の部)の形で実装しようと考えています。absence_reason
: 欠席理由が保存されます。progress_report
: 欠席者の今週の作業の進捗報告が保存されます。Hibernations(休止)
チーム開発メンバーが休止していることを表すテーブルです。 以下の理由からメンバーの休止状態を保存する必要があり、このテーブルを作成しました。
休止
とするためメンバーが休止状態となるのは以下のケースを想定しています。
初回提出時のER図とテーブル説明
```mermaid erDiagram Courses ||--o{ Members: "course_id" Courses ||--o{ Minutes: "course_id" Minutes ||--o{ Topics: "minute_id" Minutes ||--o{ Attendances: "minute_id" Members ||--o{ Attendances: "member_id" Members ||--o{ Hiatuses: "member_id" Admins { integer id PK string email "null: false" string password "null: false" datetime remember_created_at string provider "null: false" string uid "null: false" string name string avatar_url datetime created_at datetime updated_at } Courses { integer id PK string name integer meeting_week datetime created_at datetime updated_at } Members { integer id PK string email "null: false" string password "null: false" datetime remember_created_at string provider "null: false" string uid "null: false" string name string avatar_url integer course_id FK "null: false" datetime created_at datetime updated_at } Minutes { integer id PK string release_branch string release_note text other date meeting_date date next_meeting_date boolean nitified_on_the_day "default: false" integer course_id FK "null: false" datetime created_at datetime updated_at } Topics { integer id PK string content "null: false" integer minute_id FK "null: false" integer topicable_id "null: false" string topicable_type "null: false" datetime created_at datetime updated_at } Attendances { integer id PK integer time string absence_reason string progress_report integer minute_id FK "null: false" integer member_id FK "null: false" datetime created_at datetime updated_at } Hiatuses { integer id PK date finished_at integer member_id FK "null: false" datetime created_at datetime updated_at } ``` ## 各テーブル説明 ### リソース型 #### Admins(管理者) 管理者のテーブルです。駒形さんと町田さんのみ`Admin`モデルでログインすることになります。 - `remember_created_at` : DeviseのRememberableモジュールに付随して追加されるカラムです。[Rememberableモジュール内で利用されている](https://github.com/heartcombo/devise/blob/72884642f5700439cc96ac560ee19a44af5a2d45/lib/devise/models/rememberable.rb#L103)ようです。 - `provider`, `uid` : GitHub認証で必要となるカラムです。 #### Members(チーム開発メンバー) チーム開発メンバーのテーブルです。サービスを利用するユーザーは`Member`モデルでログインすることになります。 - `remember_created_at` : DeviseのRememberableモジュールに付随して追加されるカラムです。 - `provider`, `uid` : GitHub認証で必要となるカラムです。 #### Courses(コース) コースを表すテーブルです。現時点(2024/09/13)では「Railsエンジニアコース」または「フロントエンドエンジニアコース」の二種類しか存在しません。 - `meeting_week` : ミーティングが開催される週(**奇数週開催**/**偶数週開催**)が保存されます。 - `enum :meeting_week, %i(odd even), suffix: true`といった形で実装しようと考えています。 #### Minutes(議事録) 議事録を表すテーブルです。 - `other` : 議事録の「その他」の項目が保存されます。 - `meeting_date` : 議事録のミーティング開催日が保存されます。 - `next_meeting_date` : 次回開催されるミーティングの開催日が保存されます。 - `notified_on_the_day` : ミーティング開催日のDiscord通知を送ったかどうかを判別するためのカラムです。 - ミーティング開催日のDiscord通知は、Rakeタスク + Heroku Scheduler で定期実行されます - 定期実行は**毎日・1時間ごとに**実行されます。毎時間Discord通知が送られてしまうことを防ぐため、通知を送ったか否かを保存し、`false`の時に通知を送るためにこのカラムを導入しています。 - [プロトタイプアプリでの実装箇所](https://github.com/Kassy0220/third-prototype-fjord-minutes/blob/db211ff6333c21dee2218d37cde03e4dd7602a9e/app/models/meeting_secretary.rb#L108)(`sent_invitation`という属性名になっていますが、`notified_on_the_day`に読み替えてください🙏) #### Topics(話題にしたいこと・心配事) 議事録の「話題にしたいこと・心配事」を表すテーブルです。 - `topicable_id`, `topicable_type` : ポリモーフィック関連付けを表すカラムです。 - `Admin`と`Member`が`Topic`を作成することができます。 ### イベント型 #### Attendances(出席) ミーティングに出席することを表すテーブルです。 - `time` : 出席時間帯または欠席が保存されます。 - `enum :time, [:day, :night, :absence]`(昼の部/夜の部/欠席)の形で実装しようと考えています。 - カラム名を`time`にしていますが、しっくりきていません。`status`という語も検討しましたが、曖昧かなと思い選択しませんでした。 - `absence_reason` : 欠席理由が保存されます。 - `progress_report` : 欠席者の今週の作業の進捗報告が保存されます。 #### Hiatuses(休止) チーム開発メンバーが休止していることを表すテーブルです。 以下の理由からメンバーの休止状態を保存する必要があり、このテーブルを作成しました。 - 議事録には「出席者」と「欠席者(お休み)」を表示するが、休止中のメンバーは表示しないようにするため - メンバーの出席表示で、休止していた期間中は表示を`休止`とするため メンバーが休止状態となるのは以下のケースを想定しています。 - メンバーがFBCを休会した場合 - メンバーがチーム開発プラクティスを修了した場合 テーブル名には活動を中止するという意味を持つ`hiatus`という単語を選びました。(https://eow.alc.co.jp/search?q=hiatus) ただ、bootcampアプリでは`Hibernation`という言葉が使われており、テーブル名をそちらに合わせた方が良いのか迷っています。 https://github.com/fjordllc/bootcamp/blob/ad910a04927f6cc83aef85d732e919228c16f334/db/schema.rb#L351