• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

camatcode / basenji / 06e8d7b557baf37a17f068f3f41ac83b94aab135

05 Jul 2025 03:08AM UTC coverage: 59.566% (-1.9%) from 61.462%
06e8d7b557baf37a17f068f3f41ac83b94aab135

push

github

web-flow
Merge pull request #23 from camatcode/work/json_api_comics

feat(comics): using plug for json_api

37 of 53 new or added lines in 7 files covered. (69.81%)

302 of 507 relevant lines covered (59.57%)

279.81 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

46.15
/lib/basenji_web/controllers/api/json_api/comics_controller.ex
1
defmodule BasenjiWeb.JSONAPI.ComicsController do
2
  @moduledoc false
3
  use BasenjiWeb, :controller
4

5
  alias Basenji.Comics
6
  alias BasenjiWeb.API.Utils
7
  alias BasenjiWeb.Plugs.JSONAPIPlug
8

9
  plug JSONAPIPlug, api: BasenjiWeb.API, path: "comics", resource: Basenji.Comic
10

11
  def index(%{private: %{jsonapi_plug: jsonapi_plug}} = conn, _params) do
12
    comics = Comics.list_comics(Utils.to_opts(jsonapi_plug))
65✔
13
    render(conn, "index.json", %{data: comics})
65✔
14
  end
15

16
  def create(conn, params) do
17
    # validate params!
18
    attrs = params["data"]["attributes"] |> Utils.atomize()
1✔
19

20
    Comics.from_resource(params["data"]["attributes"]["resource_location"], attrs)
21
    |> case do
1✔
22
      {:ok, comic} -> render(conn, "create.json", %{data: comic})
1✔
23
      error -> Utils.bad_request_handler(conn, error)
×
24
    end
25
  end
26

27
  def show(%{private: %{jsonapi_plug: %{} = jsonapi_plug}} = conn, params) do
28
    Comics.get_comic(params["id"], Utils.to_opts(jsonapi_plug))
29
    |> case do
1✔
30
      {:ok, comic} ->
31
        render(conn, "create.json", %{data: comic})
1✔
32

33
      _ ->
NEW
34
        Utils.bad_request_handler(conn, {:error, :not_found})
×
35
    end
36
  end
37

38
  def update(conn, params) do
39
    id = params["id"]
1✔
40

41
    Comics.update_comic(id, params["data"]["attributes"])
42
    |> case do
1✔
43
      {:ok, comic} -> render(conn, "update.json", %{data: comic})
1✔
NEW
44
      e -> Utils.bad_request_handler(conn, e)
×
45
    end
46
  end
47

48
  def delete(conn, params) do
49
    {:ok, deleted} = Comics.delete_comic(params["id"])
1✔
50
    render(conn, "show.json", %{data: deleted})
1✔
51
  end
52

53
  def get_page(conn, params) do
54
    id = params["id"]
×
55
    page = params["page"]
×
56

57
    with {:ok, page_num} <- Utils.safe_to_int(page),
×
58
         {:ok, page_stream, mime} <- Comics.get_page(id, page_num) do
×
59
      binary = page_stream |> Enum.to_list()
×
60
      {:ok, binary, mime}
×
61
    end
62
    |> case do
×
63
      {:ok, binary, mime} ->
64
        length = Enum.count(binary)
×
65

66
        conn
67
        |> merge_resp_headers([{"access-control-allow-origin", "*"}])
68
        |> merge_resp_headers([{"content-type", mime}])
69
        |> merge_resp_headers([{"content-length", "#{length}"}])
×
70
        |> merge_resp_headers([{"content-disposition", "attachment"}])
71
        |> send_resp(200, binary)
×
72

73
      error ->
74
        Utils.bad_request_handler(conn, error)
×
75
    end
76
  end
77
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc