diff --git a/lib/polar_web/controllers/publish/version_controller.ex b/lib/polar_web/controllers/publish/version_controller.ex index 69cafe2..59f5ca6 100644 --- a/lib/polar_web/controllers/publish/version_controller.ex +++ b/lib/polar_web/controllers/publish/version_controller.ex @@ -4,9 +4,18 @@ defmodule PolarWeb.Publish.VersionController do alias Polar.Repo alias Polar.Streams alias Polar.Streams.Product + alias Polar.Streams.Version action_fallback PolarWeb.FallbackController + def show(conn, %{"product_id" => product_id, "id" => serial}) do + version = Repo.get_by(Version, product_id: product_id, serial: serial) + + if version do + render(conn, :show, %{version: version}) + end + end + def create(conn, %{"product_id" => product_id, "version" => version_params}) do product = Repo.get(Product, product_id) diff --git a/lib/polar_web/controllers/publish/version_json.ex b/lib/polar_web/controllers/publish/version_json.ex index 73b07fc..937c014 100644 --- a/lib/polar_web/controllers/publish/version_json.ex +++ b/lib/polar_web/controllers/publish/version_json.ex @@ -1,4 +1,8 @@ defmodule PolarWeb.Publish.VersionJSON do + def show(%{version: version}) do + %{data: %{id: version.id}} + end + def create(%{version: version}) do %{data: %{id: version.id}} end diff --git a/lib/polar_web/router.ex b/lib/polar_web/router.ex index 81ce85f..72e710b 100644 --- a/lib/polar_web/router.ex +++ b/lib/polar_web/router.ex @@ -102,7 +102,7 @@ defmodule PolarWeb.Router do resources "/storage", StorageController, only: [:show], singleton: true resources "/products", ProductController, only: [:show] do - resources "/versions", VersionController, only: [:create] + resources "/versions", VersionController, only: [:show, :create] end resources "/versions/:version_id/events", EventController, only: [:create] diff --git a/test/polar_web/controllers/publish/version_controller_test.exs b/test/polar_web/controllers/publish/version_controller_test.exs index dbb237a..f598d12 100644 --- a/test/polar_web/controllers/publish/version_controller_test.exs +++ b/test/polar_web/controllers/publish/version_controller_test.exs @@ -7,6 +7,8 @@ defmodule PolarWeb.Publish.VersionControllerTest do alias Polar.Accounts alias Polar.Streams + import Polar.StreamsFixtures + setup do password = Accounts.generate_automation_password() @@ -25,6 +27,27 @@ defmodule PolarWeb.Publish.VersionControllerTest do {:ok, conn: conn} end + describe "GET /publish/products/:product_id/versions/:id" do + setup do + product_attributes = valid_product_attributes("alpine:3.19:amd64:default") + + {:ok, product} = Streams.create_product(product_attributes) + + {:ok, version} = + Streams.create_version(product, valid_version_attributes(2)) + + {:ok, product: product, version: version} + end + + test "can fetch existing version", %{conn: conn, product: product, version: version} do + conn = get(conn, "/publish/products/#{product.id}/versions/#{version.serial}") + + assert %{"data" => data} = json_response(conn, 200) + + assert %{"id" => _id} = data + end + end + describe "POST /publish/products/:product_id/versions" do setup do product_attributes = valid_product_attributes("alpine:3.19:amd64:default")