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にはあり、
それは便利なので必要かなと思う。
今回は申請、許可的な機能だがそちらは招待なので参加する側が許可すれば参加できる、
今回とは逆の機能となる。
招待テーブルを作るのか、フラグで分けるのか、また気が向いた時に本家の画面を見て決めたりなどが必要。

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

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

ツイッターでシェア
みんなに共有、忘れないようにメモ

view_list [連載] サイボウズLiveを作る
第2回 サイボウズLiveを作る-第2回-グループ登録まで
第3回 サイボウズLiveを作る-第3回-トピック登録まで
第4回 サイボウズLiveを作る-第4回-Todoをざっと
第5回 サイボウズLiveを作る-第5回-グループへ参加
第6回 サイボウズLiveを作る-第6回-イベント作成

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント