/
service.go
executable file
·119 lines (98 loc) · 2.76 KB
/
service.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package employee
import (
"fmt"
)
type EmployeeOrderCount struct {
ID int `json:"id"`
CardNumber int `json:"card_number_id"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
WareHouseID int `json:"warehouse_id"`
Count int `json:"inbound_orders_count"`
}
type Services interface {
Create(cardNum int, firstName string, lastName string, warehouseId int) (Employee, error)
GetAll() ([]Employee, error)
Delete(id int) error
GetById(id int) (Employee, error)
Update(emp Employee, id int) (Employee, error)
GetCount(id, counter int) (EmployeeOrderCount, error)
}
type service struct {
repository Repository
}
func NewService(r Repository) Services {
s := service{r}
return &s
}
func (s *service) validateCardNumber(cardNum int) bool {
employees, _ := s.GetAll()
for i := range employees {
if employees[i].CardNumber == cardNum {
return false
}
}
return true
}
func (s *service) Create(cardNum int, firstName string, lastName string, warehouseId int) (Employee, error) {
if !s.validateCardNumber(cardNum) {
return Employee{}, fmt.Errorf("funcionario com cartão n: %d ja existe no banco de dados", cardNum)
}
emps, err := s.repository.Create(cardNum, firstName, lastName, warehouseId)
if err != nil {
return Employee{}, err
}
return emps, nil
}
func (s *service) GetAll() ([]Employee, error) {
emps, err := s.repository.GetAll()
if err != nil {
return emps, err
}
fmt.Println("chegou no service")
return emps, nil
}
func (s service) Delete(id int) error {
err := s.repository.Delete(id)
if err != nil {
return fmt.Errorf("funcionario nao existe")
}
return nil
}
func (s service) GetById(id int) (Employee, error) {
AllEmployees, err := s.repository.GetAll()
if err != nil {
return Employee{}, err
}
for i := range AllEmployees {
if AllEmployees[i].ID == id {
emp, err := s.repository.GetById(id)
if err != nil {
return Employee{}, err
}
return emp, nil
}
}
return Employee{}, fmt.Errorf("funcionario nao existe")
}
func (s *service) Update(emp Employee, id int) (Employee, error) {
empToMatch, _ := s.repository.GetById(id)
if emp.FirstName == "" {
emp.FirstName = empToMatch.FirstName
}
if emp.LastName == "" {
emp.LastName = empToMatch.LastName
}
if emp.WareHouseID == 0 {
emp.WareHouseID = empToMatch.WareHouseID
}
employee, err := s.repository.Update(id, emp.FirstName, emp.LastName, emp.WareHouseID)
if err != nil {
return Employee{}, fmt.Errorf("funcionario nao existe")
}
return employee, nil
}
func (s *service) GetCount(id, counter int) (EmployeeOrderCount, error) {
employee, _ := s.repository.GetById(id)
return EmployeeOrderCount{employee.ID, employee.CardNumber, employee.FirstName, employee.LastName, employee.WareHouseID, counter}, nil
}