Skip to content

Instantly share code, notes, and snippets.

@acrolink
Last active November 28, 2021 12:16
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save acrolink/b5c58a832ed25b9ea50b01660e5c1910 to your computer and use it in GitHub Desktop.
/libsys/backend/mango_web/controllers/borrower_controller.ex [Elixir]
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
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)
end
end
def show(conn, %{"id" => code}, claims) do
data = Borrowers.get_borrower_with_records(code, claims.institute_id)
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
@acrolink
Copy link
Author

Mango in MangoWeb is the internal codename for LibSYS :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment