Skip to content

Instantly share code, notes, and snippets.

@acrolink
Last active November 28, 2021 12:16
Show Gist options
  • Select an option

  • Save acrolink/b5c58a832ed25b9ea50b01660e5c1910 to your computer and use it in GitHub Desktop.

Select an option

Save acrolink/b5c58a832ed25b9ea50b01660e5c1910 to your computer and use it in GitHub Desktop.

Revisions

  1. acrolink revised this gist Nov 28, 2021. 1 changed file with 1 addition and 7 deletions.
    8 changes: 1 addition & 7 deletions borrower_controller.ex
    Original file line number Diff line number Diff line change
    @@ -19,8 +19,7 @@ defmodule MangoWeb.BorrowerController do
    end

    def index(conn, _params, claims) do
    # borrowers = Borrowers.list_borrowers()
    # render(conn, "index.json", borrowers: borrowers)

    IO.puts("borrowers..")

    borrowers =
    @@ -67,16 +66,11 @@ defmodule MangoWeb.BorrowerController do
    with {:ok, borrower} <-
    Borrowers.create_borrower(borrower_params |> Helpers.inject_user_object(user)) do
    Helpers.pretty_json(conn, borrower)
    # conn
    # |> put_status(:created)
    # |> put_resp_header("location", borrower_path(conn, :show, borrower))
    # |> render("show.json", borrower: borrower)
    end
    end

    def show(conn, %{"id" => code}, claims) do
    data = Borrowers.get_borrower_with_records(code, claims.institute_id)
    # render(conn, "show.json", borrower: borrower)
    IO.inspect(data)
    Helpers.pretty_json(conn, data)
    end
  2. acrolink created this gist Nov 28, 2021.
    104 changes: 104 additions & 0 deletions borrower_controller.ex
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,104 @@
    defmodule MangoWeb.BorrowerController do
    use MangoWeb, :controller
    use MangoWeb.ExtendController

    alias Mango.Borrowers
    alias Mango.Borrowers.Borrower

    alias Mango.Repo

    import Ecto.Query
    alias MangoWeb.Helpers

    action_fallback(MangoWeb.FallbackController)

    def autocomplete(conn, %{"query" => query} = params, claims) do
    borrowers = Repo.all(from(b in Borrower, where: ilike(b.name, ^"%#{query}%"), limit: 10))
    IO.inspect(borrowers)
    Helpers.pretty_json(conn, borrowers)
    end

    def index(conn, _params, claims) do
    # borrowers = Borrowers.list_borrowers()
    # render(conn, "index.json", borrowers: borrowers)
    IO.puts("borrowers..")

    borrowers =
    Borrower
    |> join(
    :left,
    [borrower, record, book],
    record in Mango.Records.Record,
    borrower.id == record.borrower_id
    )
    |> join(
    :left,
    [borrower, record, book],
    book in Mango.Books.Book,
    record.id == book.record_id
    )
    |> select([borrower, record, book], %{
    address: borrower.address,
    code: borrower.code,
    date_of_birth: borrower.date_of_birth,
    id: borrower.id,
    inserted_at: borrower.inserted_at,
    name: borrower.name,
    phone: borrower.phone,
    books_on_rental:
    fragment(
    "SUM(CASE WHEN ? = 0 AND ? = ? THEN 1 ELSE 0 END)",
    book.status,
    record.borrower_id,
    borrower.id
    )
    })
    |> group_by([borrower, record, book], borrower.id)
    |> MangoWeb.Filters.Borrowers.restrict_by_user_id(claims)
    |> MangoWeb.Filters.Borrowers.build_query(conn, _params)
    |> Repo.paginate(page: _params["page"], page_size: _params["per_page"])

    IO.inspect(borrowers)
    Helpers.pretty_json(conn, %{borrowers: borrowers})
    end

    # needs modification to retun error
    def create(conn, %{"borrower" => borrower_params}, user) do
    with {:ok, borrower} <-
    Borrowers.create_borrower(borrower_params |> Helpers.inject_user_object(user)) do
    Helpers.pretty_json(conn, borrower)
    # conn
    # |> put_status(:created)
    # |> put_resp_header("location", borrower_path(conn, :show, borrower))
    # |> render("show.json", borrower: borrower)
    end
    end

    def show(conn, %{"id" => code}, claims) do
    data = Borrowers.get_borrower_with_records(code, claims.institute_id)
    # render(conn, "show.json", borrower: borrower)
    IO.inspect(data)
    Helpers.pretty_json(conn, data)
    end

    def update(conn, %{"id" => id, "borrower" => borrower_params}, user) do
    borrower = Borrowers.get_borrower!(id)

    with {:ok, %Borrower{} = borrower} <- Borrowers.update_borrower(borrower, borrower_params) do
    render(conn, "show.json", borrower: borrower)
    end
    end

    def delete(conn, %{"id" => id}, user) do
    borrower = Borrowers.get_borrower!(id)

    with {:ok, %Borrower{}} <- Borrowers.delete_borrower(borrower) do
    send_resp(conn, :no_content, "")
    end
    end

    def filter_objects(conn, _params, user) do
    borrowers = Borrower |> Repo.all()
    Helpers.pretty_json(conn, %{borrowers: borrowers})
    end
    end