Skip to content

Commit c709319

Browse files
committed
feat: remove user from achievement
1 parent 46dcb75 commit c709319

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

server/resources/achievement.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ server.method('achievement.getByUser', getByUser, {})
1515
server.method('achievement.removeAllFromUser', removeAllFromUser, {})
1616
server.method('achievement.list', list, {})
1717
server.method('achievement.remove', remove, {})
18+
server.method('achievement.removeUser', removeUser, {})
1819
server.method('achievement.addUser', addUser, {})
1920
server.method('achievement.addMultiUsers', addMultiUsers, {})
2021
server.method('achievement.addMultiUsersBySession', addMultiUsersBySession, {})
@@ -137,6 +138,10 @@ async function remove(id) {
137138
return Achievement.findOneAndRemove({ id: id })
138139
}
139140

141+
async function removeUser(id, userId) {
142+
return Achievement.updateOne({ id: id }, { $pull: { users: userId }})
143+
}
144+
140145
// 500, 404
141146
async function addCV(userId) {
142147
const achievementKind = 'cv'

server/routes/achievement/handlers.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,36 @@ exports.removeMe = {
184184
}
185185
}
186186

187+
exports.removeUser = {
188+
options: {
189+
tags: ['api', 'achievement'],
190+
auth: {
191+
strategies: ['default'],
192+
scope: ['team', 'admin']
193+
},
194+
description: 'Removes user from achievement',
195+
validate: {
196+
params: Joi.object({
197+
id: Joi.string().required().description('Id of the achievement'),
198+
userId: Joi.string().required().description('Id of the user')
199+
})
200+
},
201+
},
202+
handler: async (request, h) => {
203+
try {
204+
let ach = await request.server.methods.achievement.removeUser(request.params.id, request.params.userId)
205+
if (!ach) {
206+
log.error({ err: 'not found', id: request.params.id }, 'achievement not found')
207+
throw Boom.notFound('achievement not found')
208+
}
209+
return h.response(render(ach))
210+
} catch (err) {
211+
log.error({ err: err, id: request }, 'error removing user from achievement')
212+
throw Boom.internal('error getting achievement')
213+
}
214+
}
215+
}
216+
187217
exports.getActive = {
188218
options: {
189219
tags: ['api', 'achievement'],

server/routes/achievement/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ server.route({
7979
handler: handlers.remove.handler
8080
})
8181

82+
server.route({
83+
method: 'DELETE',
84+
path: '/achievements/{id}/users/{userId}',
85+
options: handlers.removeUser.options,
86+
handler: handlers.removeUser.handler
87+
})
88+
8289
server.route({
8390
method: 'GET',
8491
path: '/achievements/code',

0 commit comments

Comments
 (0)