Semana NLW, criando aplicação backend com Elixir e GraphQL, cadastro de usuário e treinos, banco dados Postgres
https://elixir-lang.org/install.html
https://hexdocs.pm/phoenix/installation.html#phoenix
https://www.notion.so/Material-para-as-aulas-d12a95bc5c8c489e8299148fccab34e8
$ mix phx.new wabanex --no-html --no-webpack
- ElixirLS: Elixir support and debugger
$ mix ecto.setup
Criando modulo para calcular IMC
-> Criar arquivo em /lib/wabanex/imc.ex
$ iex -S mix
iex(4)> File.read("students.csv")
$ mix phx.server
-> /lib/wabanex_web/views/routes.ex
get("/", IMCController, :index)
> /lib/wabanex_web/controller/imc_controller.ex
$ mix ecto.gen.migration create_users_table
$ mix ecto.migrate
-> configurar o arquivo
-> /wabanex/config/config.exs
config :wabanex,
ecto_repos: [Wabanex.Repo]
config :wabanex, Wabanex.Repo,
migration_primary_key: [type: :binary_id],
migration_foreign_key: [type: :binary_id]
$ mix ecto.reset
-> /lib/wabanex/user.ex
$ h Ecto.Changeset.cast
- https://whimsical.com/wabanex-nlw-together-HX8K2N8J2cafinMFnRWQ6J
- https://github.com/rocketseat-education/nlw-06-elixir/tree/3-day
- https://github.com/absinthe-graphql/absinthe/wiki/Scalar-Recipes
- https://github.com/absinthe-graphql/absinthe
- https://github.com/absinthe-graphql/absinthe/wiki/Scalar-Recipes
-> Adicionar libs
-> /wabanex/mix.exs
defp deps do [
...,
{:absinthe, "~> 1.5.0"},
{:absinthe_plug, "~> 1.5"}
]
end
-> no terminal
$ mix deps.get
-> Adicionar routes.ex
scope "/api" do
pipe_through(:api)
forward("/graphql", Absinthe.Plug, schema: WabanexWeb.Schema)
forward("/graphiql", Absinthe.Plug.GraphiQL, schema: WabanexWeb.Schema)
end
Criar arquivo
-> /wabanex/lib/wabanex_web/schema/types/user.ex
Criar arquivo
-> /wabanex/lib/wabanex_web/schema/types/root.ex
Criar arquivo
-> /wabanex/lib/wabanex_web/resolvers/user.ex
Criar arquivo
-> /wabanex/lib/wabanex_web/schema.ex
iex(1)> Wabanex.Repo.all(Wabanex.User)
http://localhost:4000/api/graphiql
{
getUser(id: "5e7def56-71ca-406b-96fd-accaed9ccdc8"){
email,
name
}
}
mutation {
createUser(input: {name: "Maria", email: "maria@email.com", password: "teste123"}){
id,
name
}
}
$ mix ecto.gen.migration create_trainings_table
$ mix ecto.gen.migration create_exercises_table
$ mix ecto.migrate
iex -S mix
iex(8)> alias Wabanex.Repo
iex(8)> alias Wabanex.User
iex(8)> User |> Repo.all() |> Repo.preload([:trainings])
iex(8)> User |> Repo.all() |> Repo.preload([trainings: [:exercises]])
{
getUser(
id: "9af1a965-3d78-4b5a-84bd-9fd732bf05bb"){
id,
name,
email,
trainings{
id,
startDate,
endDate,
exercises{
name,
repetitions
}
}
}
}
-> Criar aquivo
->/test/wabanex/imc_test.exs
Executando teste no terminal no diretório da aplicação
$ mix test
$ mix phx.routes
mix test --cover