From c103940de642f583737d828ce11ed7b55a6f087a Mon Sep 17 00:00:00 2001
From: Muhammad Rafif Elfazri <rafif.elfazri@gmail.com>
Date: Fri, 19 Feb 2021 14:13:49 +0700
Subject: [PATCH] add role to users schema

---
 lib/diskuy/account/user.ex                           | 5 +++--
 lib/diskuy_web/auth/google_auth.ex                   | 8 ++++++--
 lib/diskuy_web/views/user_view.ex                    | 4 +++-
 priv/repo/migrations/20201211030926_create_users.exs | 1 +
 4 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/lib/diskuy/account/user.ex b/lib/diskuy/account/user.ex
index cb69976..2812554 100644
--- a/lib/diskuy/account/user.ex
+++ b/lib/diskuy/account/user.ex
@@ -6,14 +6,15 @@ defmodule Diskuy.Account.User do
     field :username, :string
     field :email, :string
     field :picture, :string
+    field :role, :string, default: "reguler"
     timestamps()
   end
 
   @doc false
   def changeset(user, attrs) do
     user
-    |> cast(attrs, [:username, :email, :picture])
-    |> validate_required([:username, :email])
+    |> cast(attrs, [:username, :email, :picture, :role])
+    |> validate_required([:username, :email, :role])
     |> validate_format(:email, ~r/^[A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)
     |> unique_constraint(:username)
     |> unique_constraint(:email)
diff --git a/lib/diskuy_web/auth/google_auth.ex b/lib/diskuy_web/auth/google_auth.ex
index 2139320..83ed14b 100644
--- a/lib/diskuy_web/auth/google_auth.ex
+++ b/lib/diskuy_web/auth/google_auth.ex
@@ -27,10 +27,14 @@ defmodule DiskuyWeb.Auth.GoogleAuth do
     case Account.get_by_username(username) do
       {:ok, _user} ->
         new_username = create_username(username)
-        {:ok, user} = Account.create_user(%{username: new_username, email: email, picture: picture})
+        {:ok, user} = Account.create_user(%{username: new_username,
+                                            email: email,
+                                            picture: picture, role: "reguler"})
         Guardian.create_token(user)
       {:error, :not_found} ->
-        {:ok, user} = Account.create_user(%{username: username, email: email, picture: picture})
+        {:ok, user} = Account.create_user(%{username: username,
+                                            email: email,
+                                            picture: picture, role: "reguler"})
         Guardian.create_token(user)
     end
   end
diff --git a/lib/diskuy_web/views/user_view.ex b/lib/diskuy_web/views/user_view.ex
index 45a172b..a2b2732 100644
--- a/lib/diskuy_web/views/user_view.ex
+++ b/lib/diskuy_web/views/user_view.ex
@@ -18,7 +18,8 @@ defmodule DiskuyWeb.UserView do
     %{id: user.id,
       username: user.username,
       name: user.email,
-      picture: user.picture
+      picture: user.picture,
+      role: user.role
       }
   end
 
@@ -28,6 +29,7 @@ defmodule DiskuyWeb.UserView do
       email: user.email,
       username: user.username,
       picture: user.picture,
+      role: user.role,
       token: token
     }
   end
diff --git a/priv/repo/migrations/20201211030926_create_users.exs b/priv/repo/migrations/20201211030926_create_users.exs
index 3006c38..3157e90 100644
--- a/priv/repo/migrations/20201211030926_create_users.exs
+++ b/priv/repo/migrations/20201211030926_create_users.exs
@@ -6,6 +6,7 @@ defmodule Diskuy.Repo.Migrations.CreateUsers do
       add :username, :string
       add :email, :string
       add :picture, :string
+      add :role, :string
       timestamps()
     end
     create unique_index(:users, [:username])
-- 
GitLab