Skip to content

プレイ記録の公開範囲 ​

利用者が書いたプレイ記録を、ほかの利用者にどこまで見せるかの仕様をまとめる。開発者向け。REST での取り方の決まりは REST エンドポイントの切り方にある。

投稿者が隠せるもの ​

設定列他人から見えなくなるもの
記録を非公開にするprivate記録そのもの(一覧・詳細・件数のすべてから外れる)
評価を隠すhideRating評価
プレイ時期を隠すhidePlayedAtプレイ時期

プレイ予定(playedConfirmedAt が無い、まだプレイしていない記録)も他人には見せない。

作品カードの「プレイ済みにする」から星だけを付けると、評価は隠した状態(hideRating: true)で保存される。

他人に見せる値 ​

  • 隠したプレイ時期・評価は、値を返さない(null にする)
  • 公開しているプレイ時期も、日付まで出さず月初に丸める。何日にどの店舗へ行ったかを特定させないため
  • 本人には、隠した値も実際の値で見せる

隠した値の扱い ​

隠した値は、表示しないだけでなく、他人に見せる一覧の並び順にも実際の値を使わない。並び順に使うときは「その値が無い」ものとして扱う。

実際の値で並べると、隠した記録が公開されている記録の並びの中に入り、前後の記録の値から隠した値が読めるため。たとえば評価の高い順の一覧で、★5 の記録と ★5 の記録の間にいれば、隠した評価は 5 だと分かる。

  • 評価の高い順で並べる一覧では、評価を隠した記録を「評価なし」として扱う
  • 利用者が選ぶ並び替え(ユーザーページの評価順・プレイ時期順)では、並べる値を隠した記録を一覧から外す。その並びは「評価で並べた一覧」なので、評価の見えない記録が抜けても成り立つ
  • 既定の並び(作家ページの「みんなのプレイ記録」)では記録を外さず、「無い」ものとして並べる。外すと、評価を隠した記録が作家ページから消える
  • 「評価あり」の絞り込みでは、評価を隠した記録を含めない。星の表示されない記録が「評価あり」の一覧に並ばないようにするため

INFO

Prisma の orderBy では「隠しているなら無いものとして並べる」式を書けないので、作家ページの並び順だけは SQL で書いている。公開範囲の条件が Prisma 側と同じ記録を選ぶことは、テストで確かめている。

いいね ​

  • いいねを付けられるのは、他人に公開されたプレイ済みの記録と、自分の記録(非公開でもよい)
  • 他人の非公開の記録・プレイ予定にはいいねを付けられず、いいねの件数も返さない。件数から非公開の記録の存在が読めるため
  • 付けたあとに記録が非公開になっても、自分のいいねは外せる

書き込み ​

記録の作成・編集・削除は、どの経路から保存しても同じ処理(logic/createSessionRecord.ts など)を通る。

  • 作成は、その作品のプレイ予定があれば、それをプレイ済みにして上書きする。すでにプレイ済みの記録がある作品には作れない
  • 作成で予約を紐付けられるのは、本人の予約で、まだほかの記録に紐付いていないものに限る。他人の予約を先に埋めて、その人が予約から記録を作れなくするのを防ぐ
  • 一緒に遊んだ人(GM・プレイヤー)として前に登録した人物を指せるのは、本人が登録した人物に限る。人物には本人が付けた呼び名とアイコンが入っていて、他人に見せないため。候補の検索も本人が登録した人物しか返さない
  • 運営マスターが他人の記録を代わりに編集したときも、新しく作る人物は記録の持ち主のものにする
  • 評価だけをその場で直しても(マイページの星)、評価を隠すかどうかは変えない。隠すかどうかは編集画面で決める
  • 入力の上限(文字数・人数)と評価の範囲は logic/sessionRecordInputRules.ts にある。どの経路から保存しても同じ検証を通る
  • 検証に通らない入力は、何も書かずに失敗する(共演者だけが作られて残る、ということが無い)

関連ソースコード ​

  • javascript/mdms_jp/backend/src/logic/publicPlayedSessionRecordWhere.ts・publicPlayedAtOrHidden.ts・publicRatingOrHidden.ts(公開範囲と隠した値の判定)
  • javascript/mdms_jp/backend/src/logic/findAuthorPlayedSessionRecordIds.ts(作家ページの並び順)
  • javascript/mdms_jp/backend/src/logic/createSessionRecord.ts・updateSessionRecord.ts・confirmSessionRecordPlayed.ts・deleteSessionRecord.ts(書き込み)
  • javascript/mdms_jp/backend/src/logic/sessionRecordInput.ts(入力の検証)
  • javascript/mdms_jp/backend/src/logic/searchSessionRecordPeople.ts(一緒に遊んだ人の候補)
  • javascript/mdms_jp/backend/src/logic/sessionRecordFavorite.ts(いいねの付け外し)
  • javascript/mdms_jp/backend/src/schema/session_record/(GraphQL)