Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. defmodule Petshopcloud.RegistrationController do
  2. use Petshopcloud.Web, :controller
  3. import Petshopcloud.Cadastrable.Person
  4.  
  5. def create(conn, %{"data" => %{"type" => "users",
  6. "attributes" => %{"name" => name,
  7. "email" => email,
  8. "password" => password,
  9. "password-confirmation" => password_confirmation}}}) do
  10.  
  11. changeset = User.changeset %User{}, %{name: name, email: email,
  12. password_confirmation: password_confirmation,
  13. password: password}
  14.  
  15. case Repo.transaction fn ->
  16. # adiciona o usuário
  17. user = changeset
  18. |> Repo.insert!
  19.  
  20. # adiciona o petshop com o usuário criado
  21. petshop = build_assoc(user, :owned_petshop, %{})
  22. |> Repo.insert!
  23.  
  24. # adiciona admin aos membros
  25. build_assoc(petshop, :petshop_members, %{user_id: user.id, petshop_id: petshop.id})
  26. |> Repo.insert!
  27.  
  28. # cria company padrão para o petshop
  29. company = build_assoc(petshop, :companies, %{empresa_padrao: true})
  30. |> Repo.insert!
  31.  
  32. # adiciona company às empresas membros
  33. build_assoc(company, :company_members, %{user_id: user.id, company_id: company.id})
  34. |> Repo.insert!
  35.  
  36. # cria uma sub empresa para a empresa
  37. sub_company = build_assoc(company, :sub_companies, %{matriz: true, person: person_map})
  38. |> Repo.insert!
  39.  
  40. user
  41. |> Ecto.Changeset.change(signed_in_company: company.id)
  42. |> Repo.update!
  43. end do
  44. {:ok, user} ->
  45. conn
  46. |> put_status(:created)
  47. |> render(Petshopcloud.RegistrationView, "index.json-api", data: user)
  48. {:error, changeset} ->
  49. conn
  50. |> put_status(:unprocessable_entity)
  51. |> render(Petshopcloud.ChangesetView, "error.json", changeset: changeset)
  52. end
  53. end
  54.  
  55. defp person_map do
  56. %Petshopcloud.Cadastrable.Person{
  57. nome_razao: "Empresa padrão",
  58. fornecedor: false,
  59. cliente: false,
  60. funcionario: false,
  61. transportadora: false,
  62. empresa: true,
  63. legal_entity: %Petshopcloud.Cadastrable.LegalEntity{}
  64. }
  65. end
  66. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement