そうだいさんの会員登録のデータベース設計の記事、 https://agilejourney.uzabase.com/entry/2022/07/28/103000 を読んで、Goでモデリングしてみる
- 会員登録・ログイン
- メールアドレス/パスワードによるログイン
- SSOを用いたLINEログインによる新規アカウント作成
- メールアドレスはGitHubのように複数もつかもしれない
- メールにpinコードを送って、Web画面で認証するといったワンタイムトークンのような使い方もある
- 課金
- クレジットカード支払い
- 複数のクレジットカードを登録
- 毎回ユーザーに選択されるのは厳しいのでデフォルトのカード設定が可能
- LINE Pay / PayPay 支払い
- 将来的に、コンビニ支払い、QRコード支払い、仮想通貨支払い
- ユーザー管理
- 会員、ゲスト、管理者、提携企業の種別がある
- 会員
- 通常会員
- 一時会員
- プレミアム会員
- ゲスト
- 会員ステータス
- 退会、休会、未払い、仮会員
- 未払いステータスの場合は、プレミアムも通常会員としてみなしたい
検討していて感じた必要そうな要件
- 管理者、クライアントは通常フローで登録してもらった後に、ユーザー名(ID)をもとに運営側でInviteしてもらう
- Emailはメール送信URL認証が通るまで仮状態にする
- すでに登録済みかどうか判定が必要
- DB設計と、Goのモデルは不一致
- ユースケースごとにSQLをジョインして呼び出される
- それに応じたGoのStructも異なる
- Logic in SQLを相当頑張れば別かもですが、通常そこまで入れ込まない、はず
- https://bliki-ja.github.io/DomainLogicAndSQL/
- ユースケースを洗い出すほうが大事だが、もはや業務感が出てくる...
作業終了