@@ -4,7 +4,11 @@ defmodule TodoBackend.Todos do
44 """
55
66 import Ecto.Query , warn: false
7+ alias TodoBackend.App
78 alias TodoBackend.Repo
9+ alias TodoBackend.Todos.Commands.CreateTodo
10+ alias TodoBackend.Todos.Commands.DeleteTodo
11+ alias TodoBackend.Todos.Commands.UpdateTodo
812
913 alias TodoBackend.Todos.Projections.Todo
1014
@@ -50,9 +54,18 @@ defmodule TodoBackend.Todos do
5054
5155 """
5256 def create_todo ( attrs \\ % { } ) do
53- % Todo { }
54- |> Todo . changeset ( attrs )
55- |> Repo . insert ( )
57+ uuid = Ecto.UUID . generate ( )
58+
59+ command =
60+ attrs
61+ |> CreateTodo . new ( )
62+ |> CreateTodo . assign_uuid ( uuid )
63+
64+ with :ok <- App . dispatch ( command , consistency: :strong ) do
65+ { :ok , get_todo! ( uuid ) }
66+ else
67+ reply -> reply
68+ end
5669 end
5770
5871 @ doc """
@@ -67,10 +80,17 @@ defmodule TodoBackend.Todos do
6780 {:error, %Ecto.Changeset{}}
6881
6982 """
70- def update_todo ( % Todo { } = todo , attrs ) do
71- todo
72- |> Todo . changeset ( attrs )
73- |> Repo . update ( )
83+ def update_todo ( % Todo { uuid: uuid } , attrs ) do
84+ command =
85+ attrs
86+ |> UpdateTodo . new ( )
87+ |> UpdateTodo . assign_uuid ( uuid )
88+
89+ with :ok <- App . dispatch ( command , consistency: :strong ) do
90+ { :ok , get_todo! ( uuid ) }
91+ else
92+ reply -> reply
93+ end
7494 end
7595
7696 @ doc """
@@ -85,8 +105,14 @@ defmodule TodoBackend.Todos do
85105 {:error, %Ecto.Changeset{}}
86106
87107 """
88- def delete_todo ( % Todo { } = todo ) do
89- Repo . delete ( todo )
108+ def delete_todo ( % Todo { uuid: uuid } ) do
109+ command = DeleteTodo . new ( % { uuid: uuid } )
110+
111+ with :ok <- App . dispatch ( command ) do
112+ :ok
113+ else
114+ reply -> reply
115+ end
90116 end
91117
92118 @ doc """
@@ -101,17 +127,4 @@ defmodule TodoBackend.Todos do
101127 def delete_all_todos ( ) do
102128 Repo . delete_all ( Todo )
103129 end
104-
105- @ doc """
106- Returns an `%Ecto.Changeset{}` for tracking todo changes.
107-
108- ## Examples
109-
110- iex> change_todo(todo)
111- %Ecto.Changeset{data: %Todo{}}
112-
113- """
114- def change_todo ( % Todo { } = todo , attrs \\ % { } ) do
115- Todo . changeset ( todo , attrs )
116- end
117130end
0 commit comments