Skip to content

Commit

Permalink
Clean up event controller for publish api
Browse files Browse the repository at this point in the history
  • Loading branch information
zacksiri committed Jun 24, 2024
1 parent d5bb35b commit 0a1ff0e
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 29 deletions.
6 changes: 6 additions & 0 deletions lib/polar/machines.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,10 @@ defmodule Polar.Machines do
defdelegate create_cluster(params),
to: Cluster.Manager,
as: :create

alias __MODULE__.Assessment

defdelegate create_assessment(version, params),
to: Assessment.Manager,
as: :create
end
6 changes: 4 additions & 2 deletions lib/polar/machines/assessment.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ defmodule Polar.Machines.Assessment do
schema "assessments" do
field :current_state, :string, default: "created"

field :check_slug, :string, virtual: true

belongs_to :check, Check
belongs_to :cluster, Cluster

Expand All @@ -20,7 +22,7 @@ defmodule Polar.Machines.Assessment do
@doc false
def changeset(assessment, attrs) do
assessment
|> cast(attrs, [:current_state])
|> validate_required([:current_state])
|> cast(attrs, [:cluster_id, :check_slug])
|> validate_required([:cluster_id, :check_slug])
end
end
10 changes: 10 additions & 0 deletions lib/polar/machines/assessment/manager.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
defmodule Polar.Machines.Assessment.Manager do
alias Polar.Repo
alias Polar.Machines.Assessment

def create(version, params) do
%Assessment{version_id: version.id}
|> Assessment.changeset(params)
|> Repo.insert()
end
end
40 changes: 40 additions & 0 deletions lib/polar_web/controllers/publish/event_controller.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
defmodule PolarWeb.Publish.EventController do
use PolarWeb, :controller

alias Polar.Repo
alias Polar.Streams.Version

action_fallback PolarWeb.FallbackController

def create(conn, %{
"version_id" => version_id,
"event" => event_params
}) do
with %Version{} = version <- Repo.get(Version, version_id) do
transit_and_render(conn, version, event_params)
end
end

alias Polar.Machines.Assessment

def create(conn, %{
"assessment_id" => assessment_id,
"event" => event_params
}) do
with %Assessment{} = assessment <- Repo.get(Assessment, assessment_id) do
transit_and_render(conn, assessment, event_params)
end
end

defp transit_and_render(
%{assigns: %{current_user: user}} = conn,
resource,
%{"name" => event_name}
) do
with {:ok, %{event: event}} <- Eventful.Transit.perform(resource, user, event_name) do
conn
|> put_status(:created)
|> render(:create, %{event: event})
end
end
end
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
defmodule PolarWeb.Publish.Version.EventJSON do
defmodule PolarWeb.Publish.EventJSON do
def create(%{event: event}) do
%{data: %{id: event.id, name: event.name}}
end
Expand Down
14 changes: 14 additions & 0 deletions lib/polar_web/controllers/publish/testing/assessment_controller.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
defmodule PolarWeb.Publish.Testing.AssessmentController do
use PolarWeb, :controller

alias Polar.Repo
alias Polar.Machines
alias Polar.Streams.Version

def create(conn, %{"version_id" => version_id, "assessment" => assessment_params}) do
with %Version{} = version <- Repo.get(Version, version_id),
{:ok, assessment} <- Machines.create_assessment(version, assessment_params) do
render(conn, :create, %{assessment: assessment})
end
end
end
20 changes: 0 additions & 20 deletions lib/polar_web/controllers/publish/version/event_controller.ex

This file was deleted.

16 changes: 10 additions & 6 deletions lib/polar_web/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -99,18 +99,22 @@ defmodule PolarWeb.Router do
scope "/" do
pipe_through :publish

scope "/testing", Testing, as: :testing do
resources "/clusters", ClusterController, only: [:index]
end

resources "/storage", StorageController, only: [:show], singleton: true

resources "/products", ProductController, only: [:show] do
resources "/versions", VersionController, only: [:create]
end

scope "/versions/:version_id", Version, as: :version do
resources "/events", EventController, only: [:create]
resources "/versions/:version_id/events", EventController, only: [:create]

scope "/testing", as: :testing do
resources "/clusters", Testing.ClusterController, only: [:index]

resources "/assessments/:assessment_id/events", EventController, only: [:create]

scope "/versions/:version_id" do
resources "/assessments", Testing.AssessmentController, only: [:create]
end
end
end
end
Expand Down

0 comments on commit 0a1ff0e

Please sign in to comment.