Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
dev:
#!/bin/env bash
docker compose -f .dev/docker-compose.yml up --build
2 changes: 1 addition & 1 deletion lib/back/automatons/automaton.ex
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ defmodule Back.Automatons.Automaton do
@doc false
def changeset(automaton, attrs) do
automaton
|> cast(attrs, [:contents, :name, :description, :assets_link])
|> cast(attrs, [:contents, :name, :description, :assets_link, :posted_by])
|> validate_required([:contents, :name, :description])
end
end
56 changes: 56 additions & 0 deletions lib/back/plugins/manager.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ defmodule Back.Plugins.Manager do
import Ecto.Query, warn: false
alias Back.Repo

alias Back.Automatons.Automaton
alias Back.Plugins.Manager.PluginManager
alias Back.Visuals.Visual
alias Back.Users.User

@doc """
Returns the list of plugin_manager.
Expand Down Expand Up @@ -101,4 +104,57 @@ defmodule Back.Plugins.Manager do
def change_plugin_manager(%PluginManager{} = plugin_manager, attrs \\ %{}) do
PluginManager.changeset(plugin_manager, attrs)
end

def get_visuals_by_automaton_id!(id) do
query =
from pm in PluginManager,
join: v in Visual,
on: v.id == pm.visual,
left_join: u in User,
on: v.posted_by == u.user_id,
where: pm.automaton == ^id,
select: %{
id: v.id,
name: v.name,
description: v.description,
assets_link: v.assets_link,
posted_by: %{
user_id: u.user_id,
username: u.username,
email: u.email,
phone: u.phone,
created_at: u.created_at,
user_role: u.user_role
}
}

Repo.all(query)
end

def get_automaton_by_visuals_id!(id) do
query =
from pm in PluginManager,
join: a in Automaton,
on: a.automaton_id == pm.automaton,
left_join: u in User,
on: a.posted_by == u.user_id,
where: pm.visual == ^id,
select: %{
id: a.automaton_id,
name: a.name,
description: a.description,
contents: a.contents,
assets_link: a.assets_link,
posted_by: %{
user_id: u.user_id,
username: u.username,
email: u.email,
phone: u.phone,
created_at: u.created_at,
user_role: u.user_role
}
}

Repo.all(query)
end
end
4 changes: 2 additions & 2 deletions lib/back/plugins/manager/plugin_manager.ex
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ defmodule Back.Plugins.Manager.PluginManager do
@doc false
def changeset(plugin_manager, attrs) do
plugin_manager
|> cast(attrs, [])
|> validate_required([])
|> cast(attrs, [:automaton, :visual])
|> validate_required([:automaton, :visual])
end
end
2 changes: 1 addition & 1 deletion lib/back/visuals/visual.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ defmodule Back.Visuals.Visual do
@doc false
def changeset(visual, attrs) do
visual
|> cast(attrs, [:name, :description, :assets_link])
|> cast(attrs, [:name, :description, :assets_link, :posted_by])
|> validate_required([:name, :description, :assets_link])
end
end
31 changes: 22 additions & 9 deletions lib/back_web/controllers/plugin_manager_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ defmodule BackWeb.PluginManagerController do

action_fallback BackWeb.FallbackController

def index(conn, _params) do
plugin_manager = Manager.list_plugin_manager()
render(conn, :index, plugin_manager: plugin_manager)
end
# def index(conn, _params) do
# plugin_manager = Manager.list_plugin_manager()
# render(conn, :index, plugin_manager: plugin_manager)
# end

def create(conn, %{"plugin_manager" => plugin_manager_params}) do
with {:ok, %PluginManager{} = plugin_manager} <-
Expand All @@ -21,11 +21,6 @@ defmodule BackWeb.PluginManagerController do
end
end

def show(conn, %{"id" => id}) do
plugin_manager = Manager.get_plugin_manager!(id)
render(conn, :show, plugin_manager: plugin_manager)
end

def update(conn, %{"id" => id, "plugin_manager" => plugin_manager_params}) do
plugin_manager = Manager.get_plugin_manager!(id)

Expand All @@ -42,4 +37,22 @@ defmodule BackWeb.PluginManagerController do
send_resp(conn, :no_content, "")
end
end

@doc """
Get a visual id and return all automaton associated with it + the user that created each automaton
"""
def show_automatons(conn, %{"id" => id}) do
data = Manager.get_automaton_by_visuals_id!(id)

render(conn, :index_automaton, plugin_manager: data)
end

@doc """
Get an automaton id and return all visuals associated with it + the user that created each visual
"""
def show_visuals(conn, %{"id" => id}) do
data = Manager.get_visuals_by_automaton_id!(id)

render(conn, :index_visual, plugin_manager: data)
end
end
54 changes: 48 additions & 6 deletions lib/back_web/controllers/plugin_manager_json.ex
Original file line number Diff line number Diff line change
@@ -1,23 +1,65 @@
defmodule BackWeb.PluginManagerJSON do
alias Back.Plugins.Manager.PluginManager

# misc
def show(%{plugin_manager: plugin_manager}) do
%{data: data(plugin_manager)}
end

defp data(%PluginManager{} = data) do
%{
id: data.id,
automaton: data.automaton,
visual: data.visual
}
end

@doc """
Renders a list of plugin_manager.
"""
def index(%{plugin_manager: plugin_manager}) do
%{data: for(plugin_manager <- plugin_manager, do: data(plugin_manager))}
def index_visual(%{plugin_manager: plugin_manager}) do
%{data: for(plugin_manager <- plugin_manager, do: data_visual(plugin_manager))}
end

@doc """
Renders a single plugin_manager.
"""
def show(%{plugin_manager: plugin_manager}) do
%{data: data(plugin_manager)}
def show_visual(%{plugin_manager: plugin_manager}) do
%{data: data_visual(plugin_manager)}
end

defp data_visual(%{} = data) do
%{
id: data.id,
name: data.name,
description: data.description,
assets_link: data.assets_link,
posted_by: data.posted_by
}
end

@doc """
Renders a list of plugin_manager.
"""
def index_automaton(%{plugin_manager: plugin_manager}) do
%{data: for(plugin_manager <- plugin_manager, do: data_automaton(plugin_manager))}
end

@doc """
Renders a single plugin_manager.
"""
def show_automaton(%{plugin_manager: plugin_manager}) do
%{data: data_automaton(plugin_manager)}
end

defp data(%PluginManager{} = plugin_manager) do
defp data_automaton(%{} = data) do
%{
id: plugin_manager.id
id: data.id,
name: data.name,
description: data.description,
contents: data.contents,
assets_link: data.assets_link,
posted_by: data.posted_by
}
end
end
6 changes: 4 additions & 2 deletions lib/back_web/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ defmodule BackWeb.Router do
get "/automaton/images/:id", AutomatonController, :show_img
get "/automaton/recent/:nb", AutomatonController, :get_recents
get "/automaton_comment/automaton/:id", AutomatonCommentsController, :get_by_automaton
get "/plugin_manager/automaton/:id", PluginManagerController, :show_visuals
get "/plugin_manager/visual/:id", PluginManagerController, :show_automatons

# user
get "/user/pictures", UserController, :index_pic
Expand All @@ -45,8 +47,8 @@ defmodule BackWeb.Router do

resources "/post", PostController, except: [:new, :edit]
resources "/automaton", AutomatonController, except: [:new, :edit, :index]
resources "/visuals", VisualController, except: [:new, :edit, :index]
resources "/plugin_manager", PluginManagerController, except: [:new, :edit, :index]
resources "/visuals", VisualController, except: [:new, :edit]
resources "/plugin_manager", PluginManagerController, except: [:new, :edit, :index, :show]
post "/automaton/image", AutomatonController, :create_image
resources "/comment", CommentController, except: [:new, :edit]
resources "/blocked", BlockedController, except: [:new, :edit]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
defmodule Back.Repo.Migrations.ChangeVisualCascadeDeleteInPluginManager do
use Ecto.Migration

def up do
drop constraint(:plugin_manager, "plugin_manager_visual_fkey")
alter table(:plugin_manager) do
modify :visual, references(:visuals, on_delete: :delete_all, type: :binary_id)
end
end

def down do
drop constraint(:plugin_manager, "plugin_manager_visual_fkey")

alter table(:plugin_manager) do
modify :visual, references(:visuals, on_delete: :restrict, type: :binary_id)
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
defmodule Back.Repo.Migrations.ChangePluginCascadeDeleteInPluginManager do
use Ecto.Migration

def up do
execute "ALTER TABLE plugin_manager DROP CONSTRAINT IF EXISTS plugin_manager_automaton_fkey"

execute """
ALTER TABLE plugin_manager
ADD CONSTRAINT plugin_manager_automaton_fkey
FOREIGN KEY (automaton)
REFERENCES automaton(automaton_id)
ON DELETE CASCADE
"""
end

def down do
execute "ALTER TABLE plugin_manager DROP CONSTRAINT IF EXISTS plugin_manager_automaton_fkey"

execute """
ALTER TABLE plugin_manager
ADD CONSTRAINT plugin_manager_automaton_fkey
FOREIGN KEY (automaton)
REFERENCES automaton(automaton_id)
ON DELETE NO ACTION
"""
end
end
Loading