/
repository.go
executable file
·133 lines (103 loc) · 3.11 KB
/
repository.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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package employee
import (
"database/sql"
"fmt"
)
type Employee 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"`
}
type EmployeeInboundOrders 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"`
InboundOrdersCount int `json:"inbound_orders_count"`
}
type Repository 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(id int, firstName string, lastName string, warehouseId int) (Employee, error)
}
type repository struct {
db *sql.DB
}
func NewRepository(db *sql.DB) Repository {
return &repository{db: db}
}
func (r repository) Create(cardNum int, firstName string, lastName string, warehouseId int) (Employee, error) {
res, err := r.db.Exec(SqlCreate, cardNum, firstName, lastName, warehouseId)
if err != nil {
return Employee{}, fmt.Errorf("galpao %d nao existe", warehouseId)
}
rowsAffected, _ := res.RowsAffected()
if rowsAffected <= 0 {
return Employee{}, fmt.Errorf("employee not created")
}
lastID, _ := res.LastInsertId()
emp := Employee{int(lastID), cardNum, firstName, lastName, warehouseId}
return emp, nil
}
func (r repository) GetAll() ([]Employee, error) {
var employees []Employee
rows, err := r.db.Query(SqlGetAll)
if err != nil {
return employees, err
}
defer rows.Close()
for rows.Next() {
var emp Employee
err := rows.Scan(&emp.ID, &emp.CardNumber, &emp.FirstName, &emp.LastName, &emp.WareHouseID)
if err != nil {
return employees, err
}
employees = append(employees, emp)
}
return employees, err
}
func (r repository) Update(id int, firstName string, lastName string, warehouseId int) (Employee, error) {
olderEmployee, _ := r.GetById(id)
newEmployee := Employee{id, olderEmployee.CardNumber, firstName, lastName, warehouseId}
res, err := r.db.Exec(SqlUpdate, firstName, lastName, warehouseId, id)
if err != nil {
return Employee{}, fmt.Errorf("funcionario nao existe")
}
rowsAffected, _ := res.RowsAffected()
if rowsAffected <= 0 && newEmployee != olderEmployee {
return Employee{}, fmt.Errorf("rows not affected")
}
emp, _ := r.GetById(id)
return emp, nil
}
func (r repository) Delete(id int) error {
res, err := r.db.Exec(SqlDelete, id)
if err != nil {
return err
}
rowsAffected, _ := res.RowsAffected()
if rowsAffected <= 0 {
return fmt.Errorf("row not affected")
}
return nil
}
func (r repository) GetById(id int) (Employee, error) {
var emp Employee
rows, err := r.db.Query(SqlGetById, id)
if err != nil {
return Employee{}, fmt.Errorf("funcionario nao existe")
}
defer rows.Close()
for rows.Next() {
err = rows.Scan(&emp.ID, &emp.CardNumber, &emp.FirstName, &emp.LastName, &emp.WareHouseID)
if err != nil {
return Employee{}, err
}
}
return emp, nil
}