Skip to content

Commit

Permalink
feature/campi controller (#29)
Browse files Browse the repository at this point in the history
* chore: add delete function to db context

* fix: API keys seeds module name

* feat: Campus Controller

- Criaçao da rota
- Criaçao do controller
- Criaçao da documentaçao
  • Loading branch information
larisard committed Feb 16, 2022
1 parent a308f69 commit e53c76d
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 3 deletions.
2 changes: 1 addition & 1 deletion config/dev.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Config
config :fuschia, Fuschia.Repo,
username: "pescarte",
password: "pescarte",
database: "pescarte",
database: "fuschia_dev",
hostname: "db",
show_sensitive_data_on_connection_error: true,
pool_size: 10
Expand Down
3 changes: 3 additions & 0 deletions lib/fuschia/db.ex
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ defmodule Fuschia.Db do
|> Repo.update()
end

@spec delete(struct | changeset, keyword) :: {:ok, struct} | {:error, changeset}
defdelegate delete(struct, opts \\ []), to: Repo, as: :delete

@spec preload_all(query, relationships) :: query
def preload_all(%Ecto.Query{} = query, args) do
require Ecto.Query
Expand Down
68 changes: 68 additions & 0 deletions lib/fuschia_web/controllers/campus_controller.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
defmodule FuschiaWeb.CampusController do
@moduledoc false

use FuschiaWeb, :controller
use OpenApiSpex.ControllerSpecs

alias Fuschia.Db
alias Fuschia.Entities.Campus
alias Fuschia.Queries.Campi
alias FuschiaWeb.Swagger.{CampusSchemas, Response, Security}
alias OpenApiSpex.Schema

action_fallback FuschiaWeb.FallbackController

tags(["campi"])
security(Security.private())

operation(:create,
request_body:
{"Atributos de criação", "application/json", CampusSchemas.CreateRequest, required: true},
responses:
[created: {"Resposta de sucesso", "application/json", CampusSchemas.Campus}] ++
Response.errors(:unauthorized)
)

@spec create(Plug.Conn.t(), map) :: Plug.Conn.t()
def create(conn, %{"campus" => campus_attr}) do
with {:ok, campus} <- Db.create(Campus, campus_attr) do
render_response(campus, conn, :created)
end
end

operation(:index,
responses:
[ok: {"Resposta de sucesso", "application/json", CampusSchemas.AllCampiResponse}] ++
Response.errors(:unauthorized)
)

@spec index(Plug.Conn.t(), map) :: Plug.Conn.t()
def index(conn, _params) do
Campi.query()
|> Db.list()
|> render_response(conn)
end

operation(:delete,
parameters: [
id: [
in: :path,
type: %Schema{type: :string, minimum: 1},
description: "ID do Campus",
example: "1111111",
required: true
]
],
responses:
[ok: {"Resposta de sucesso", "application/json", CampusSchemas.Campus}] ++
Response.errors(:unauthorized)
)

@spec delete(Plug.Conn.t(), map) :: Plug.Conn.t()
def delete(conn, %{"campus_id" => campus_id}) do
with %Campus{} = campus <- Db.get(Campi.query(), campus_id),
{:ok, _campus} <- Db.delete(campus) do
render_response(campus, conn)
end
end
end
4 changes: 3 additions & 1 deletion lib/fuschia_web/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ defmodule FuschiaWeb.Router do
end

scope "/api", FuschiaWeb do
pipe_through [:api, :auth]
pipe_through [:auth, :api]

resources "/campi", CampusController, only: [:create, :index, :delete]
end
end
59 changes: 59 additions & 0 deletions lib/fuschia_web/swagger/schemas/campi.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
defmodule FuschiaWeb.Swagger.CampusSchemas do
@moduledoc false

require OpenApiSpex

alias OpenApiSpex.Schema

defmodule CreateRequest do
@moduledoc false

OpenApiSpex.schema(%{
description: "Criação do Campus",
type: :object,
properties: %{
nome: %Schema{type: :string, description: "Campus name", required: true}
},
example: %{
"nome" => "Campos dos Goytacazes"
}
})
end

defmodule AllCampiResponse do
@moduledoc false

OpenApiSpex.schema(%{
description: "Listagem de Campi",
type: :object,
properties: %{
data: %Schema{description: "Campi", type: :array, items: Campus}
},
example: %{
"data" => [
%{
"nome" => "Campos dos Goytacazes",
"id_externo" => "1111111"
}
]
}
})
end

defmodule Campus do
@moduledoc false

OpenApiSpex.schema(%{
description: "Campus info",
type: :object,
properties: %{
nome: %Schema{type: :string, description: "Campus name"},
id_externo: %Schema{type: :string, description: "Campus id"}
},
example: %{
"nome" => "Campos dos Goytacazes",
"id_externo" => "1111111"
}
})
end
end
2 changes: 1 addition & 1 deletion lib/seeds/dev/api_keys_seeds.ex
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
defmodule Fuschia.ApiKeyDevSeeds do
defmodule Fuschia.ApiKeysDevSeeds do
@moduledoc false

alias Fuschia.Entities.ApiKey
Expand Down

0 comments on commit e53c76d

Please sign in to comment.