/
usermodules.go
172 lines (138 loc) · 3.75 KB
/
usermodules.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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package usermodules
import (
"time"
"github.com/bugisdev/helper"
"github.com/jinzhu/gorm"
)
// Login Function
func Login(f UserLoginForm, DB *gorm.DB) (user User, err []helper.ErrorMessage) {
v := f.Validate()
if v.HasErrors() {
for _, value := range v.Errors {
err = append(err, helper.ErrorMessage{
Code: 409,
Source: helper.SourceErrors{Pointer: value.Key},
Title: "Insufficient Data",
Details: value.Message,
})
}
return user, err
}
_err := DB.Where(&User{Username: f.Data.Username}).First(&user).Error
if _err != nil {
err = append(err, helper.ErrorMessage{
Code: 409,
Source: helper.SourceErrors{},
Title: "Failed Logging in User",
Details: _err.Error(),
})
return user, err
}
loggedIn := ComparePassword(&user, f.Data.Password)
if loggedIn == false {
err = append(err, helper.ErrorMessage{
Code: 409,
Source: helper.SourceErrors{},
Title: "Failed Logging in User",
Details: "Wrong Username / Password Combination",
})
return user, err
}
var profile Profile
DB.Model(&user).Related(&profile)
user.Profile = profile
return user, nil
}
// NewUser Function
func NewUser(f UserRegisterForm, DB *gorm.DB) (user User, err []helper.ErrorMessage) {
v := f.Validate()
if v.HasErrors() {
for _, value := range v.Errors {
err = append(err, helper.ErrorMessage{
Code: 409,
Source: helper.SourceErrors{Pointer: value.Key},
Title: value.Message,
Details: value.Message,
})
}
return user, err
}
user.Username = f.Data.Username
user.Fullname = f.Data.Fullname
user.Email = f.Data.Email
user.Password = GeneratePassword(f.Data.Password)
_err := DB.Create(&user).Error
if _err != nil {
err = append(err, helper.ErrorMessage{
Code: 409,
Source: helper.SourceErrors{},
Title: "Failed Creating New User",
Details: _err.Error(),
})
return user, err
}
var profile Profile
DB.Model(&user).Related(&profile)
user.Profile = profile
return user, nil
}
// GetAll Function, Fetch All Users with Offset and Limit
func GetAll(limit, offset int, DB *gorm.DB) (users []User, err []helper.ErrorMessage) {
_err := DB.Limit(limit).Offset(offset).Find(&users).Error
if _err != nil {
err = append(err, helper.ErrorMessage{
Code: 400,
Source: helper.SourceErrors{},
Title: "Failed Fetch All User",
Details: _err.Error(),
})
return users, err
}
for i, user := range users {
var profile Profile
DB.Model(&user).Related(&profile)
users[i].Profile = profile
}
return users, nil
}
// GetSingle Function, Fetch Single User and relation if true
func GetSingle(id int, DB *gorm.DB) (user User, err []helper.ErrorMessage) {
_err := DB.First(&user, id).Error
if _err != nil {
err = append(err, helper.ErrorMessage{
Code: 404,
Source: helper.SourceErrors{},
Title: "Failed Fetch Single user",
Details: _err.Error(),
})
return user, err
}
var profile Profile
DB.Model(&user).Related(&profile)
user.Profile = profile
return user, nil
}
// UpdateSingle Function, Updating User (Not Including Profile Relation)
func UpdateSingle(id int, f UserUpdateForm, DB *gorm.DB) (user User, err []helper.ErrorMessage) {
user, _err := GetSingle(id, DB)
if _err != nil {
return user, _err
}
user.Fullname = f.Data.Fullname
user.Profile.Gender = f.Data.Gender
user.Profile.Address = f.Data.Address
user.Profile.PhoneNumber = f.Data.PhoneNumber
user.Profile.BirthPlace = f.Data.BirthPlace
user.Profile.BirthDate, _ = time.Parse("01/02/2006", f.Data.BirthDate)
_errSaving := DB.Save(&user).Error
if _errSaving != nil {
err = append(err, helper.ErrorMessage{
Code: 400,
Source: helper.SourceErrors{},
Title: "Update User Failed",
Details: _errSaving.Error(),
})
return user, err
}
return user, nil
}