get_submissions
Retrieve student assignment submissions from Moodle courses using specific student or assignment IDs. Simplify submission management and access relevant data efficiently.
Instructions
Obtiene las entregas de tareas en el curso configurado
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| assignmentId | No | ID opcional de la tarea. Si no se proporciona, se devolverán todas las entregas | |
| studentId | No | ID opcional del estudiante. Si no se proporciona, se devolverán entregas de todos los estudiantes |
Input Schema (JSON Schema)
{
"properties": {
"assignmentId": {
"description": "ID opcional de la tarea. Si no se proporciona, se devolverán todas las entregas",
"type": "number"
},
"studentId": {
"description": "ID opcional del estudiante. Si no se proporciona, se devolverán entregas de todos los estudiantes",
"type": "number"
}
},
"required": [],
"type": "object"
}
Implementation Reference
- src/index.ts:357-444 (handler)The primary handler function for the 'get_submissions' tool. It fetches assignments, submissions, and grades from the Moodle API, applies optional filters for studentId and assignmentId, processes the data, and returns a JSON-formatted response.private async getSubmissions(args: any) { const studentId = args.studentId; const assignmentId = args.assignmentId; console.error(`[API] Requesting submissions${studentId ? ` for student ${studentId}` : ''}`); // Primero obtenemos todas las tareas const assignmentsResponse = await this.axiosInstance.get('', { params: { wsfunction: 'mod_assign_get_assignments', courseids: [MOODLE_COURSE_ID], }, }); const assignments = assignmentsResponse.data.courses[0]?.assignments || []; // Si se especificó un ID de tarea, filtramos solo esa tarea const targetAssignments = assignmentId ? assignments.filter((a: any) => a.id === assignmentId) : assignments; if (targetAssignments.length === 0) { return { content: [ { type: 'text', text: 'No se encontraron tareas para el criterio especificado.', }, ], }; } // Para cada tarea, obtenemos todas las entregas const submissionsPromises = targetAssignments.map(async (assignment: any) => { const submissionsResponse = await this.axiosInstance.get('', { params: { wsfunction: 'mod_assign_get_submissions', assignmentids: [assignment.id], }, }); const submissions = submissionsResponse.data.assignments[0]?.submissions || []; // Obtenemos las calificaciones para esta tarea const gradesResponse = await this.axiosInstance.get('', { params: { wsfunction: 'mod_assign_get_grades', assignmentids: [assignment.id], }, }); const grades = gradesResponse.data.assignments[0]?.grades || []; // Si se especificó un ID de estudiante, filtramos solo sus entregas const targetSubmissions = studentId ? submissions.filter((s: any) => s.userid === studentId) : submissions; // Procesamos cada entrega const processedSubmissions = targetSubmissions.map((submission: any) => { const studentGrade = grades.find((g: any) => g.userid === submission.userid); return { userid: submission.userid, status: submission.status, timemodified: new Date(submission.timemodified * 1000).toISOString(), grade: studentGrade ? studentGrade.grade : 'No calificado', }; }); return { assignment: assignment.name, assignmentId: assignment.id, submissions: processedSubmissions.length > 0 ? processedSubmissions : 'No hay entregas', }; }); const results = await Promise.all(submissionsPromises); return { content: [ { type: 'text', text: JSON.stringify(results, null, 2), }, ], }; }
- src/index.ts:158-171 (schema)Input schema for the 'get_submissions' tool, defining optional parameters studentId and assignmentId.inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID opcional del estudiante. Si no se proporciona, se devolverán entregas de todos los estudiantes', }, assignmentId: { type: 'number', description: 'ID opcional de la tarea. Si no se proporciona, se devolverán todas las entregas', }, }, required: [], },
- src/index.ts:155-172 (registration)Registration of the 'get_submissions' tool in the ListToolsRequestSchema handler, including name, description, and input schema.{ name: 'get_submissions', description: 'Obtiene las entregas de tareas en el curso configurado', inputSchema: { type: 'object', properties: { studentId: { type: 'number', description: 'ID opcional del estudiante. Si no se proporciona, se devolverán entregas de todos los estudiantes', }, assignmentId: { type: 'number', description: 'ID opcional de la tarea. Si no se proporciona, se devolverán todas las entregas', }, }, required: [], }, },
- src/index.ts:249-250 (registration)Dispatch/registration in the CallToolRequestSchema switch statement that routes calls to the getSubmissions handler.case 'get_submissions': return await this.getSubmissions(request.params.arguments);
- src/index.ts:416-425 (helper)Helper logic within the handler that processes submissions by mapping them with corresponding grades and formatting timestamps.const processedSubmissions = targetSubmissions.map((submission: any) => { const studentGrade = grades.find((g: any) => g.userid === submission.userid); return { userid: submission.userid, status: submission.status, timemodified: new Date(submission.timemodified * 1000).toISOString(), grade: studentGrade ? studentGrade.grade : 'No calificado', }; });