-
Notifications
You must be signed in to change notification settings - Fork 0
/
item_usecases.go
98 lines (80 loc) · 2.53 KB
/
item_usecases.go
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package usecases
import (
"github.com/benzid-wael/mytasks/tasks/domain/entities"
"github.com/benzid-wael/mytasks/tasks/infrastructure"
"sort"
)
type ItemUseCase interface {
CreateNote(title string, tags ...string) (*entities.Note, error)
CreateTask(title string, tags ...string) (*entities.Task, error)
GetItems() entities.ItemCollection
GetItem(id int) entities.Manageable
GetNoteById(id int) (*entities.Note, error)
GetTaskById(id int) (*entities.Task, error)
EditItem(id int, data map[string]interface{}) error
CloneItem(id int) (entities.Manageable, error)
ArchiveItem(id int) error
RestoreItem(id int) error
DeleteItem(id int) error
TriggerEvent(id int, event string) error
}
type itemUseCase struct {
repository infrastructure.ItemRepository
}
func NewItemUseCase(repository infrastructure.ItemRepository) ItemUseCase {
return &itemUseCase{
repository: repository,
}
}
func (iuc *itemUseCase) CreateNote(title string, tags ...string) (*entities.Note, error) {
item := entities.NewNote(title, "", tags...)
note, err := iuc.repository.CreateNote(*item)
return ¬e, err
}
func (iuc *itemUseCase) CreateTask(title string, tags ...string) (*entities.Task, error) {
item := entities.NewTask(title, "", entities.ToDo, tags...)
task, err := iuc.repository.CreateTask(*item)
return &task, err
}
func (iuc *itemUseCase) EditItem(id int, data map[string]interface{}) error {
return iuc.repository.UpdateItem(id, data)
}
func (iuc *itemUseCase) GetItem(id int) entities.Manageable {
item := iuc.repository.GetItem(id)
return item
}
func (iuc *itemUseCase) GetItems() entities.ItemCollection {
items := iuc.repository.GetItems()
sort.Sort(items)
return items
}
func (iuc *itemUseCase) GetNoteById(id int) (*entities.Note, error) {
return iuc.repository.GetNoteById(id)
}
func (iuc *itemUseCase) GetTaskById(id int) (*entities.Task, error) {
return iuc.repository.GetTaskById(id)
}
func (iuc *itemUseCase) CloneItem(id int) (entities.Manageable, error) {
item, err := iuc.repository.CloneItem(id)
return item, err
}
func (iuc *itemUseCase) ArchiveItem(id int) error {
return iuc.repository.ArchiveItem(id)
}
func (iuc *itemUseCase) RestoreItem(id int) error {
return iuc.repository.RestoreItem(id)
}
func (iuc *itemUseCase) DeleteItem(id int) error {
return iuc.repository.ArchiveItem(id)
}
func (iuc *itemUseCase) TriggerEvent(id int, event string) error {
item, err := iuc.GetTaskById(id)
if err != nil {
return err
}
err = item.TriggerEvent(event)
if err != nil {
return err
}
return iuc.repository.StoreItem(id, item)
}