From b4abb8e988473b0298eaa8a40f4e969381b333b5 Mon Sep 17 00:00:00 2001 From: Udi h Bauman Date: Thu, 26 Oct 2017 06:35:37 -0400 Subject: [PATCH 1/3] added endpoint to return buildings in given floor --- .../controllers/building_controller.ex | 15 +++++++++++++-- building_server/lib/building_server_web/router.ex | 2 ++ .../building_server_web/views/building_view.ex | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/building_server/lib/building_server_web/controllers/building_controller.ex b/building_server/lib/building_server_web/controllers/building_controller.ex index f3ce74b..ee80efc 100644 --- a/building_server/lib/building_server_web/controllers/building_controller.ex +++ b/building_server/lib/building_server_web/controllers/building_controller.ex @@ -1,9 +1,20 @@ defmodule BuildingServerWeb.BuildingController do use BuildingServerWeb, :controller - alias BuildingServer.{Repo, Building} + alias BuildingServer.Repo + import Ecto.Query, only: [from: 2] def index(conn, _params) do - buildings = Repo.all(Building) + query = from bldg in "buildings", + where: bldg.x >= 0 + buildings = Repo.all(query) render conn, "index.json", buildings: buildings end + + def buildings_in_address(conn, %{"address" => address}) do + query = from bldg in "buildings", + where: bldg.flr == ^address + buildings = Repo.all(query) + render conn, "index.json", buildings: buildings + end + end diff --git a/building_server/lib/building_server_web/router.ex b/building_server/lib/building_server_web/router.ex index 12cffd3..0d54804 100644 --- a/building_server/lib/building_server_web/router.ex +++ b/building_server/lib/building_server_web/router.ex @@ -23,5 +23,7 @@ defmodule BuildingServerWeb.Router do pipe_through :api get "/buildings", BuildingController, :index + get "/buildings/in/:address", BuildingController, :buildings_in_address + end end diff --git a/building_server/lib/building_server_web/views/building_view.ex b/building_server/lib/building_server_web/views/building_view.ex index 49e3cc0..695ab7a 100644 --- a/building_server/lib/building_server_web/views/building_view.ex +++ b/building_server/lib/building_server_web/views/building_view.ex @@ -3,7 +3,8 @@ defmodule BuildingServerWeb.BuildingView do def render("index.json", %{buildings: buildings}) do %{ - buildings: Enum.map(buildings, &building_json/1) + count: Enum.count(buildings), + buildings: buildings } end From 206c061ccdce07369d3a60618c5f454190a29e07 Mon Sep 17 00:00:00 2001 From: Udi h Bauman Date: Mon, 6 Nov 2017 06:00:36 -0500 Subject: [PATCH 2/3] added endpoints for getting a building and all buildings at some floor --- .../controllers/building_controller.ex | 9 ++++++++- building_server/lib/building_server_web/router.ex | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/building_server/lib/building_server_web/controllers/building_controller.ex b/building_server/lib/building_server_web/controllers/building_controller.ex index ee80efc..45d690d 100644 --- a/building_server/lib/building_server_web/controllers/building_controller.ex +++ b/building_server/lib/building_server_web/controllers/building_controller.ex @@ -10,7 +10,14 @@ defmodule BuildingServerWeb.BuildingController do render conn, "index.json", buildings: buildings end - def buildings_in_address(conn, %{"address" => address}) do + def get_building(conn, %{"address" => address}) do + query = from bldg in "buildings", + where: bldg.address == ^address + buildings = Repo.all(query) + render conn, "index.json", buildings: buildings + end + + def get_buildings_in_address(conn, %{"address" => address}) do query = from bldg in "buildings", where: bldg.flr == ^address buildings = Repo.all(query) diff --git a/building_server/lib/building_server_web/router.ex b/building_server/lib/building_server_web/router.ex index 0d54804..58e3a83 100644 --- a/building_server/lib/building_server_web/router.ex +++ b/building_server/lib/building_server_web/router.ex @@ -23,7 +23,8 @@ defmodule BuildingServerWeb.Router do pipe_through :api get "/buildings", BuildingController, :index - get "/buildings/in/:address", BuildingController, :buildings_in_address + get "/buildings/:address", BuildingController, :get_building + get "/buildings/in/:address", BuildingController, :get_buildings_in_address end end From eb1caab6cd0e05060880d3113590b89944bb4cb4 Mon Sep 17 00:00:00 2001 From: Udi h Bauman Date: Sun, 26 Nov 2017 22:18:31 -0500 Subject: [PATCH 3/3] buildings endpoint --- .../building_server_web/controllers/building_controller.ex | 6 +++--- .../lib/building_server_web/views/building_view.ex | 7 ++----- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/building_server/lib/building_server_web/controllers/building_controller.ex b/building_server/lib/building_server_web/controllers/building_controller.ex index 45d690d..42f6643 100644 --- a/building_server/lib/building_server_web/controllers/building_controller.ex +++ b/building_server/lib/building_server_web/controllers/building_controller.ex @@ -7,21 +7,21 @@ defmodule BuildingServerWeb.BuildingController do query = from bldg in "buildings", where: bldg.x >= 0 buildings = Repo.all(query) - render conn, "index.json", buildings: buildings + render conn, "buildings.json", buildings: buildings end def get_building(conn, %{"address" => address}) do query = from bldg in "buildings", where: bldg.address == ^address buildings = Repo.all(query) - render conn, "index.json", buildings: buildings + render conn, "buildings.json", buildings: buildings end def get_buildings_in_address(conn, %{"address" => address}) do query = from bldg in "buildings", where: bldg.flr == ^address buildings = Repo.all(query) - render conn, "index.json", buildings: buildings + render conn, "buildings.json", buildings: buildings end end diff --git a/building_server/lib/building_server_web/views/building_view.ex b/building_server/lib/building_server_web/views/building_view.ex index 695ab7a..1638e49 100644 --- a/building_server/lib/building_server_web/views/building_view.ex +++ b/building_server/lib/building_server_web/views/building_view.ex @@ -1,11 +1,8 @@ defmodule BuildingServerWeb.BuildingView do use BuildingServerWeb, :view - def render("index.json", %{buildings: buildings}) do - %{ - count: Enum.count(buildings), - buildings: buildings - } + def render("buildings.json", %{buildings: buildings}) do + buildings end def building_json(building) do