defmodule BboxWeb.Router do
import Plug.Conn
use Plug.Router
use Plug.Debugger
require Logger
alias Bbox.Votes
alias Bbox.Candidates
alias Bbox.Candidates.Candidate
plug(Plug.Logger, log: :debug)
plug(Plug.Static, from: "public/views", at: "/")
plug(:match)
plug(:dispatch)
plug(Plug.Parsers, parsers: [:urlencoded, :json], json_decoder: Jason)
post "/api/votes" do
{:ok, body, conn} = read_body(conn)
%{"candidate_code" => candidate_code} = Jason.decode!(body)
[private_key] = get_req_header(conn, "x-voter-private-key")
IO.inspect(private_key)
with %Candidate{} = candidate <- Candidates.get_by_code!(candidate_code) do
{:ok, vote} = Votes.insert(private_key, candidate)
vote = Jason.encode!(vote)
conn
|> put_resp_header("content-type", "application/json")
|> send_resp(:created, vote)
end
end
get "/api/votes" do
votes = Votes.list!()
votes = Jason.encode!(votes)
conn
|> put_resp_header("content-type", "application/json")
|> send_resp(:ok, votes)
end
get "/api/candidates" do
candidates = Candidates.list!()
candidates = Jason.encode!(candidates)
conn
|> put_resp_header("content-type", "application/json")
|> send_resp(:created, candidates)
end
get "/api/candidates/:code" do
candidate = Candidates.get_by_code!(code)
candidate = Jason.encode!(candidate)
conn
|> put_resp_header("content-type", "application/json")
|> send_resp(:created, candidate)
end
match _ do
send_resp(conn, :not_found, "Not found")
end
end