Skip to content

Commit

Permalink
Aftral[premieroctet#111]: moved evaluation resources from session to …
Browse files Browse the repository at this point in the history
…program
  • Loading branch information
SeghirOumo committed Sep 4, 2024
1 parent 79f6845 commit fcfb90f
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 58 deletions.
8 changes: 4 additions & 4 deletions backend/web/server/plugins/aftral-lms/functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ require('../../models/Search')
require('../../models/Chapter') //Added chapter, it was removed somehow
const { computeStatistics } = require('./statistics')
const { searchUsers, searchBlocks } = require('./search')
const { getUserHomeworks, getResourceType, getAchievementRules, getBlockSpentTime, getBlockSpentTimeStr, getResourcesCount, getFinishedResourcesCount, getRessourceSession } = require('./resources')
const { getUserHomeworks, getResourceType, getAchievementRules, getBlockSpentTime, getBlockSpentTimeStr, getResourcesCount, getFinishedResourcesCount, getRessourceSession, getBlockNote } = require('./resources')
const { getBlockStatus, setParentSession, LINKED_ATTRIBUTES, onBlockAction, LINKED_ATTRIBUTES_CONVERSION, getSession, getAvailableCodes, getBlockHomeworks, getBlockHomeworksSubmitted, getBlockHomeworksMissing, getBlockTraineesCount, getBlockFinishedChildren, getSessionConversations, propagateAttributes, getBlockTicketsCount} = require('./block')
const { getResourcesProgress } = require('./resources')
const { getResourceAnnotation } = require('./resources')
const { setResourceAnnotation } = require('./resources')
const { isResourceMine } = require('./resources')
const { getCertificate, PROGRAM_CERTIFICATE_ATTRIBUTES } = require('./program')
const { getCertificate, PROGRAM_CERTIFICATE_ATTRIBUTES, getEvalResources } = require('./program')
const { getPathsForBlock, getTemplateForBlock } = require('./cartography')
const Program = require('../../models/Program')
const Resource = require('../../models/Resource')
Expand All @@ -48,7 +48,6 @@ const SessionConversation = require('../../models/SessionConversation')
const { getUserPermissions } = require('./user')
const Search = require('../../models/Search')
const Conversation = require('../../models/Conversation')
const { getEvalResources } = require('./session')

const GENERAL_FEED_ID='FFFFFFFFFFFFFFFFFFFFFFFF'

Expand Down Expand Up @@ -105,6 +104,7 @@ BLOCK_MODELS.forEach(model => {
declareComputedField({model, field: 'finished_children', getterFn: getBlockFinishedChildren, type:`Array`})
declareComputedField({model, field: 'tickets_count', getterFn: getBlockTicketsCount})
declareEnumField({model, field: 'scale', enumValues: SCALE})
declareComputedField({model, field: 'note', getterFn: getBlockNote})
})

//Program start
Expand All @@ -116,6 +116,7 @@ declareComputedField({
requires:PROGRAM_CERTIFICATE_ATTRIBUTES.join(','),
getterFn: getCertificate,
})
declareComputedField({model: 'program', field: 'evaluation_resources', getterFn: getEvalResources})
//Program end

declareComputedField({model: 'resource', field: 'mine', getterFn: isResourceMine})
Expand Down Expand Up @@ -219,7 +220,6 @@ CONVERSATION_MODELS.forEach(model => {

// Session start
declareComputedField({model: 'session', field: 'conversations', getterFn: getSessionConversations})
declareComputedField({model: 'session', field: 'evaluation_resources', getterFn: getEvalResources})
// Session end

const preCreate = async ({model, params, user}) => {
Expand Down
27 changes: 25 additions & 2 deletions backend/web/server/plugins/aftral-lms/program.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ const ProductCode=require('../../models/ProductCode')
const Program=require('../../models/Program')
const lodash=require('lodash')
const User = require('../../models/User')
const { getResourcesProgress } = require('./resources')
const { getResourcesProgress, getBlockResources } = require('./resources')
const { generateDocument } = require('../../../utils/fillForm')
const path = require('path')
const { loadFromDb } = require('../../utils/database')
const Resource = require('../../models/Resource')
const ROOT = path.join(__dirname, `../../../static/assets/aftral_templates`)
const TEMPLATE_NAME = 'template1'

Expand Down Expand Up @@ -57,7 +59,28 @@ const getCertificate = async (userId, params, data) => {
return result
}

const getEvalResources = async (userId, params, data, fields) => {
const resourceIds = await getBlockResources(data._id)

const newParams = {
[`filter._id`]: {$in: resourceIds},
}
const user = await User.findById(userId)

let resources = await loadFromDb({
model: `resource`,
user,
fields: [...fields, `note`, `scale`, `homework_mode`],
params: newParams
})

resources = resources.filter(r =>
r.homework_mode == true || (r.note !== undefined && r.note !== null) || (r.scale !== undefined && r.scale !== null)
)

return resources.map(r => new Resource(r))
}

module.exports={
getCertificate, PROGRAM_CERTIFICATE_ATTRIBUTES
getCertificate, PROGRAM_CERTIFICATE_ATTRIBUTES, getEvalResources
}
6 changes: 5 additions & 1 deletion backend/web/server/plugins/aftral-lms/resources.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,12 @@ const canReplay = async ({dataId, user }) => {
return blockHasStatus({user, block: dataId, status: BLOCK_STATUS_FINISHED})
}

const getBlockNote = async (userId, params, data) => {
return (await getProgress({user: userId, block: data._id}))?.note || null
}

module.exports={
getFinishedResourcesCount, isResourceMine, setResourceAnnotation, getResourceAnnotation, getResourcesProgress, getUserHomeworks, onSpentTimeChanged,
getResourceType, getBlockSpentTime, getBlockSpentTimeStr, getResourcesCount, canPlay, canReplay, canResume,
getBlockResources
getBlockResources, getBlockNote
}
4 changes: 3 additions & 1 deletion backend/web/server/plugins/aftral-lms/schemas/BlockSchema.js
Original file line number Diff line number Diff line change
Expand Up @@ -254,11 +254,13 @@ const BlockSchema = new Schema({
type: Number,
required: false,
},
// Note or scale is set by the trainer
// Computed
note: {
type: Number,
required: false,
default: null,
},
// Scale is set by the trainer
scale: {
type: String,
enum: Object.keys(SCALE),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,15 @@ const ProgramSchema = new Schema({
type: String,
required: false,
},
// Computed
evaluation_resources: {
type: [{
type: Schema.Types.ObjectId,
ref: `block`,
}],
required: true,
default: []
}
}, {...schemaOptions, ...BLOCK_DISCRIMINATOR})

/* eslint-disable prefer-arrow-callback */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,10 @@ const ProgressSchema = new Schema({
homeworks: [{
type: Schema.Types.ObjectId,
ref: 'homework'
}]
}],
note: {
type: Number,
},
}, {...schemaOptions, ...BLOCK_DISCRIMINATOR})

module.exports = ProgressSchema
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,6 @@ const SessionSchema = new Schema({
required: true,
default: [],
},
// Computed
evaluation_resources: {
type: [{
type: Schema.Types.ObjectId,
ref: `block`,
}],
required: true,
default: []
}
}, {...schemaOptions, ...BLOCK_DISCRIMINATOR})

module.exports = SessionSchema
30 changes: 0 additions & 30 deletions backend/web/server/plugins/aftral-lms/session.js

This file was deleted.

3 changes: 2 additions & 1 deletion backend/web/server/plugins/aftral-lms/statistics.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ const fillSession = async (session, trainee) => {
const programId = program._id
const range = program.children[0].type == 'chapter' ? 5 : 4
let fields=lodash.range(range).map(childCount =>
['name', 'resources_count', 'finished_resources_count', 'resources_progress', 'achievement_status', 'spent_time_str']
['name', 'resources_count', 'finished_resources_count', 'resources_progress', 'achievement_status', 'spent_time_str', ]
.map(att => [...Array(childCount).fill('children'), att].join('.'))
)
fields=lodash.flatten(fields)
fields= [...fields, 'evaluation_resources']
return Promise.all(session.trainees.map(trainee => {
return loadFromDb({model: 'program', id: programId, fields, user: trainee})
.then(prog => {
Expand Down
10 changes: 5 additions & 5 deletions backend/web/tests/aftral-lms/block.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ describe('User', () => {
homework_mode: false,
success_note_min:0,
success_note_max: 20,
note: 20
})

block5 = await Block.create({
Expand Down Expand Up @@ -175,6 +174,7 @@ describe('User', () => {
block:id,
homeworks:[homework1._id],
achievement_status: BLOCK_STATUS_FINISHED,
note: 10,
})
progress2 = await Progress.create({
user:trainee2._id,
Expand Down Expand Up @@ -271,11 +271,11 @@ describe('User', () => {
})

it.only(`must return resources on session`, async () => {
const [session] = await loadFromDb({
model: `session`,
user: trainer,
const [program] = await loadFromDb({
model: `program`,
user: trainee1,
fields: [`evaluation_resources.name`]
})
expect(session.evaluation_resources.length).toEqual(3)
expect(program.evaluation_resources.length).toEqual(2)
})
})
17 changes: 13 additions & 4 deletions backend/web/tests/aftral-lms/statistics.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,9 @@ describe('Test models computations', () => {
name: `Test sequence`,
creator: trainer._id
})

await addChildAction({parent: program._id, child: modulee._id}, conceptor)
await addChildAction({parent: modulee._id, child: sequence._id}, conceptor)
await addChildAction({parent: sequence._id, child: resource._id}, conceptor)
await addChildAction({parent: modulee._id, child: sequence._id}, conceptor)
await addChildAction({parent: program._id, child: modulee._id}, conceptor)
await addChildAction({parent: session._id, child: program._id}, conceptor)

fields = [
Expand All @@ -111,6 +110,7 @@ describe('Test models computations', () => {
`sessions`,
`sessions.trainees.statistics.children.children`,
`sessions.trainees.statistics.children.children.name`,
`sessions.trainees.statistics.evaluation_resources`,
`sessions.trainees`,
]
})
Expand All @@ -131,12 +131,21 @@ describe('Test models computations', () => {
expect(idEqual(data[0].sessions[0].trainees[0]._id, trainee1._id)).toBeTruthy()
})

it.only(`must return all trainees statistics`, async () => {
it(`must return all trainees statistics`, async () => {
const data = await loadFromDb({
model: `statistics`,
user: trainer,
fields,
})
expect(data[0].sessions[0].trainees.length).toEqual(2)
})

it('`must return all trainees statistics including evaluation_resources', async () => {
const data = await loadFromDb({
model: `statistics`,
user: trainer,
fields,
})
expect(data[0].sessions[0].trainees[0].statistics.evaluation_resources.length).toEqual(1)
})
})

0 comments on commit fcfb90f

Please sign in to comment.