---
# System prepended metadata

title: 就活・転職における企業情報の共有：フロー

---

# 就活・転職における企業情報の共有：フロー

- [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