Giter Site home page Giter Site logo

42-ft_transcendence's Introduction

42-ft_transcendence

Prismaを使う上での注意点

schema.prismaを編集したとき、npx prisma migrate devを実行すること。 既存のデータベースからのマイグレーション用のSQLファイルが生成されるので、一緒にプッシュよろ。

42-ft_transcendence's People

Contributors

corvvs avatar junnetworks avatar nakamo326 avatar toyeah avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

42-ft_transcendence's Issues

DM

仕様

  • 実装上はDMタイプを持つチャットルームとする。
  • DMタイプのチャットルームはPRIVATEタイプのチャットルームと類似しているが、
    • 明示的に作成できず、メンバーのうち一方がDMを送った時に自動的に作成される。
    • チャットルーム一覧に出てこない。
    • DM一覧的な画面に出てくる。
    • 管理コマンドがない。
    • 他のユーザを招待することはできない。
    • 退室ができない。
    • ルーム名の代わりに「自分でない方の参加者の名前」が表示される。

タスクリスト

-> see #81

フロント側認証処理の検討と実装

コンポーネントの構造

  • / AppRoutes
    • /auth DevAuth
      • credentialの検証状態によって表示するコンポーネントが切り替わる:
        • (credential検証中) DevAuthValidating
          • プログレス的なものを表示するだけ
        • (credential検証失敗) DevAuthLogin
          • ログイン用UI
        • (credential検証成功) DevAuthenticated
          • ユーザ情報表示・ログアウト用UI

APIの構造

  • GET /auth/session
    • 手持ちのクレデンシャルを送り, 有効かどうか確認する
  • POST /auth/login_ft
    • 42authへの入口
  • GET /auth/callback_ft
    • 42authからの認可コードをトークンに交換する口

クレデンシャル

型定義。

type AppCredential = {
  token: string; // トラセンが発行したJWT
};

これをローカルストレージに置いておく想定。

クレデンシャルへのアクセスは専用のフックを経由して行う。
値をnullにセットするとログアウト。
クレデンシャルが無効化されていると判定された場合もnullにする。

チャットルームの設計変更

現行の画面

image

変更案

  • 左ペインのルーム一覧は、基本的に「自分がJOINしているルーム」(JOINED)を表示する。
  • ルームに入るためのUIとして、チャットルームを選択していない状態の右ペインに「見えているルーム」(VISIBLE)を表示する。
  • 右ペインのルーム一覧の出し方は「縦のリスト」と「カードの折り返し」とがある。作ってみて比べる。
  • JOINボタンはVISIBLE一覧の各ルームのカードに置く。
  • LEAVEボタンは各ルームのViewに置く。
  • 表示をVISIBLE一覧に切り替える手段(ボタン)を左ペインに追加

各種システムメッセージ

  • 入退室メッセージ
  • ADMINになった旨のメッセージ
  • 対戦募集通知
    • 募集ボタンは別途ある
  • ↑の取り消し
  • ↑↑の終了(=マッチング成立)
    • ここから観戦に飛べるイメージ

サブタスク

  • #153
  • #154
  • #155
    • ゲーム側が進行してマッチテーブルのスキーマが確定するまで待ち

「ブロック」によりブロックされる操作

ブロックした人 → された人

  • した人は、された人のチャットの発言が見えない
  • #312

ブロックされた人 → した人

  • #312
  • された人は、自分がオーナーであるPRIVATEチャットルームにした人をINVITEできない

LOCKEDルームへのJOIN処理

  • LOCKEDなルームへのJOINボタンを押した時、JOINコマンドの送信前にパスワード入力モーダルを挟む。

チャットルーム タイプの変更

タイプは3種類

  • PUBLIC
    • 全ユーザに見える。banされていない全ユーザがjoinできる。
  • PRIVATE
    • joinしているユーザにのみ見える。joinできず、自分で作るかinviteされるしか入る方法がない。
  • LOCKED
    • 全ユーザに見える。banされていない全ユーザがjoinできるが、その際正しいパスワードを送る必要がある。

Pong WebSocketを用いて簡単なPongを実装する

自分の動きがサーバーに送信され、サーバー側でゲームロジックの計算を行い、結果のスナップショットをクライアントに返して、クライアントで描画する。

ってところまで作る。

