2018-10-18に更新

サイボウズLiveを作る-第5回-グループへ参加

とりあえず一旦グループにメンバーを追加する機能を進めてみた。

メールアドレスは今のところ登録してほしくないし、とりあえずそれ無しでできる部分だけ進めた。

具体的には本家と同じで、招待URLを使ってそこからアクセスしてログインすればグループ申請となる形。

というか、本当にほとんどそれくらいなので何も書くことがない。
とりあえず、ただそのまま処理を書いてるだけなので何の役にも立たないがソースでも貼っておく。


def join_request(conn, %{"id" => id, "invitation_hash" => invitation_hash}) do user = Auth.get_user(conn) group = Groups.get_group!(id) cond do invitation_hash != Group.invitation_hash(group) -> redirect(conn, to: "/") user -> Groups.create_invitation(user, group) redirect(conn, to: group_path(conn, :index)) true -> conn |> put_layout(false) |> render("join_request.html", group: group, invitation_hash: invitation_hash) end end

ログインしていたらそのままメッセージもなく申請データが登録されて自分のページに戻るので、
非常にわかりづらい。さすがに直した方がいいかもしれない。

承認。

  def approve(conn, %{"group_id" => group_id, "id" => id}) do
    user = Auth.get_user(conn)
    group = Groups.get_group!(group_id)
    invitation = Groups.get_invitation!(id, group_id)
    invitation_params = %{"closed_at" => Timex.now}

    result = Repo.transaction(fn ->
      Groups.update_invitation!(invitation, invitation_params)
      Groups.create_group_user!(invitation.user, group)
    end)

    case result do
      {:ok, _changes} ->
        conn
        |> put_flash(:info, "承認しました。")
        |> redirect(to: invitation_path(conn, :requests, group_id))
      {:error, _any} ->
        conn
        |> put_flash(:error, "エラーが発生しました。")
        |> redirect(to: invitation_path(conn, :requests, group_id))
    end
  end

あとはページ上に表示されているユーザーのリンクは単純なusersのshowだったが、
関係ないグループのユーザーも表示できてしまうので全てGroupUserのリンクに変更し、
同じグループのユーザーしかアクセスできないものにした。
自分の編集画面などはid等のパラメータなどもなしのURLに変更。

考察

自分の知っている人を新たなグループに招待する機能もサイボウズLiveにはあり、
それは便利なので必要かなと思う。
今回は申請、許可的な機能だがそちらは招待なので参加する側が許可すれば参加できる、
今回とは逆の機能となる。
招待テーブルを作るのか、フラグで分けるのか、また気が向いた時に本家の画面を見て決めたりなどが必要。

次はイベント機能を進めようかと思う。
それが終わったら今テストを全く触っておらず、自動生成されたままのためエラー出まくりなので、
そっちを一旦整備もしたい。修正したり要らないものを捨てて絞ったり。
(なんとなくそっちの方が書くことがあるような気がする)

あとはイベント機能に伴い、今まで放置してたタイムゾーン問題も少し時間をかけて調べる時間を取ろうと思う。


だら@Crieit開発者

Crieitの開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitはαバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
関連記事

コメント