@@ -12,15 +12,31 @@ import {
12
12
updateUserById as _updateUserById ,
13
13
updateUserPrivilegeById as _updateUserPrivilegeById ,
14
14
} from "../model/repository" ;
15
+ import { validateEmail , validateUsername , validatePassword } from "../utils/validators" ;
15
16
import { IUser } from "../model/user-model" ;
16
17
17
18
export async function createUser ( req : Request , res : Response ) : Promise < Response > {
18
19
try {
19
20
const { username, email, password } = req . body ;
21
+ const existingUser = await _findUserByUsernameOrEmail ( username , email ) ;
22
+ if ( existingUser ) {
23
+ return res . status ( 409 ) . json ( { message : "username or email already exists" } ) ;
24
+ }
25
+
20
26
if ( username && email && password ) {
21
- const existingUser = await _findUserByUsernameOrEmail ( username , email ) ;
22
- if ( existingUser ) {
23
- return res . status ( 409 ) . json ( { message : "username or email already exists" } ) ;
27
+ const { isValid : isValidUsername , message : usernameMessage } = validateUsername ( username ) ;
28
+ if ( ! isValidUsername ) {
29
+ return res . status ( 400 ) . json ( { message : usernameMessage } ) ;
30
+ }
31
+
32
+ const { isValid : isValidEmail , message : emailMessage } = validateEmail ( email ) ;
33
+ if ( ! isValidEmail ) {
34
+ return res . status ( 400 ) . json ( { message : emailMessage } ) ;
35
+ }
36
+
37
+ const { isValid : isValidPassword , message : passwordMessage } = validatePassword ( password ) ;
38
+ if ( ! isValidPassword ) {
39
+ return res . status ( 400 ) . json ( { message : passwordMessage } ) ;
24
40
}
25
41
26
42
const salt = bcrypt . genSaltSync ( 10 ) ;
@@ -71,8 +87,17 @@ export async function getAllUsers(req: Request, res: Response): Promise<Response
71
87
72
88
export async function updateUser ( req : Request , res : Response ) : Promise < Response > {
73
89
try {
74
- const { username, email, password } = req . body ;
75
- if ( username || email || password ) {
90
+ const { username, email, password, profile_picture_url, first_name, last_name, biography } =
91
+ req . body ;
92
+ if (
93
+ username ||
94
+ email ||
95
+ password ||
96
+ profile_picture_url ||
97
+ first_name ||
98
+ last_name ||
99
+ biography
100
+ ) {
76
101
const userId = req . params . id ;
77
102
if ( ! isValidObjectId ( userId ) ) {
78
103
return res . status ( 404 ) . json ( { message : `User ${ userId } not found` } ) ;
@@ -92,12 +117,21 @@ export async function updateUser(req: Request, res: Response): Promise<Response>
92
117
}
93
118
}
94
119
95
- let hashedPassword : string = "" ;
120
+ let hashedPassword : string | undefined ;
96
121
if ( password ) {
97
122
const salt = bcrypt . genSaltSync ( 10 ) ;
98
123
hashedPassword = bcrypt . hashSync ( password , salt ) ;
99
124
}
100
- const updatedUser = await _updateUserById ( userId , username , email , hashedPassword ) ;
125
+ const updatedUser = await _updateUserById (
126
+ userId ,
127
+ username ,
128
+ email ,
129
+ hashedPassword ,
130
+ profile_picture_url ,
131
+ first_name ,
132
+ last_name ,
133
+ biography
134
+ ) ;
101
135
return res . status ( 200 ) . json ( {
102
136
message : `Updated data for user ${ userId } ` ,
103
137
data : formatUserResponse ( updatedUser as IUser ) ,
@@ -168,5 +202,10 @@ export function formatUserResponse(user: IUser) {
168
202
email : user . email ,
169
203
isAdmin : user . isAdmin ,
170
204
createdAt : user . createdAt ,
205
+
206
+ profile_picture_url : user . profile_picture_url ,
207
+ first_name : user . first_name ,
208
+ last_name : user . last_name ,
209
+ biography : user . biography ,
171
210
} ;
172
211
}
0 commit comments