@@ -27,7 +27,7 @@ func NewUserDao() *UserDao {
27
27
}
28
28
29
29
func (d * UserDao ) GetUsers (c context.Context , limit * int , offset * int ) []api.UserResponse {
30
- query := "SELECT username, name, surname, email FROM users LIMIT $1 OFFSET $2"
30
+ query := "SELECT user_id, username, name, surname, email, role FROM users LIMIT $1 OFFSET $2"
31
31
params := []any {20 , 0 }
32
32
if limit != nil {
33
33
params [0 ] = * limit
@@ -46,40 +46,47 @@ func (d *UserDao) GetUsers(c context.Context, limit *int, offset *int) []api.Use
46
46
47
47
for rows .Next () {
48
48
var user api.UserResponse
49
- if err := rows .Scan (& user .Username , & user .Name , & user .Surname , & user .Email ); err != nil {
49
+ var roleStr string
50
+ if err := rows .Scan (& user .Id , & user .Username , & user .Name , & user .Surname , & user .Email , & roleStr ); err != nil {
50
51
fmt .Printf ("row scan error: %v\n " , err .Error ())
51
52
continue
52
53
}
54
+ user .Role = api .UserResponseRole (roleStr )
53
55
users = append (users , user )
54
56
}
55
57
return users
56
58
}
57
59
58
- func (d * UserDao ) AddUser (c context.Context , user api.UserRequest ) error {
59
- query := "INSERT INTO users (username, name, surname, email, password, role) VALUES ($1, $2, $3, $4, $5, $6)"
60
- _ , err := d .db .Exec (c , query , user .Username , user .Name , user .Surname , user .Email , user .Password , user .Role )
60
+ func (d * UserDao ) AddUser (c context.Context , user api.UserRequest ) (int64 , error ) {
61
+ query := "INSERT INTO users (username, name, surname, email, password, role) VALUES ($1, $2, $3, $4, $5, $6) RETURNING user_id"
62
+ row := d .db .QueryRow (c , query , user .Username , user .Name , user .Surname , user .Email , user .Password , user .Role )
63
+
64
+ var id int64
65
+ err := row .Scan (& id )
61
66
if err != nil {
62
67
if strings .Contains (err .Error (), "UNIQUE constraint failed" ) {
63
- return ErrUserAlreadyExists
68
+ return 0 , ErrUserAlreadyExists
64
69
}
65
- return fmt .Errorf ("failed to add user: %w" , err )
70
+ return 0 , fmt .Errorf ("failed to add user: %w" , err )
66
71
}
67
- return nil
72
+ return id , nil
68
73
}
69
74
70
75
func (d * UserDao ) GetUser (c context.Context , username string ) (* api.UserResponse , error ) {
71
- query := "SELECT username, name, surname, email FROM users WHERE username = $1"
76
+ query := "SELECT user_id, username, name, surname, email, role FROM users WHERE username = $1"
72
77
rows , err := d .db .Query (c , query , username )
73
78
if err != nil {
74
79
return nil , fmt .Errorf ("db error: %w" , err )
75
80
}
76
81
defer rows .Close ()
77
82
78
83
var user api.UserResponse
84
+ var roleStr string
79
85
if rows .Next () {
80
- if err := rows .Scan (& user .Username , & user .Name , & user .Surname , & user .Email ); err != nil {
86
+ if err := rows .Scan (& user .Id , & user . Username , & user .Name , & user .Surname , & user .Email , & roleStr ); err != nil {
81
87
return nil , fmt .Errorf ("failed to scan user: %w" , err )
82
88
}
89
+ user .Role = api .UserResponseRole (roleStr )
83
90
return & user , nil
84
91
}
85
92
return nil , ErrUserNotFound
@@ -147,9 +154,9 @@ func (d *UserDao) DeleteUser(c context.Context, username string) error {
147
154
return nil
148
155
}
149
156
150
- func (d * UserDao ) UpdateUser (c context.Context , username string , user api.UserRequest ) error {
151
- query := "UPDATE users SET name = $1, surname = $2, email = $3 WHERE username = $4"
152
- result , err := d .db .Exec (c , query , user .Name , user .Surname , user .Email , username )
157
+ func (d * UserDao ) UpdateUser (c context.Context , username string , user api.UpdateUserRequest ) error {
158
+ query := "UPDATE users SET name = $1, surname = $2, email = $3, password = $4 WHERE username = $4"
159
+ result , err := d .db .Exec (c , query , user .Name , user .Surname , user .Email , user . Password , username )
153
160
if err != nil {
154
161
if strings .Contains (err .Error (), "UNIQUE constraint failed" ) {
155
162
return ErrUserAlreadyExists
@@ -163,3 +170,54 @@ func (d *UserDao) UpdateUser(c context.Context, username string, user api.UserRe
163
170
}
164
171
return nil
165
172
}
173
+
174
+ func (d * UserDao ) GetUserById (c context.Context , id int64 ) (* api.UserResponse , error ) {
175
+ query := "SELECT user_id, username, name, surname, email, role FROM users WHERE user_id = $1"
176
+ rows , err := d .db .Query (c , query , id )
177
+ if err != nil {
178
+ return nil , fmt .Errorf ("db error: %w" , err )
179
+ }
180
+ defer rows .Close ()
181
+
182
+ var user api.UserResponse
183
+ var roleStr string
184
+ if rows .Next () {
185
+ if err := rows .Scan (& user .Id , & user .Username , & user .Name , & user .Surname , & user .Email , & roleStr ); err != nil {
186
+ return nil , fmt .Errorf ("failed to scan user: %w" , err )
187
+ }
188
+ user .Role = api .UserResponseRole (roleStr )
189
+ return & user , nil
190
+ }
191
+ return nil , ErrUserNotFound
192
+ }
193
+
194
+ func (d * UserDao ) UpdateUserById (c context.Context , id int64 , user api.UserRequest ) error {
195
+ query := "UPDATE users SET username = $1, name = $2, surname = $3, email = $4 WHERE user_id = $5"
196
+ result , err := d .db .Exec (c , query , user .Username , user .Name , user .Surname , user .Email , id )
197
+ if err != nil {
198
+ if strings .Contains (err .Error (), "UNIQUE constraint failed" ) {
199
+ return ErrUserAlreadyExists
200
+ }
201
+ return fmt .Errorf ("failed to update user by ID: %w" , err )
202
+ }
203
+
204
+ rowsAffected := result .RowsAffected ()
205
+ if rowsAffected == 0 {
206
+ return ErrUserNotFound
207
+ }
208
+ return nil
209
+ }
210
+
211
+ func (d * UserDao ) DeleteUserById (c context.Context , id int64 ) error {
212
+ query := "DELETE FROM users WHERE user_id = $1"
213
+ result , err := d .db .Exec (c , query , id )
214
+ if err != nil {
215
+ return fmt .Errorf ("failed to delete user by ID: %w" , err )
216
+ }
217
+
218
+ rowsAffected := result .RowsAffected ()
219
+ if rowsAffected == 0 {
220
+ return ErrUserNotFound
221
+ }
222
+ return nil
223
+ }
0 commit comments