プレイ記録の公開範囲
利用者が書いたプレイ記録を、ほかの利用者にどこまで見せるかの仕様をまとめる。開発者向け。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)