Skip to content

Commit b39ad61

Browse files
committed
Added swagger paths
1 parent e3eddd6 commit b39ad61

File tree

4 files changed

+101
-30
lines changed

4 files changed

+101
-30
lines changed

lib/cadet/assessments/assessments.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ defmodule Cadet.Assessments do
4242
{:error, {:bad_request, "New Opening date should occur after current time"}}
4343

4444
true ->
45-
{:error, {:forbidden, "Assessment is already opened"}}
45+
{:error, {:unauthorized, "Assessment is already opened"}}
4646
end
4747
else
4848
{:error, {:forbidden, "User is not permitted to edit"}}

lib/cadet/jobs/xml_parser.ex

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,33 +102,33 @@ defmodule Cadet.Updater.XMLParser do
102102

103103
{:error, stage, changeset, _} when is_atom(stage) ->
104104
log_error_bad_changeset(changeset, stage)
105-
changeset_error =
105+
changeset_error =
106106
changeset
107107
|> Map.get(:errors)
108108
|> extract_changeset_error_message
109-
error_message = "Invalid #{stage} changeset " <> changeset_error
109+
error_message = "Invalid #{stage} changeset #{changeset_error}"
110110
log_and_return_badrequest(error_message)
111111
end
112112
catch
113113
# the :erlsom library used by SweetXml will exit if XML is invalid
114114
:exit, parse_error ->
115-
error_message =
115+
error_message =
116116
parse_error
117117
|> nested_tuple_to_list()
118118
|> List.flatten()
119-
|> Enum.reduce("", fn x, acc -> acc <> to_string(x) <> " " end)
120-
{:error, {:bad_request, "Invalid XML " <> error_message}}
119+
|> Enum.reduce("", fn x, acc -> "#{acc <> to_string(x)} " end)
120+
{:error, {:bad_request, "Invalid XML #{error_message}"}}
121121
end
122122

123123
defp extract_changeset_error_message(errors_list) do
124124
errors_list
125-
|> Enum.map(fn {field, {error, _}} -> to_string(field) <> " " <> error end)
126-
|> List.foldr("", fn x, acc -> acc <> x <> " " end)
125+
|> Enum.map(fn {field, {error, _}} -> "#{to_string(field)} #{error}" end)
126+
|> List.foldr("", fn x, acc -> "#{acc <> x} " end)
127127
end
128128

129129
@spec process_assessment(String.t()) :: {:ok, map()} | {:error, String.t}
130130
defp process_assessment(xml) do
131-
open_at =
131+
open_at =
132132
Timex.now()
133133
|> Timex.beginning_of_day()
134134
|> Timex.shift(days: 3)
@@ -164,7 +164,7 @@ defmodule Cadet.Updater.XMLParser do
164164
end
165165

166166
{:ok, assessment_params}
167-
167+
168168
rescue
169169
# This error is raised by xpath/3 when TASK does not exist (hence is equal to nil)
170170
Protocol.UndefinedError ->
@@ -213,7 +213,7 @@ defmodule Cadet.Updater.XMLParser do
213213
else
214214
{:no_missing_attr?, false} ->
215215
{:error, "Missing attribute(s) on PROBLEM"}
216-
216+
217217
{:error, errmsg} ->
218218
{:error, errmsg}
219219
end

lib/cadet_web/controllers/assessments_controller.ex

Lines changed: 89 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ defmodule CadetWeb.AssessmentsController do
3535
end
3636
end
3737

38-
def update(conn, %{"id" => id, "togglePublishTo" => toggle_publish_to}) do
38+
def publish(conn, %{"id" => id, "togglePublishTo" => toggle_publish_to}) do
3939
result = Assessments.toggle_publish_assessment(conn.assigns.current_user, id, toggle_publish_to)
4040

4141
case result do
@@ -80,27 +80,32 @@ defmodule CadetWeb.AssessmentsController do
8080
end
8181

