-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathaccounts.ex
More file actions
37 lines (29 loc) · 755 Bytes
/
accounts.ex
File metadata and controls
37 lines (29 loc) · 755 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
defmodule Blog.Accounts do
alias Blog.{Accounts, Repo}
def find_user(id) do
Repo.get(Accounts.User, id)
end
def create_user(attrs) do
{contact_attrs, user_attrs} = Map.pop(attrs, :contact)
Repo.transaction fn ->
with {:ok, contact} <- create_contact(contact_attrs),
{:ok, user} <- do_create_user(user_attrs, contact) do
%{user | contacts: [contact]}
else
{:error, changeset} ->
Repo.rollback(changeset)
end
end
end
def create_contact(attrs) do
attrs
|> Accounts.Contact.changeset
|> Repo.insert
end
defp do_create_user(attrs, contact) do
attrs
|> Map.put(:contact_id, contact.id)
|> Accounts.User.changeset
|> Repo.insert
end
end