Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- defmodule Petshopcloud.RegistrationController do
- use Petshopcloud.Web, :controller
- import Petshopcloud.Cadastrable.Person
- def create(conn, %{"data" => %{"type" => "users",
- "attributes" => %{"name" => name,
- "email" => email,
- "password" => password,
- "password-confirmation" => password_confirmation}}}) do
- changeset = User.changeset %User{}, %{name: name, email: email,
- password_confirmation: password_confirmation,
- password: password}
- case Repo.transaction fn ->
- # adiciona o usuário
- user = changeset
- |> Repo.insert!
- # adiciona o petshop com o usuário criado
- petshop = build_assoc(user, :owned_petshop, %{})
- |> Repo.insert!
- # adiciona admin aos membros
- build_assoc(petshop, :petshop_members, %{user_id: user.id, petshop_id: petshop.id})
- |> Repo.insert!
- # cria company padrão para o petshop
- company = build_assoc(petshop, :companies, %{empresa_padrao: true})
- |> Repo.insert!
- # adiciona company às empresas membros
- build_assoc(company, :company_members, %{user_id: user.id, company_id: company.id})
- |> Repo.insert!
- # cria uma sub empresa para a empresa
- sub_company = build_assoc(company, :sub_companies, %{matriz: true, person: person_map})
- |> Repo.insert!
- user
- |> Ecto.Changeset.change(signed_in_company: company.id)
- |> Repo.update!
- end do
- {:ok, user} ->
- conn
- |> put_status(:created)
- |> render(Petshopcloud.RegistrationView, "index.json-api", data: user)
- {:error, changeset} ->
- conn
- |> put_status(:unprocessable_entity)
- |> render(Petshopcloud.ChangesetView, "error.json", changeset: changeset)
- end
- end
- defp person_map do
- %Petshopcloud.Cadastrable.Person{
- nome_razao: "Empresa padrão",
- fornecedor: false,
- cliente: false,
- funcionario: false,
- transportadora: false,
- empresa: true,
- legal_entity: %Petshopcloud.Cadastrable.LegalEntity{}
- }
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement