Skip to content

Commit

Permalink
Merge branch 'main' into dp/upgrade-guardian-controller
Browse files Browse the repository at this point in the history
  • Loading branch information
danielsp45 committed Sep 27, 2023
2 parents b159d5f + 89ca96a commit 8f8d4cb
Show file tree
Hide file tree
Showing 13 changed files with 199 additions and 68 deletions.
8 changes: 2 additions & 6 deletions bin/release
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ function build_image() {
local version
local env

env=${1:-stg}
env=${1:-prod}

load_env_file ".env.${env}"

Expand All @@ -56,10 +56,6 @@ function build_image() {
docker image prune --force
}

function push_image() {
docker push coderdojobraga/bokken --all-tags
}

if [[ "${1:-NOFORCE}" != "--force" ]]; then
if [[ $(git branch --show-current) != 'main' ]]; then
log_error "You're trying to release from git branch $(git branch --show-current) instead of main." \
Expand All @@ -78,4 +74,4 @@ else
fi

build_image "${1:-prod}"
push_image

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
defmodule BokkenWeb.Admin.NinjaController do
use BokkenWeb, controller: "1.6"
use BokkenWeb, :controller

alias Bokken.Accounts
alias Bokken.Accounts.Ninja
Expand All @@ -8,14 +8,14 @@ defmodule BokkenWeb.Admin.NinjaController do

def index(conn, _params) do
ninjas = Accounts.list_ninjas([:guardian])
render(conn, "index.json", ninjas: ninjas)
render(conn, :index, ninjas: ninjas)
end

def update(conn, %{"id" => id, "ninja" => ninja_params}) when is_organizer(conn) do
ninja = Accounts.get_ninja!(id, [:guardian])

with {:ok, %Ninja{} = ninja} <- Accounts.update_ninja(ninja, ninja_params) do
render(conn, "ninja.json", ninja: ninja)
render(conn, :ninja, ninja: ninja)
end
end
end
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
defmodule BokkenWeb.Admin.NinjaView do
use BokkenWeb, :view

defmodule BokkenWeb.Admin.NinjaJSON do
alias Bokken.Uploaders.Avatar

def render("index.json", %{ninjas: ninjas}) do
%{data: render_many(ninjas, __MODULE__, "ninja.json")}
def index(%{ninjas: ninjas}) do
%{data: for(ninja <- ninjas, do: data(ninja))}
end

def render("ninja.json", %{ninja: ninja}) do
def data(%{ninja: ninja}) do
%{
id: ninja.id,
photo: Avatar.url({ninja.photo, ninja}, :thumb),
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
defmodule BokkenWeb.NinjaController do
use BokkenWeb, controller: "1.6"
use BokkenWeb, :controller

alias Bokken.Accounts
alias Bokken.Accounts.Ninja
Expand All @@ -14,20 +14,20 @@ defmodule BokkenWeb.NinjaController do
when is_map_key(params, "badge_id")
when is_map_key(params, "event_id") do
ninjas = Accounts.list_ninjas()
render(conn, "index.json", ninjas: ninjas)
render(conn, :index, ninjas: ninjas)
end

def index(conn, _params) when is_guardian(conn) or is_organizer(conn) do
guardian_id = conn.assigns.current_user.guardian.id
guardian = Accounts.get_guardian!(guardian_id, [:ninjas])
render(conn, "index.json", ninjas: guardian.ninjas)
render(conn, :index, ninjas: guardian.ninjas)
end

def create(conn, %{"event_id" => event_id, "ninja_id" => ninja_id})
when is_guardian(conn) or is_organizer(conn) do
with {:ok, %Event{} = event, %Lecture{} = _lecture} <-
Accounts.register_ninja_in_event(event_id, ninja_id) do
render(conn, "index.json", ninjas: event.ninjas)
render(conn, :index, ninjas: event.ninjas)
end
end

Expand All @@ -38,8 +38,8 @@ defmodule BokkenWeb.NinjaController do

conn
|> put_status(:created)
|> put_resp_header("location", Routes.team_path(conn, :show, ninja))
|> render("show.json", ninja: ninja)
|> put_resp_header("location", ~p"/api/teams/#{ninja}")
|> render(:show, ninja: ninja)
end
end

Expand All @@ -51,19 +51,19 @@ defmodule BokkenWeb.NinjaController do
Accounts.create_ninja(Map.put(ninja_params, "guardian_id", guardian_id)) do
conn
|> put_status(:created)
|> put_resp_header("location", Routes.ninja_path(conn, :show, ninja))
|> render("show.json", ninja: ninja)
|> put_resp_header("location", ~p"/api/ninjas/#{ninja}")
|> render(:show, ninja: ninja)
end
end

def show(conn, %{"id" => id}) do
ninja = Accounts.get_ninja!(id, [:skills])
render(conn, "show.json", ninja: ninja)
render(conn, :show, ninja: ninja)
end

def show(conn, %{"discord_id" => discord_id}) do
with {:ok, %Ninja{} = ninja} <- Accounts.get_ninja_by_discord(discord_id) do
render(conn, "show.json", ninja: ninja)
render(conn, :show, ninja: ninja)
end
end

Expand All @@ -72,14 +72,14 @@ defmodule BokkenWeb.NinjaController do
ninja = Accounts.get_ninja!(id)

with {:ok, %Ninja{} = ninja} <- Accounts.update_ninja(ninja, ninja_params) do
render(conn, "show.json", ninja: ninja)
render(conn, :show, ninja: ninja)
end
end

def update(conn, %{"discord_id" => discord_id, "ninja" => ninja_params}) do
with {:ok, %Ninja{} = ninja} <- Accounts.get_ninja_by_discord(discord_id),
{:ok, %Ninja{} = ninja} <- Accounts.update_ninja(ninja, ninja_params) do
render(conn, "show.json", ninja: ninja)
render(conn, :show, ninja: ninja)
end
end

Expand Down
57 changes: 57 additions & 0 deletions lib/bokken_web/controllers/ninja/ninja_json.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
defmodule BokkenWeb.NinjaJSON do
alias Bokken.Uploaders.Avatar
alias BokkenWeb.SkillJSON

def index(%{ninjas: ninjas}) do
%{data: for(ninja <- ninjas, do: data(ninja))}
end

def show(%{ninja: ninja}) do
%{data: data(ninja)}
end

def ninja(%{ninja: ninja, current_user: current_user}) do
data(ninja)
|> Map.merge(personal(ninja, current_user))
|> Map.merge(sensitive(ninja, current_user))
end

def data(ninja) do
%{
id: ninja.id,
photo: Avatar.url({ninja.photo, ninja}, :thumb),
first_name: ninja.first_name,
last_name: ninja.last_name,
belt: ninja.belt,
socials: ninja.socials,
since: ninja.inserted_at,
guardian_id: ninja.guardian_id
}
|> Map.merge(skills(ninja))
end

defp personal(ninja, current_user)
when current_user.role == :organizer or current_user.id == ninja.id do
%{
birthday: ninja.birthday
}
end

defp personal(_ninja, _current_user), do: %{}

defp sensitive(ninja, current_user) when current_user.role in [:organizer, :mentor] do
%{
notes: ninja.notes
}
end

defp sensitive(_ninja, _current_user), do: %{}

defp skills(ninja) do
if Ecto.assoc_loaded?(ninja.skills) do
%{skills: for(skill <- ninja.skills, do: SkillJSON.data(skill))}
else
%{}
end
end
end
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
defmodule BokkenWeb.SkillController do
use BokkenWeb, controller: "1.6"
use BokkenWeb, :controller

alias Bokken.Accounts
alias Bokken.Curriculum
Expand All @@ -9,24 +9,24 @@ defmodule BokkenWeb.SkillController do

def index(conn, %{"ninja_id" => _ninja_id} = params) do
skills = Curriculum.list_ninja_skills(params)
render(conn, "index.json", skills: skills)
render(conn, :index, skills: skills)
end

def index(conn, %{"mentor_id" => _mentor_id} = params) do
skills = Curriculum.list_mentor_skills(params)
render(conn, "index.json", skills: skills)
render(conn, :index, skills: skills)
end

def index(conn, _params) do
skills = Curriculum.list_skills()
render(conn, "index.json", skills: skills)
render(conn, :index, skills: skills)
end

def create(conn, %{"skill" => skill_params}) when is_organizer(conn) do
with {:ok, %Skill{} = skill} <- Curriculum.create_skill(skill_params) do
conn
|> put_status(:created)
|> render("show.json", skill: skill)
|> render(:show, skill: skill)
end
end

Expand All @@ -39,7 +39,7 @@ defmodule BokkenWeb.SkillController do
with {:ok, %NinjaSkill{} = ninja_skill} <- Curriculum.create_ninja_skill(ninja_skill_attrs) do
conn
|> put_status(:created)
|> render("show.json", skill: skill(ninja_skill))
|> render(:show, skill: skill(ninja_skill))
end
end

Expand All @@ -54,12 +54,12 @@ defmodule BokkenWeb.SkillController do
with {:ok, %NinjaSkill{} = ninja_skill} <- Curriculum.create_ninja_skill(ninja_skill_attrs) do
conn
|> put_status(:created)
|> render("show.json", skill: skill(ninja_skill))
|> render(:show, skill: skill(ninja_skill))
end
else
conn
|> put_status(:unauthorized)
|> render("error.json", reason: "You're not the ninja's guardian")
|> render(:error, reason: "You're not the ninja's guardian")
end
end

Expand All @@ -73,20 +73,20 @@ defmodule BokkenWeb.SkillController do
Curriculum.create_mentor_skill(mentor_skill_attrs) do
conn
|> put_status(:created)
|> render("show.json", skill: skill(mentor_skill))
|> render(:show, skill: skill(mentor_skill))
end
end

def show(conn, %{"id" => id}) do
skill = Curriculum.get_skill!(id)
render(conn, "show.json", skill: skill)
render(conn, :show, skill: skill)
end

def update(conn, %{"id" => id, "skill" => skill_params}) when is_organizer(conn) do
skill = Curriculum.get_skill!(id)

with {:ok, %Skill{} = skill} <- Curriculum.update_skill(skill, skill_params) do
render(conn, "show.json", skill: skill)
render(conn, :show, skill: skill)
end
end

Expand All @@ -113,7 +113,7 @@ defmodule BokkenWeb.SkillController do
else
conn
|> put_status(:not_found)
|> render("error.json", reason: "You don't have that skill")
|> render(:error, reason: "You don't have that skill")
end
end

Expand All @@ -132,7 +132,7 @@ defmodule BokkenWeb.SkillController do
else
conn
|> put_status(:not_found)
|> render("error.json", reason: "You don't have that skill")
|> render(:error, reason: "You don't have that skill")
end
end

Expand All @@ -150,12 +150,12 @@ defmodule BokkenWeb.SkillController do
else
conn
|> put_status(:not_found)
|> render("error.json", reason: "Ninja doesn't have that skill")
|> render(:error, reason: "Ninja doesn't have that skill")
end
else
conn
|> put_status(:unauthorized)
|> render("error.json", reason: "You're not the ninja's guardian")
|> render(:error, reason: "You're not the ninja's guardian")
end
end

Expand Down
21 changes: 21 additions & 0 deletions lib/bokken_web/controllers/skill/skill_json.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
defmodule BokkenWeb.SkillJSON do
def index(%{skills: skills}) do
%{data: for(skill <- skills, do: data(%{skill: skill}))}
end

def show(%{skill: skill}) do
%{data: data(%{skill: skill})}
end

def error(%{reason: reason}) do
%{error: reason}
end

def data(%{skill: skill}) do
%{
id: skill.id,
name: skill.name,
description: skill.description
}
end
end
25 changes: 0 additions & 25 deletions lib/bokken_web/views/skill_view.ex

This file was deleted.

7 changes: 6 additions & 1 deletion test/bokken/accounts_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@ defmodule Bokken.AccountsTest do
user = insert(:user)

attrs =
params_for(:guardian, user_id: user.id, user: user, city: "Braga", mobile: "+351915096743")
params_for(:guardian,
user_id: user.id,
user: user,
city: "Braga",
mobile: "+351915096743"
)

assert {:ok, %Guardian{} = guardian} = Accounts.create_guardian(attrs)
assert guardian.city == "Braga"
Expand Down
Loading

0 comments on commit 8f8d4cb

Please sign in to comment.