@programisto/edrm-exams 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/bin/www.js +1 -1
- package/dist/modules/edrm-exams/listeners/correct.listener.d.ts +1 -1
- package/dist/modules/edrm-exams/listeners/correct.listener.js +1 -1
- package/dist/modules/edrm-exams/models/candidate.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/candidate.model.js +1 -1
- package/dist/modules/edrm-exams/models/company.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/company.model.js +1 -1
- package/dist/modules/edrm-exams/models/contact.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/contact.model.js +1 -1
- package/dist/modules/edrm-exams/models/test-category.models.d.ts +1 -1
- package/dist/modules/edrm-exams/models/test-category.models.js +1 -1
- package/dist/modules/edrm-exams/models/test-job.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/test-job.model.js +1 -1
- package/dist/modules/edrm-exams/models/test-question.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/test-question.model.js +1 -1
- package/dist/modules/edrm-exams/models/test-result.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/test-result.model.js +1 -1
- package/dist/modules/edrm-exams/models/test.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/test.model.js +1 -1
- package/dist/modules/edrm-exams/models/user.model.d.ts +1 -1
- package/dist/modules/edrm-exams/models/user.model.js +1 -1
- package/dist/modules/edrm-exams/routes/company.router.d.ts +1 -1
- package/dist/modules/edrm-exams/routes/company.router.js +136 -7
- package/dist/modules/edrm-exams/routes/exams-candidate.router.d.ts +1 -1
- package/dist/modules/edrm-exams/routes/exams-candidate.router.js +227 -8
- package/dist/modules/edrm-exams/routes/exams.router.d.ts +1 -1
- package/dist/modules/edrm-exams/routes/exams.router.js +1022 -40
- package/dist/modules/edrm-exams/routes/result.router.d.ts +1 -1
- package/dist/modules/edrm-exams/routes/result.router.js +153 -6
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EnduranceRouter, EnduranceAuthMiddleware, enduranceEmitter, enduranceEventTypes } from '@programisto/endurance
|
|
1
|
+
import { EnduranceRouter, EnduranceAuthMiddleware, enduranceEmitter, enduranceEventTypes } from '@programisto/endurance';
|
|
2
2
|
import CandidateModel from '../models/candidate.model.js';
|
|
3
3
|
import TestResult, { TestState } from '../models/test-result.model.js';
|
|
4
4
|
import Test from '../models/test.model.js';
|
|
@@ -30,7 +30,52 @@ class ResultRouter extends EnduranceRouter {
|
|
|
30
30
|
requireAuth: false,
|
|
31
31
|
permissions: []
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* @swagger
|
|
35
|
+
* /results/{candidateId}:
|
|
36
|
+
* get:
|
|
37
|
+
* summary: Lister les résultats d'un candidat
|
|
38
|
+
* description: Liste paginée des résultats d'un candidat avec filtrage par état et tri.
|
|
39
|
+
* tags: [Résultats]
|
|
40
|
+
* parameters:
|
|
41
|
+
* - in: path
|
|
42
|
+
* name: candidateId
|
|
43
|
+
* required: true
|
|
44
|
+
* schema:
|
|
45
|
+
* type: string
|
|
46
|
+
* - in: query
|
|
47
|
+
* name: page
|
|
48
|
+
* schema:
|
|
49
|
+
* type: integer
|
|
50
|
+
* default: 1
|
|
51
|
+
* - in: query
|
|
52
|
+
* name: limit
|
|
53
|
+
* schema:
|
|
54
|
+
* type: integer
|
|
55
|
+
* default: 10
|
|
56
|
+
* - in: query
|
|
57
|
+
* name: state
|
|
58
|
+
* schema:
|
|
59
|
+
* type: string
|
|
60
|
+
* default: all
|
|
61
|
+
* - in: query
|
|
62
|
+
* name: sortBy
|
|
63
|
+
* schema:
|
|
64
|
+
* type: string
|
|
65
|
+
* default: invitationDate
|
|
66
|
+
* - in: query
|
|
67
|
+
* name: sortOrder
|
|
68
|
+
* schema:
|
|
69
|
+
* type: string
|
|
70
|
+
* default: desc
|
|
71
|
+
* responses:
|
|
72
|
+
* 200:
|
|
73
|
+
* description: Résultats paginés
|
|
74
|
+
* 404:
|
|
75
|
+
* description: Candidat non trouvé
|
|
76
|
+
* 500:
|
|
77
|
+
* description: Erreur interne
|
|
78
|
+
*/
|
|
34
79
|
this.get('/results/:candidateId', authenticatedOptions, async (req, res) => {
|
|
35
80
|
try {
|
|
36
81
|
const { candidateId } = req.params;
|
|
@@ -125,7 +170,27 @@ class ResultRouter extends EnduranceRouter {
|
|
|
125
170
|
res.status(500).json({ message: 'Erreur interne du serveur' });
|
|
126
171
|
}
|
|
127
172
|
});
|
|
128
|
-
|
|
173
|
+
/**
|
|
174
|
+
* @swagger
|
|
175
|
+
* /results/test/{id}:
|
|
176
|
+
* get:
|
|
177
|
+
* summary: Obtenir un test sans questions
|
|
178
|
+
* description: Récupère un test avec catégories nommées, temps total et nombre de questions.
|
|
179
|
+
* tags: [Résultats]
|
|
180
|
+
* parameters:
|
|
181
|
+
* - in: path
|
|
182
|
+
* name: id
|
|
183
|
+
* required: true
|
|
184
|
+
* schema:
|
|
185
|
+
* type: string
|
|
186
|
+
* responses:
|
|
187
|
+
* 200:
|
|
188
|
+
* description: Test trouvé
|
|
189
|
+
* 404:
|
|
190
|
+
* description: Test non trouvé
|
|
191
|
+
* 500:
|
|
192
|
+
* description: Erreur interne
|
|
193
|
+
*/
|
|
129
194
|
this.get('/test/:id', authenticatedOptions, async (req, res) => {
|
|
130
195
|
try {
|
|
131
196
|
const { id } = req.params;
|
|
@@ -166,7 +231,32 @@ class ResultRouter extends EnduranceRouter {
|
|
|
166
231
|
res.status(500).json({ message: 'Erreur interne du serveur' });
|
|
167
232
|
}
|
|
168
233
|
});
|
|
169
|
-
|
|
234
|
+
/**
|
|
235
|
+
* @swagger
|
|
236
|
+
* /results/{id}/nextQuestion:
|
|
237
|
+
* get:
|
|
238
|
+
* summary: Obtenir la prochaine question
|
|
239
|
+
* description: Retourne l'identifiant de la prochaine question non répondue ou "result" s'il n'y en a plus.
|
|
240
|
+
* tags: [Résultats]
|
|
241
|
+
* parameters:
|
|
242
|
+
* - in: path
|
|
243
|
+
* name: id
|
|
244
|
+
* required: true
|
|
245
|
+
* schema:
|
|
246
|
+
* type: string
|
|
247
|
+
* - in: query
|
|
248
|
+
* name: currentQuestionId
|
|
249
|
+
* schema:
|
|
250
|
+
* type: string
|
|
251
|
+
* description: Question courante pour avancer dans l'ordre
|
|
252
|
+
* responses:
|
|
253
|
+
* 200:
|
|
254
|
+
* description: Prochaine question ou fin
|
|
255
|
+
* 404:
|
|
256
|
+
* description: Ressource non trouvée
|
|
257
|
+
* 500:
|
|
258
|
+
* description: Erreur interne
|
|
259
|
+
*/
|
|
170
260
|
this.get('/:id/nextQuestion', authenticatedOptions, async (req, res) => {
|
|
171
261
|
try {
|
|
172
262
|
const { id } = req.params;
|
|
@@ -239,7 +329,34 @@ class ResultRouter extends EnduranceRouter {
|
|
|
239
329
|
res.status(500).json({ message: 'Erreur interne du serveur' });
|
|
240
330
|
}
|
|
241
331
|
});
|
|
242
|
-
|
|
332
|
+
/**
|
|
333
|
+
* @swagger
|
|
334
|
+
* /results/question/{idQuestion}:
|
|
335
|
+
* get:
|
|
336
|
+
* summary: Obtenir une question
|
|
337
|
+
* description: Retourne une question; peut vérifier l'appartenance à une session si sessionId est fourni.
|
|
338
|
+
* tags: [Résultats]
|
|
339
|
+
* parameters:
|
|
340
|
+
* - in: path
|
|
341
|
+
* name: idQuestion
|
|
342
|
+
* required: true
|
|
343
|
+
* schema:
|
|
344
|
+
* type: string
|
|
345
|
+
* - in: query
|
|
346
|
+
* name: sessionId
|
|
347
|
+
* schema:
|
|
348
|
+
* type: string
|
|
349
|
+
* description: TestResult pour vérifier l'accès
|
|
350
|
+
* responses:
|
|
351
|
+
* 200:
|
|
352
|
+
* description: Question retournée
|
|
353
|
+
* 404:
|
|
354
|
+
* description: Question ou session non trouvée
|
|
355
|
+
* 403:
|
|
356
|
+
* description: Question non autorisée
|
|
357
|
+
* 500:
|
|
358
|
+
* description: Erreur interne
|
|
359
|
+
*/
|
|
243
360
|
this.get('/question/:idQuestion', authenticatedOptions, async (req, res) => {
|
|
244
361
|
try {
|
|
245
362
|
const { idQuestion } = req.params;
|
|
@@ -302,7 +419,37 @@ class ResultRouter extends EnduranceRouter {
|
|
|
302
419
|
res.status(500).json({ message: 'Erreur interne du serveur' });
|
|
303
420
|
}
|
|
304
421
|
});
|
|
305
|
-
|
|
422
|
+
/**
|
|
423
|
+
* @swagger
|
|
424
|
+
* /results/response:
|
|
425
|
+
* post:
|
|
426
|
+
* summary: Enregistrer une réponse
|
|
427
|
+
* description: Enregistre une réponse de candidat pour une question d'un TestResult et déclenche la correction si nécessaire.
|
|
428
|
+
* tags: [Résultats]
|
|
429
|
+
* requestBody:
|
|
430
|
+
* required: true
|
|
431
|
+
* content:
|
|
432
|
+
* application/json:
|
|
433
|
+
* schema:
|
|
434
|
+
* type: object
|
|
435
|
+
* required: [response, questionId, testResultId]
|
|
436
|
+
* properties:
|
|
437
|
+
* response:
|
|
438
|
+
* type: string
|
|
439
|
+
* questionId:
|
|
440
|
+
* type: string
|
|
441
|
+
* testResultId:
|
|
442
|
+
* type: string
|
|
443
|
+
* responses:
|
|
444
|
+
* 200:
|
|
445
|
+
* description: Réponse enregistrée
|
|
446
|
+
* 404:
|
|
447
|
+
* description: Ressource non trouvée
|
|
448
|
+
* 403:
|
|
449
|
+
* description: Question déjà répondue ou non autorisée
|
|
450
|
+
* 500:
|
|
451
|
+
* description: Erreur interne
|
|
452
|
+
*/
|
|
306
453
|
this.post('/response', authenticatedOptions, async (req, res) => {
|
|
307
454
|
try {
|
|
308
455
|
const { response, questionId, testResultId } = req.body;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@programisto/edrm-exams",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.9",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"prepare": "husky install"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@programisto/endurance
|
|
20
|
+
"@programisto/endurance": "^1.0.2",
|
|
21
21
|
"aws-sdk": "^2.1692.0",
|
|
22
22
|
"debug": "^4.3.7",
|
|
23
23
|
"fs": "^0.0.1-security",
|