8282
def create(conn, %{"assessment" => assessment, "forceUpdate" => force_update}) do
83-
file = assessment["file"].path
83+
role = conn.assigns[:current_user].role
84+
if role == :student do
85+
send_resp(conn, :forbidden, "User not allowed to create")
86+
else
87+
file = assessment["file"].path
8488
|> File.read!()
85-
result =
86-
case force_update do
87-
"true" -> parse_xml(file, true)
88-
"false" -> parse_xml(file, false)
89-
end
90-
91-
case result do
92-
:ok ->
93-
if (force_update == "true") do
94-
send_resp(conn, 200, "Force Update OK")
95-
else
96-
send_resp(conn, 200, "OK")
89+
result =
90+
case force_update do
91+
"true" -> parse_xml(file, true)
92+
"false" -> parse_xml(file, false)
9793
end
9894

99-
{:ok, warning_message} ->
100-
send_resp(conn, 200, warning_message)
95+
case result do
96+
:ok ->
97+
if (force_update == "true") do
98+
send_resp(conn, 200, "Force Update OK")
99+
else
100+
send_resp(conn, 200, "OK")
101+
end
101102

102-
{:error, {status, message}} ->
103-
send_resp(conn, status, message)
103+
{:ok, warning_message} ->
104+
send_resp(conn, 200, warning_message)
105+
106+
{:error, {status, message}} ->
107+
send_resp(conn, status, message)
108+
end
104109
end
105110
end
106111

@@ -153,6 +158,72 @@ defmodule CadetWeb.AssessmentsController do
153158
response(403, "Password incorrect")
154159
end
155160

161+
swagger_path :create do
162+
post("/assessments")
163+
164+
summary("Creates a new assessment or updates an existing assessment")
165+
166+
security([%{JWT: []}])
167+
168+
parameters do
169+
assessment(:body, :file, "assessment to create or update", required: true)
170+
forceUpdate(:body, :boolean, "force update", required: true)
171+
end
172+
173+
response(200, "OK")
174+
response(400, "XML parse error")
175+
response(403, "User not allowed to create")
176+
end
177+
178+
swagger_path :delete do
179+
PhoenixSwagger.Path.delete("/assessments/:id")
180+
181+
summary("Deletes an assessment")
182+
183+
security([%{JWT: []}])
184+
185+
parameters do
186+
assessmentId(:path, :integer, "assessment id", required: true)
187+
end
188+
189+
response(200, "OK")
190+
response(403, "User is not permitted to delete")
191+
end
192+
193+
swagger_path :publish do
194+
post("/assessments/publish/:id")
195+
196+
summary("Toggles an assessment between published and unpublished")
197+
198+
security([%{JWT: []}])
199+
200+
parameters do
201+
assessmentId(:path, :integer, "assessment id", required: true)
202+
togglePublishTo(:body, :boolean, "toggles assessment publish state", required: true)
203+
end
204+
205+
response(200, "OK")
206+
response(403, "User is not permitted to publish")
207+
end
208+
209+
swagger_path :update do
210+
post("/assessments/update/:id")
211+
212+
summary("Changes the open/close date of an assessment")
213+
214+
security([%{JWT: []}])
215+
216+
parameters do
217+
assessmentId(:path, :integer, "assessment id", required: true)
218+
closeAt(:body, :string, "open date", required: true)
219+
openAt(:body, :string, "close date", required: true)
220+
end
221+
222+
response(200, "OK")
223+
response(401, "Assessment is already opened")
224+
response(403, "User is not permitted to edit")
225+
end
226+
156227
def swagger_definitions do
157228
%{
158229
AssessmentsList:

lib/cadet_web/router.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ defmodule CadetWeb.Router do
4040
post("/assessments", AssessmentsController, :create)
4141
delete("/assessments/:id", AssessmentsController, :delete)
4242
post("/assessments/:id", AssessmentsController, :show)
43-
post("/assessments/publish/:id", AssessmentsController, :update)
43+
post("/assessments/publish/:id", AssessmentsController, :publish)
4444
post("/assessments/update/:id", AssessmentsController, :update)
4545
post("/assessments/:assessmentid/submit", AssessmentsController, :submit)
4646
post("/assessments/question/:questionid/submit", AnswerController, :submit)

0 commit comments

Comments
 (0)