スバラシ開発メモ
2025/2/17 ユーザからみた機能の整理
ユーザ認証
アカウント作成・ログイン・削除
学生認証
アカウントの作成やログイン、学生認証にはメール認証を使う。 時間割
時間割の作成・編集:シラバスの科目を選択して時間割に追加することができる。
関連する概念:開設年度学期、曜日時限、授業実施日
シラバス
関連する概念:履修区分、開設年度学期、曜日時限、学年、授業担当教員
課外活動支援
グループ:イベントや投稿を作成する単位
グループの作成・編集:学生認証を受けているユーザがグループを作成することができる。
グループの検索:グループ名で検索
グループへの参加:学生認証を受けているユーザがグループに参加することができる。グループの参加には、すでにグループに参加している者から受け取った招待コードを入力する必要がある。
グループの退出
公認課外活動団体認証
グループをブックマークに追加・削除
イベント
イベントの作成・編集・削除
イベントの検索・一覧表示:イベント名で検索、タグで検索、場所で検索、主催者で一覧表示、日付範囲で一覧表示
イベントをブックマークに追加・削除
投稿
投稿の作成・編集・削除
投稿の検索:主催者で一覧表示、日付範囲で一覧表示
地図
地図の表示
場所の検索・表示
空き教室の一覧表示:開設年度学期、曜日時限、授業実施日、各科目の教室の情報を基に空き教室の一覧を表示する。
2025/2/17 システムにする時のことも考えながらモデルを構築する。
3種類のオブジェクト
ビジネスロジックを備えたエンティティ
ビジネスロジックを備えるコレクション
エンティティの出し入れはコレクション経由で行う。
コレクションにもビジネスロジックを備える。
裏方(よくServiceと言われるもの)
エンティティオブジェクトのメソッドを呼び出す場合
code:mermaid
sequenceDiagram
User Agent ->> Control : リクエスト
activate Control
box transparent Model
participant 裏方
end
Control ->> Repository : エンティティオブジェクトの<br/>取得要求
activate Repository
create participant Entity
Repository -->> Entity : オブジェクトの取得
Repository ->> Control : 取得したオブジェクトを返す
deactivate Repository
Control ->> Entity : メソッドを呼び出す
activate Entity
Entity ->> 裏方 : 裏方のメソッドを呼び出す
Entity ->> Control : 新しいエンティティオブジェクト
deactivate Entity
Control ->> Repository : エンティティオブジェクトの<br/>保存要求
Control ->> User Agent : レスポンス
deactivate Control
コレクションのメソッドを呼び出す場合
code:mermaid
sequenceDiagram
User Agent ->> Control : リクエスト
activate Control
box transparent Model
participant Collection
participant 裏方
end
Control ->> Collection : メソッドを呼び出す
Collection ->> 裏方 : 裏方のメソッドを呼び出す
Collection ->> Repository : エンティティオブジェクトの出し入れ
Control ->> User Agent : レスポンス
deactivate Control
User関係
✅UserAccount、UserAccountUpdateRequest
ユーザアカウントを表現するオブジェクト。
ユーザの管理にはEメールアドレスを用いる。
Eメールアドレスを変更する際は、メール認証が必要。
code:mermaid
stateDiagram
direction LR
* --> UserAccount : UserAccount作成 UserAccount --> UserAccountUpdateRequest : Eメールアドレス変更要求
UserAccountUpdateRequest --> UserAccount : Eメール認証完了
✅UserAuthenticationToken、UserAuthenticationTokenCreationRequest
ログインユーザに持たせるトークンを表現するオブジェクト。
code:mermaid
stateDiagram
direction LR
* --> UserAuthenticationTokenCreationRequest : ログイン画面にEメールアドレス入力 UserAuthenticationTokenCreationRequest --> UserAuthenticationToken : Eメール認証完了
✅UserAccountDirectory:UserAccount、UserAccountUpdateRequestの追加、取得、削除
✅UserAuthenticationTokenDirectory:UserAuthenticationToken、UserAuthenticationTokenCreationRequestの追加、取得、削除
✅CertifiedUserProfileDirectory:CertifiedUserProfileの追加、取得、削除
Group関係
✅Group
グループを表現するオブジェクト。
✅Member
グループに所属するメンバーを表現するオブジェクト。
✅Badge
グループに付けられるバッジ(「公認課外活動団体」など)を表現するオブジェクト。
✅GroupDirectory:Groupの追加、取得、削除
✅GroupMemberDirectory:各Groupが持つMemberの追加、取得、削除
✅GroupBadgeDirectory:各Groupが持つBadgeの追加、取得、削除
✅GroupItemDirectory:各Groupが持つItemの追加、取得、削除
✅Item
Subject
Period
ClassHour
Course
Teacher
GroupProfile
Event
Post
Place
ItemDirectory
✅Bookmark関係
UserBookmarkDirectory:各UserがブックマークしているItemの追加、削除
管理用エンドポイント
裏方
Email関係
Email:Eメールを表現するオブジェクト。
EmailQueue
Emailを受け取って送信する。
短時間に大量の送信をするわけにはいかないので、送信量制御を行う。
アクセス制御関係
AccessControlService:ある操作に必要な条件を、操作を行おうとしているユーザが満たしているかどうかを確認する。
機能要件
メッセージの追加、削除
メッセージごとの実行予定時刻の算出
メッセージに実行される処理を表す関数を紐付け直すAPI
非機能要件
メッセージを保存するコレクションは差し替え可能
システム再起動時の自動復帰
メッセージと、実行される処理を表す関数とを紐付け直させて、未実行の処理は順次実行させる。