VSCode のRemote Container 拡張の使用を推奨します.
このプロジェクトをクローンし,VSCode のRemote Container 拡張を使用して開く.
git clone https://github.com/2d-rpg/card-playroom-server.git
code card-playroom-server
右下の通知欄でDockerコンテナ上でプロジェクトを開くか聞いてくるのでReopen in Container を選択するとDockerコンテナが作成され,Dockerコンテナ上のプロジェクトが開かれる
Dockerコンテナ上のプロジェクトを開いたら右下の通知欄でrust-analyzerに必要な言語サーバーをダウンロードするか聞いてくるのでDownload nowを選択する.
以下 Dockerコンテナ上で実行
.env.example
ファイルを.env
にコピーする
cp .env.example .env
diesel
のセットアップを行う.
diesel setup
diesel migration generate create_rooms
up.sql
に以下を追記.
CREATE TABLE rooms (
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
players TEXT[] NOT NULL
);
CREATE TABLE cards (
id SERIAL PRIMARY KEY,
face VARCHAR NOT NULL,
back VARCHAR NOT NULL
);
CREATE TABLE decks (
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL
);
CREATE TABLE belongings (
id SERIAL PRIMARY KEY,
deck_id INTEGER NOT NULL references decks(id),
card_id INTEGER NOT NULL references cards(id),
num INTEGER NOT NULL
);
データベース起動
diesel migration run
サーバー起動
cargo run # local-container間の同期が早い場合
cargo run --target-dir /tmp/target # local-container間の同期が遅い場合
http://0.0.0.0:8080 にサーバーが建てられる. http://127.0.0.1:8080 にアクセス.
データ追加
- createRoom(ルーム作成)
mutation {
createRoom(name: "hoge", player: "fuga") {
id, name, players
}
}
- enterRoom(ルーム参加)
mutation {
enterRoom(player: "piyo", roomId: 1) {
id, name, players
}
}
- removeRoom(ルーム削除)
mutation {
removeRoom(roomId: 2) {
id, name, players
}
}
データ取得
query {
rooms{id, name, players}
}
cargo run
の代わりに以下のコマンドを実行するとファイル変更するたびに自動でコンパイルされる
cargo watch -x run
up.sql
を変更した場合,以下のコマンドでデータベースの更新を行う.
diesel database reset
上記の変更後,schema.rs
の変更が自動で行われ,以下のコマンドでデータベースのスキーマを確認できる.
diesel print-schema