diff --git a/services/app/apps/codebattle/lib/codebattle_web/controllers/ext_api/task_controller.ex b/services/app/apps/codebattle/lib/codebattle_web/controllers/ext_api/task_controller.ex new file mode 100644 index 000000000..4809fc754 --- /dev/null +++ b/services/app/apps/codebattle/lib/codebattle_web/controllers/ext_api/task_controller.ex @@ -0,0 +1,24 @@ +defmodule CodebattleWeb.ExtApi.TaskController do + use CodebattleWeb, :controller + + import Plug.Conn + + plug(CodebattleWeb.Plugs.TokenAuth) + + def create(conn, params) do + params = for {k, v} <- params, into: %{}, do: {String.to_atom(k), v} + + case Codebattle.Task.changeset(%Codebattle.Task{}, params) do + %{valid?: true} -> + Codebattle.Task.upsert!(params) + send_resp(conn, 201, "") + + %{valid?: false, errors: errors} -> + errors = Map.new(errors, fn {k, {v, _}} -> {k, v} end) + + conn + |> put_status(:bad_request) + |> json(%{errors: errors}) + end + end +end diff --git a/services/app/apps/codebattle/lib/codebattle_web/router.ex b/services/app/apps/codebattle/lib/codebattle_web/router.ex index 979010d43..d80487c7b 100644 --- a/services/app/apps/codebattle/lib/codebattle_web/router.ex +++ b/services/app/apps/codebattle/lib/codebattle_web/router.ex @@ -70,6 +70,7 @@ defmodule CodebattleWeb.Router do scope "/ext_api", CodebattleWeb.ExtApi, as: :ext_api do pipe_through([:ext_api]) post("/users", UserController, :create) + post("/tasks", TaskController, :create) end scope "/", CodebattleWeb do