@@ -9,14 +9,14 @@ defmodule CodeCorpsWeb.ProjectController do
99
1010 @ spec index ( Conn . t , map ) :: Conn . t
1111 def index ( % Conn { } = conn , % { } = params ) do
12- with projects <- Project.Query . list ( params ) do
12+ with projects <- Project.Query . list ( params ) |> preload do
1313 conn |> render ( "index.json-api" , data: projects )
1414 end
1515 end
1616
1717 @ spec show ( Conn . t , map ) :: Conn . t
1818 def show ( % Conn { } = conn , % { } = params ) do
19- with % Project { } = project <- Project.Query . find ( params ) do
19+ with % Project { } = project <- Project.Query . find ( params ) |> preload do
2020 conn |> render ( "show.json-api" , data: project )
2121 end
2222 end
@@ -25,18 +25,32 @@ defmodule CodeCorpsWeb.ProjectController do
2525 def create ( % Conn { } = conn , % { } = params ) do
2626 with % User { } = current_user <- conn |> Guardian.Plug . current_resource ,
2727 { :ok , :authorized } <- current_user |> Policy . authorize ( :create , % Project { } , params ) ,
28- { :ok , % Project { } = project } <- % Project { } |> Project . create_changeset ( params ) |> Repo . insert do
28+ { :ok , % Project { } = project } <- % Project { } |> Project . create_changeset ( params ) |> Repo . insert ,
29+ project <- preload ( project )
30+ do
2931 conn |> put_status ( :created ) |> render ( "show.json-api" , data: project )
3032 end
3133 end
3234
3335 @ spec update ( Conn . t , map ) :: Conn . t
3436 def update ( % Conn { } = conn , % { } = params ) do
3537 with % Project { } = project <- Project.Query . find ( params ) ,
36- % User { } = current_user <- conn |> Guardian.Plug . current_resource ,
37- { :ok , :authorized } <- current_user |> Policy . authorize ( :update , project ) ,
38- { :ok , % Project { } = project } <- project |> Project . changeset ( params ) |> Repo . update do
39- conn |> render ( "show.json-api" , data: project )
38+ % User { } = current_user <- conn |> Guardian.Plug . current_resource ,
39+ { :ok , :authorized } <- current_user |> Policy . authorize ( :update , project ) ,
40+ { :ok , % Project { } = project } <- project |> Project . changeset ( params ) |> Repo . update ,
41+ project <- preload ( project )
42+ do
43+ conn |> render ( "show.json-api" , data: project )
4044 end
4145 end
46+
47+ @ preloads [
48+ :donation_goals , [ organization: :stripe_connect_account ] ,
49+ :project_categories , :project_github_repos , :project_skills ,
50+ :project_users , :stripe_connect_plan , :task_lists , :tasks
51+ ]
52+
53+ def preload ( data ) do
54+ Repo . preload ( data , @ preloads )
55+ end
4256end
0 commit comments