できれば自分のバーの動きが相手の動きに反映されるようにしておくと動かすの楽しそう。

アバター画像の設定

要素

  • 受け付ける入力
    • 画像ファイルのアップロード
    • URL
  • 保存場所
    • PostgreSQL
    • backendコンテナ内部のストレージ
    • backendではない別のボリューム
      • どのコンテナがマウントする? frontend or backend
  • 保存形式(≒表示形式)
    • blob
    • dataURL
    • 普通にファイル
      • ブラウザキャッシュに載せるという意味では良さそう
      • この場合フロントエンドが画像ファイルに到達できる必要がある

chatroomの命名変更

chatroomとsocket.ioのroomが混同しやすいのでchatroomをchannelなどに変更してもいいかも

Pong ボールの射出角度を制限する

ボールの射出角度を制限しないと真上にボールが飛んでしまう。そうするとプレイヤーにボールが届くまで時間がかかりすぎてしまうので、射出角度を制限する必要がある。

e2eテスト修正

現状のバックエンドのe2eのテストはほとんど要らなくなるはずなので、
サービスのunitテストを実装してe2eは削除する方が良さそう

backendの.envをローカルとコンテナで切り替える

コンテナ内はpostgresで名前解決できるけど、ローカルからnpx prisma studioでデータベース接続できなくなるので、
ローカルの.envのホストはlocalhost
コンテナの.envのホストはpostgres
になるようにしたい。

[チャット班] 第1回 取りこぼした細かいところのフォロー

タスクリスト

取りこぼしなんでもリスト

  • チャットに新しい発言が来てもスクロールしないと見えない
  • チャットで過去の発言が取得できない
  • UIがアニメーションしない(するのか?)
  • チャットルームのまともな新規作成UIがない
  • チャットルームが削除できない
    • オーナーがleaveしたら削除?
  • チャットルームのタイプ別の細かい挙動
    • PUBLIC
    • PRIVATE
    • LOCKED
  • チャットルームに通常のメッセージ以外のものを表示する話
    • システムメッセージ
    • ゲームへのinvite
  • チャットルームのメンバー一覧からユーザをクリックした時はまずモーダル出す方がいいと思う
  • 汎用のメッセージ表示UIがほしい
    • エラーメッセージの表示に使う場合、ウェブソケットコマンドのエラーを想定する。
      • REST APIのエラーは普通は表示場所がちゃんとあるはず。
    • (汎用のモーダルダイアログもあるといいかも?)
  • バックエンドでDTOによるチェックをちゃんとやる
  • フロントエンドでバックエンドから来たデータの形式チェックをやる
  • チャットルームのパスワードをハッシュ化する
  • Routerのフォールバックを設定する
  • 極端に長い文字列に対する表示
    • 「何が」「どこで」表示される時「どうするか」
    • 「何が」
      • ユーザの名前
      • チャットルームの名前
      • チャットの発言
    • 「どこで」
      • モーダル
      • 閲覧ページ
      • テーブル
    • 「どうするか」
      • 1行にしてはみ出した分は隠す
      • 1行にしてはみ出した分はスクロールで見せる
      • 折り返す
  • ログインしていない状態で何ができるのかを確定させる

  • UI
    • 必要なUI(ページレベル)のリストアップ
    • 各UIについて、何を表示するべき&何ができるべきかを決める
    • ページ間をどのように繋ぐかを決める
      • @ToYeah に構想があるか聞く
  • エラーハンドリング
    • フロントエンドにおいてどの状況でどのエラーメッセージを出すべきか確定させる
  • バリデーション
    • フロントエンドの既存の適当なバリデーションを改善する
    • バックエンド側でのバリデーションをきっちりやる
  • セキュリティ
    • パスワードのハッシュ化をやるべき所でやる

二要素認証(2FA)

要求事項

「すべてのユーザは2FAを有効にできること」

タスク

  • 実装する2FA手段の選定
    • 候補
      • ✅ TOTPによる認証; たとえばGoogle Authenticator
        • 最有力。金がかからないしスマホアプリがもうある。メンテされてるかは知らんけど。
      • 電話番号を入力してもらい、SMSで認証コードを送る
        • 金がかかる
      • メールアドレス宛にログインリンクを送る
        • 楽なメール送信サービスは金がかかるが、タダのやつが楽に使えるならアリかも。
  • 実装 -> #78

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.