Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

仕様策定 #1

Closed
LaFr4nc3 opened this issue May 22, 2019 · 1 comment
Closed

仕様策定 #1

LaFr4nc3 opened this issue May 22, 2019 · 1 comment
Assignees
Labels
Category: General koibito2019全体に関係 Status: Proposal 提案 Type: Spec 仕様策定

Comments

@LaFr4nc3
Copy link
Contributor

LaFr4nc3 commented May 22, 2019

恋人探しアンケートは次の3つのアプリケーションによって構成する.

  • Frontend
  • Backend
  • Matching

Backend - Matching間のやりとりはファイルまたはDBを用いて行う.
どちらを使用するかは,開発難度の低いほうを使う.

+----------+     Enquete Result     +---------+  Enquete Result                Enquete Result   +----------+
|          | ---------------------> |         | ---------------->             ----------------> |          |
| Frontend |                        | Backend |                   [ File/DB ]                   | Matching |
|          | <--------------------- |         | <----------------             <---------------- |          |
+----------+  View/Matching Result  +---------+  Matching Result               Matching Result  +----------+

Frontendの仕様

ページ構成

/ トップ画面

タイトル,説明,注意事項を表示する.
締め切り時間前はアンケート画面に,
締め切り時間後はマッチング結果画面に遷移するボタンを設置する.

注意事項の内容は,
ユーザーの識別にCookieを使用していること,
そのためCookieを削除,無効化などされると正常に動作しないこと
を含める.

/enquete アンケート画面

アンケートを表示する.
アンケートの内容は,

  • 自分の名前
  • 自分の性別(選択肢: 不明,男性,女性)
  • 自分の年齢
  • 相手の性別(選択肢: 不明,男性,女性)
  • 相手の年齢の許容範囲(最小値と最大値を訊く)
  • 質問(複数個)
    とする.

文言は堅苦しくならないようにする.

/enquete/finish 回答完了画面

アンケートの送信が完了した旨を表示する.
また,結果発表の時刻を表示する.

/result マッチング結果画面

マッチング結果を表示する.

技術要件

フレームワークはVue.jsを使用する.
セッション管理にはCookieを使用する.

Backendの仕様

モデル仕様

User

プロパティ名 種類 説明
id string ID UUIDv4を使用 セッションIDとしても利用
name string 名前 ニックネーム可
gender number 性別 0:不明,1:男,2:女
age number 年齢
partnerId string or null 相手のID マッチングするまではnull マッチング相手がいなかったら""
partnerGender number 相手の性別 genderと同じ表現で
partnerMinAge number 相手の年齢の許容範囲の最低値
partnerMaxAge number 相手の年齢の許容範囲の最高値
answers number[] アンケートの回答 5段階評価で そうは思わない:1 ~ そう思う:5

Example:

{
  "id": "1b740d58-fbbc-4815-b12a-c5c9c7b17bb5",
  "name": "ほげ ふが太郎",
  "gender": 1,
  "age": 18,
  "partnerId": "",
  "partnerGender": 2,
  "partnerMinAge": 16,
  "partnerMaxAge": 24,
  "answers": [1, 3, 2, 5, 4, 2, 1, 5, 3, 5, 2]
}

URL仕様

/配下はFrontendのページを返すようにする.
ただし,/api配下はBackendで処理する.

API仕様

POST /api/enquete

アンケートの送信先.
受け付けるリクエストボディはjsonでUserモデルからidプロパティを抜いたもの.
受け取ったアンケート結果のバリデーションが通れば,ファイルまたはDBに保存する.

Example:
Request

POST /api/enquete HTTP/1.1
Content-Type: application/json

{
  "name": "ほげ ふが太郎",
  "gender": 1,
  "age": 18,
  "partnerGender": 2,
  "partnerMinAge": 16,
  "partnerMaxAge": 24,
  "answers": [1, 3, 2, 5, 4, 2, 1, 5, 3, 5, 2]
}

Response
成功時

HTTP/1.1 201 Created

リクエストがおかしい時(リクエストボディが無い,要素が欠けているなど)

HTTP/1.1 400 Bad Request

サーバー側でエラーが発生した時

HTTP/1.1 500 Internal Server Error

GET /api/result

マッチング結果を返す.
締め切り時間前のアクセスには403を返す.
返すのは,マッチング相手の名前.
いない場合は,404を返す.

Example:
Request

GET /api/result HTTP/1.1
Accept: application/json

Response
成功時

HTTP/1.1 200 OK
Content-Type: application/json

{
  "partnerName": "ほげ ふが子"
}

マッチング相手がいない時

HTTP/1.1 404 Not Found
Content-Type: application/json

締め切り時間前にアクセスされた時

HTTP/1.1 403 Forbidden

サーバー側でエラーが発生した時

HTTP/1.1 500 Internal Server Error

技術要件

フレームワークはExpress.jsを使用する.
セッション管理にはexpress-sessionを使用する.

Matchingの仕様

Matching処理

アンケート結果のうち回答をベクトルとして保持する.

すべてのアンケートにforeachで以下の処理を行う.

  1. マッチング済みかを確認する. マッチング済みなら処理をスキップする.
  2. partnerGenderと一致するgenderを持ち,
    かつ,partnerMinAgeからpartnerMaxAgeの範囲に収まるageを持つアンケートを探す.
  3. 処理中のアンケートと2で探したアンケート群で回答の近さをベクトルの類似度として算出する.
  4. 処理中のアンケート及び一番回答の近いアンケートで互いに,相手のidpartnerIdに保存する.
  5. 双方のアンケートのidをマッチング済みとして保存する.
@LaFr4nc3 LaFr4nc3 added Category: General koibito2019全体に関係 Type: Spec 仕様策定 labels May 22, 2019
@LaFr4nc3 LaFr4nc3 pinned this issue May 22, 2019
@LaFr4nc3
Copy link
Contributor Author

疑問,質問,ツッコミなどお待ちしてます.

@LaFr4nc3 LaFr4nc3 self-assigned this Jun 29, 2019
@LaFr4nc3 LaFr4nc3 closed this as completed Nov 2, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Category: General koibito2019全体に関係 Status: Proposal 提案 Type: Spec 仕様策定
Projects
None yet
Development

No branches or pull requests

1 participant