# 就活・転職における企業情報の共有:フロー - [HackMD: 就活・転職における企業情報の共有](https://hackmd.io/kAtU11I2R0eCzjU2HWDjwg) ## 登場人物 - 運営 - オペレータ - 学生:聞き手 - 社会人:話し手 ## フロー 1. ホームページに来る 2. ユーザ登録 2-1. ユーザ情報を登録画面で入力 2-2. ユーザ情報を送信 3. ユーザ認証 3-1. 登録後,新規登録者の情報をオペレータに通知 3-2. オペレータが新規登録者の情報を確認 - 学生:入力内容,学生証,本人確認書類を確認 - 社会人:本人確認加え,(Eight や各種 SNS などの 3rd パーティ製ツール等で)企業の所属を確認 3-3. 確認できたら認可 3-4. ユーザへ認可されたことを通知 4. 認証ユーザとなる(特に社会人側には重要) 5. アプリの機能を使用する - 学生 - 企業名等で話を聞きたい人を検索 - 話を聞きたい人を選ぶ -> 確定 - 社会人に通知される - 社会人 - 自分の所属,話せる内容,料金設定などをプロフィールに書いておく - 通知が来る - 通話する日程を決める(当事者同士でメッセージ?) - 通話する(料金先払い,後払い?) - 通話後,料金の支払い,学生が社会人の評価などをして終了 - マージンをもらう ## DB 設計 - users ユーザ - id: int - name: str 名前 (*) - date_of_birth: datetime 生年月日 (*) - tel_number: str 電話番号 (*) - email: str メールアドレス (*) - passowrd: str パスワードハッシュ(*) - certificate_id: str - 切り出す意味ある? - 外部キー:certificates - user_type: str タイプ(student か company を参照) - affiliation 所属 (*) - 外部キー:companies, universities - job 仕事内容(*) - 外部キー:jobs - department 部署 - position 役職 - is_authenticated 認証フラグ(本人確認書類で認可されたか) - 制約 - notifications は正. - students/worker に分割して,users というビューを作る - type_card: str 学生なら学生証,会社員なら名刺 S3 の URL - identity_card: str 保険証,免許証 - created_at - updated_at - universities - id: int - name: str 大学名 - companies - id: int - name: str 会社名 - [MVP ではない] 職種:jobs - [MVP ではない] 部署:departments を参照する - [MVP ではない] departments - jobs - id: int - name: str (選択肢を固定しておく:エンジニア,総合職,研究職) - matching - id: int - speaker - 外部キー users の ID - listener: - 外部キー users の ID - date: datetime - meeting_length: int ミーティングの長さ - audio_url: str S3 のリンク - is_matched: bool マッチの拒否 / 認証 - is_done_meeting: bool - is_done_payment: bool - 制約 - speaker は必ず users.type=company - linstener は必ず users.type=student - マッチングレコードが新規で作られたとき,同期的にメール配信 - SendGrid https://sendgrid.kke.co.jp/plan/ <!-- Amazon Chime がどうかによる.メッセージとか全部押しつけられるなら押しつけたい. Amazon Chime がユーザ同士のメッセージをどうやってやりとりするか(Meeting ID に紐づいて勝手にメッセージを管理してくれる,とか) DB - messages(ユーザ同士の DM) - speaker - listener - 送信者フラグ - text - matching_id(matching テーブルを参照) API - messages/ - パフォーマンスが要求される Amazon Chime に一任させた方が考えず済む - GET: マッチングに紐づく DM 一覧取得 - POST: DM の送信 - 話したい人を確定させたとき,どんな内容を話したいか?を学生が DM で送信するようにする - あくまでも匿名性と日程調整という用途を重視.DM に期限切れを作って定期的に消去 --> ## API 設計 パスプリフィックス `/api` - /users - /matching - /meeting - (実装詰めてない)/payment Stripe で実装 - (実装詰めてない)/messages - Amazon Chime が使えれば必要ない - /mail ### /users - POST: `/users?` レスポンス - GET: 検索画面 - POST: 登録時 - 認証・認可含める? - 学生が投げる検索クエリはここ ## /matching - GET: マッチング(既に会話が終わった音声へのリンクを含め)を一覧取得 - POST: 申し込みを確定したときに新しく matching レコードを作成 - meeting/ - POST: 日程,speaker/listerner 情報を POST して URL を発行する - Amazon Chime - 決済/ - すり合わせ ## フロントエンドとバックエンドのやりとり ## issue の切り分け - flask, ORM でデータベース操作できるようにする - SQLAlchemy - 各エンドポイントの実装 - /users - GET - POST - - /matching - /meeting