oneshot
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
defmodule Rsh26poolWeb.RoomController do
|
||||
use Rsh26poolWeb, :controller
|
||||
|
||||
import Phoenix.Component, only: [to_form: 1, to_form: 2]
|
||||
|
||||
alias Rsh26pool.Voting
|
||||
alias Rsh26poolWeb.Auth
|
||||
|
||||
def new(conn, _params) do
|
||||
render(conn, :new,
|
||||
form: to_form(Voting.change_room_creation()),
|
||||
page_title: "ルームを作成"
|
||||
)
|
||||
end
|
||||
|
||||
def create(conn, %{"room" => room_params}) do
|
||||
case Voting.create_room(room_params) do
|
||||
{:ok, %{room: room, owner: owner}} ->
|
||||
conn
|
||||
|> Auth.log_in_participant(owner)
|
||||
|> put_flash(
|
||||
:info,
|
||||
"ルーム「#{room.name}」を作成しました。ルーム番号は #{room.room_number} です。"
|
||||
)
|
||||
|> redirect(to: ~p"/manage/#{room.room_number}")
|
||||
|
||||
{:error, changeset} ->
|
||||
conn
|
||||
|> put_flash(:error, "ルームを作成できませんでした。入力内容を確認してください。")
|
||||
|> render(:new, form: to_form(changeset), page_title: "ルームを作成")
|
||||
end
|
||||
end
|
||||
|
||||
def enter_form(conn, params) do
|
||||
render(conn, :enter,
|
||||
form: enter_form_data(params["room"] || "", ""),
|
||||
page_title: "ルームに参加"
|
||||
)
|
||||
end
|
||||
|
||||
def enter(conn, %{"enter" => %{"room_number" => number, "name" => name}}) do
|
||||
number = String.trim(number || "")
|
||||
name = String.trim(name || "")
|
||||
|
||||
cond do
|
||||
number == "" or name == "" ->
|
||||
conn
|
||||
|> put_flash(:error, "ルーム番号と名前を入力してください。")
|
||||
|> render(:enter, form: enter_form_data(number, name), page_title: "ルームに参加")
|
||||
|
||||
true ->
|
||||
enter_room(conn, number, name)
|
||||
end
|
||||
end
|
||||
|
||||
def logout(conn, _params) do
|
||||
conn
|
||||
|> Auth.log_out_participant()
|
||||
|> put_flash(:info, "ログアウトしました。")
|
||||
|> redirect(to: ~p"/")
|
||||
end
|
||||
|
||||
defp enter_room(conn, number, name) do
|
||||
case Voting.get_room_by_number(number) do
|
||||
nil ->
|
||||
conn
|
||||
|> put_flash(:error, "ルーム番号「#{number}」のルームが見つかりません。")
|
||||
|> render(:enter, form: enter_form_data(number, name), page_title: "ルームに参加")
|
||||
|
||||
room ->
|
||||
case Voting.join_room(room, %{"name" => name}) do
|
||||
{:ok, participant} ->
|
||||
conn
|
||||
|> Auth.log_in_participant(participant)
|
||||
|> put_flash(:info, "ルーム「#{room.name}」に参加しました。")
|
||||
|> redirect(to: ~p"/vote/#{room.room_number}")
|
||||
|
||||
{:error, _changeset} ->
|
||||
conn
|
||||
|> put_flash(:error, "参加できませんでした。名前は40文字以内で入力してください。")
|
||||
|> render(:enter, form: enter_form_data(number, name), page_title: "ルームに参加")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
defp enter_form_data(number, name) do
|
||||
to_form(%{"room_number" => number, "name" => name}, as: :enter)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user