@@ -12,7 +12,13 @@ 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
+ import {
16
+ validateEmail ,
17
+ validateUsername ,
18
+ validatePassword ,
19
+ validateName ,
20
+ validateBiography ,
21
+ } from "../utils/validators" ;
16
22
import { IUser } from "../model/user-model" ;
17
23
18
24
export async function createUser ( req : Request , res : Response ) : Promise < Response > {
@@ -87,59 +93,102 @@ export async function getAllUsers(req: Request, res: Response): Promise<Response
87
93
88
94
export async function updateUser ( req : Request , res : Response ) : Promise < Response > {
89
95
try {
90
- const { username, email, password, profile_picture_url , first_name , last_name , biography } =
96
+ const { username, email, password, profilePictureUrl , firstName , lastName , biography } =
91
97
req . body ;
92
- if (
93
- username ||
94
- email ||
95
- password ||
96
- profile_picture_url ||
97
- first_name ||
98
- last_name ||
99
- biography
100
- ) {
98
+ if ( username || email || password || profilePictureUrl || firstName || lastName || biography ) {
101
99
const userId = req . params . id ;
100
+
102
101
if ( ! isValidObjectId ( userId ) ) {
103
102
return res . status ( 404 ) . json ( { message : `User ${ userId } not found` } ) ;
104
103
}
104
+
105
105
const user = await _findUserById ( userId ) ;
106
106
if ( ! user ) {
107
107
return res . status ( 404 ) . json ( { message : `User ${ userId } not found` } ) ;
108
108
}
109
- if ( username || email ) {
110
- let existingUser = await _findUserByUsername ( username ) ;
109
+
110
+ if ( username ) {
111
+ const { isValid : isValidUsername , message : usernameMessage } = validateUsername ( username ) ;
112
+ if ( ! isValidUsername ) {
113
+ return res . status ( 400 ) . json ( { message : usernameMessage } ) ;
114
+ }
115
+
116
+ const existingUser = await _findUserByUsername ( username ) ;
111
117
if ( existingUser && existingUser . id !== userId ) {
112
118
return res . status ( 409 ) . json ( { message : "username already exists" } ) ;
113
119
}
114
- existingUser = await _findUserByEmail ( email ) ;
120
+ }
121
+
122
+ if ( email ) {
123
+ const { isValid : isValidEmail , message : emailMessage } = validateEmail ( email ) ;
124
+ if ( ! isValidEmail ) {
125
+ return res . status ( 400 ) . json ( { message : emailMessage } ) ;
126
+ }
127
+
128
+ const existingUser = await _findUserByEmail ( email ) ;
115
129
if ( existingUser && existingUser . id !== userId ) {
116
130
return res . status ( 409 ) . json ( { message : "email already exists" } ) ;
117
131
}
118
132
}
119
133
120
134
let hashedPassword : string | undefined ;
121
135
if ( password ) {
136
+ const { isValid : isValidPassword , message : passwordMessage } = validatePassword ( password ) ;
137
+ if ( ! isValidPassword ) {
138
+ return res . status ( 400 ) . json ( { message : passwordMessage } ) ;
139
+ }
140
+
122
141
const salt = bcrypt . genSaltSync ( 10 ) ;
123
142
hashedPassword = bcrypt . hashSync ( password , salt ) ;
124
143
}
144
+
145
+ if ( firstName ) {
146
+ const { isValid : isValidFirstName , message : firstNameMessage } = validateName (
147
+ firstName ,
148
+ "first name"
149
+ ) ;
150
+ if ( ! isValidFirstName ) {
151
+ return res . status ( 400 ) . json ( { message : firstNameMessage } ) ;
152
+ }
153
+ }
154
+
155
+ if ( lastName ) {
156
+ const { isValid : isValidLastName , message : lastNameMessage } = validateName (
157
+ lastName ,
158
+ "last name"
159
+ ) ;
160
+ if ( ! isValidLastName ) {
161
+ return res . status ( 400 ) . json ( { message : lastNameMessage } ) ;
162
+ }
163
+ }
164
+
165
+ if ( biography ) {
166
+ const { isValid : isValidBiography , message : biographyMessage } =
167
+ validateBiography ( biography ) ;
168
+ if ( ! isValidBiography ) {
169
+ return res . status ( 400 ) . json ( { message : biographyMessage } ) ;
170
+ }
171
+ }
172
+
125
173
const updatedUser = await _updateUserById (
126
174
userId ,
127
175
username ,
128
176
email ,
129
177
hashedPassword ,
130
- profile_picture_url ,
131
- first_name ,
132
- last_name ,
178
+ profilePictureUrl ,
179
+ firstName ,
180
+ lastName ,
133
181
biography
134
182
) ;
135
183
return res . status ( 200 ) . json ( {
136
184
message : `Updated data for user ${ userId } ` ,
137
185
data : formatUserResponse ( updatedUser as IUser ) ,
138
186
} ) ;
139
187
} else {
140
- return res
141
- . status ( 400 )
142
- . json ( { message : "No field to update: username and email and password are all missing!" } ) ;
188
+ return res . status ( 400 ) . json ( {
189
+ message :
190
+ "No field to update. Update one of the following fields: username, email, password, profilePictureUrl, firstName, lastName, biography" ,
191
+ } ) ;
143
192
}
144
193
} catch ( err ) {
145
194
console . error ( err ) ;
@@ -203,9 +252,9 @@ export function formatUserResponse(user: IUser) {
203
252
isAdmin : user . isAdmin ,
204
253
createdAt : user . createdAt ,
205
254
206
- profile_picture_url : user . profile_picture_url ,
207
- first_name : user . first_name ,
208
- last_name : user . last_name ,
255
+ profilePictureUrl : user . profilePictureUrl ,
256
+ firstName : user . firstName ,
257
+ lastName : user . lastName ,
209
258
biography : user . biography ,
210
259
} ;
211
260
}
0 commit comments