@@ -244,6 +244,63 @@ getMemberSkills.schema = {
244
244
throwError : Joi . boolean ( )
245
245
}
246
246
247
+ async function createMemberSkills ( currentUser , handle , data ) {
248
+ // get member by handle
249
+ const member = await helper . getMemberByHandle ( handle )
250
+ // check authorization
251
+ if ( ! helper . canManageMember ( currentUser , member ) ) {
252
+ throw new errors . ForbiddenError ( 'You are not allowed to update the member skills.' )
253
+ }
254
+ // fetch tags data
255
+ if ( ! this . allTags ) {
256
+ this . allTags = await helper . getAllTags ( config . TAGS . TAGS_BASE_URL + config . TAGS . TAGS_API_VERSION + config . TAGS . TAGS_FILTER )
257
+ }
258
+ let memberEnteredSkill = {
259
+ userId : member . userId ,
260
+ createdAt : new Date ( ) . getTime ( ) ,
261
+ createdBy : currentUser . handle || currentUser . sub ,
262
+ handleLower : handle ,
263
+ userHandle : handle ,
264
+ skills : { }
265
+ }
266
+
267
+ // merge skills
268
+ memberEnteredSkill = helper . mergeSkills ( memberEnteredSkill , { } , this . allTags )
269
+ // cleanup data
270
+ var tempSkill = { }
271
+ _ . forIn ( data , ( value , key ) => {
272
+ var tag = helper . findTagById ( this . allTags , Number ( key ) )
273
+ if ( tag ) {
274
+ value . tagName = tag . name
275
+ if ( ! value . hasOwnProperty ( 'hidden' ) ) {
276
+ value . hidden = false
277
+ }
278
+ if ( ! value . hasOwnProperty ( 'score' ) ) {
279
+ value . score = 1
280
+ }
281
+ value . sources = [ 'USER_ENTERED' ]
282
+ tempSkill [ key ] = value
283
+ }
284
+ } )
285
+ _ . assignIn ( memberEnteredSkill . skills , tempSkill )
286
+ await helper . create ( 'MemberEnteredSkills' , memberEnteredSkill )
287
+
288
+ // get skills by member handle
289
+ const memberSkill = await this . getMemberSkills ( currentUser , handle , { } , true )
290
+ return memberSkill
291
+ }
292
+
293
+ createMemberSkills . schema = {
294
+ currentUser : Joi . any ( ) ,
295
+ handle : Joi . string ( ) . required ( ) ,
296
+ data : Joi . object ( ) . min ( 1 ) . pattern ( / .* / , Joi . object ( ) . keys ( {
297
+ tagName : Joi . string ( ) ,
298
+ hidden : Joi . boolean ( ) ,
299
+ score : Joi . number ( ) . min ( 0 ) ,
300
+ sources : Joi . array ( ) . items ( Joi . string ( ) )
301
+ } ) . required ( ) ) . required ( )
302
+ }
303
+
247
304
/**
248
305
* Partially update member skills.
249
306
* @param {Object } currentUser the user who performs operation
@@ -264,6 +321,7 @@ async function partiallyUpdateMemberSkills (currentUser, handle, data) {
264
321
}
265
322
// get member entered skill by member user id
266
323
let memberEnteredSkill = await helper . getEntityByHashKey ( handle , 'MemberEnteredSkills' , 'userId' , member . userId , true )
324
+
267
325
// cleanup - convert string to object
268
326
memberEnteredSkill = helper . convertToObjectSkills ( memberEnteredSkill )
269
327
// cleanup
@@ -311,6 +369,7 @@ module.exports = {
311
369
getHistoryStats,
312
370
getMemberStats,
313
371
getMemberSkills,
372
+ createMemberSkills,
314
373
partiallyUpdateMemberSkills
315
374
}
316
375
0 commit comments