feat: questions via student
This commit is contained in:
parent
30ec73a88d
commit
c31b471371
7 changed files with 153 additions and 171 deletions
|
@ -1,53 +1,43 @@
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import {
|
import {
|
||||||
createStudent,
|
createStudent,
|
||||||
deleteStudent,
|
deleteStudent, getAllStudentIds,
|
||||||
getAllStudents,
|
getAllStudents,
|
||||||
getStudent,
|
getStudent,
|
||||||
getStudentAssignments,
|
getStudentAssignments,
|
||||||
getStudentClasses,
|
getStudentClasses,
|
||||||
getStudentGroups,
|
getStudentGroups, getStudentQuestions,
|
||||||
getStudentSubmissions,
|
getStudentSubmissions,
|
||||||
} from '../services/students.js';
|
} from '../services/students.js';
|
||||||
import { ClassDTO } from '../interfaces/class.js';
|
import {MISSING_FIELDS_ERROR, MISSING_USERNAME_ERROR, NAME_NOT_FOUND_ERROR} from './users.js';
|
||||||
import { getAllAssignments } from '../services/assignments.js';
|
|
||||||
import { getUserHandler } from './users.js';
|
|
||||||
import { Student } from '../entities/users/student.entity.js';
|
|
||||||
import { StudentDTO } from '../interfaces/student.js';
|
import { StudentDTO } from '../interfaces/student.js';
|
||||||
import { getStudentRepository } from '../data/repositories.js';
|
|
||||||
import { UserDTO } from '../interfaces/user.js';
|
|
||||||
|
|
||||||
// TODO: accept arguments (full, ...)
|
|
||||||
// TODO: endpoints
|
|
||||||
export async function getAllStudentsHandler(req: Request, res: Response): Promise<void> {
|
export async function getAllStudentsHandler(req: Request, res: Response): Promise<void> {
|
||||||
const full = req.query.full === 'true';
|
const full = req.query.full === 'true';
|
||||||
|
|
||||||
const studentRepository = getStudentRepository();
|
const students: StudentDTO[] | string[] = full ? await getAllStudents() : await getAllStudentIds();
|
||||||
|
|
||||||
const students: StudentDTO[] | string[] = full ? await getAllStudents() : await getAllStudents();
|
|
||||||
|
|
||||||
if (!students) {
|
if (!students) {
|
||||||
res.status(404).json({ error: `Student not found.` });
|
res.status(404).json({ error: `Students not found.` });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
res.status(201).json(students);
|
res.json({students});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getStudentHandler(req: Request, res: Response): Promise<void> {
|
export async function getStudentHandler(req: Request, res: Response): Promise<void> {
|
||||||
const username = req.params.username;
|
const username = req.params.username;
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
res.status(400).json({ error: 'Missing required field: username' });
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const user = await getStudent(username);
|
const user = await getStudent(username);
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
res.status(404).json({
|
res.status(404).json(NAME_NOT_FOUND_ERROR(username));
|
||||||
error: `User with username '${username}' not found.`,
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,9 +48,7 @@ export async function createStudentHandler(req: Request, res: Response) {
|
||||||
const userData = req.body as StudentDTO;
|
const userData = req.body as StudentDTO;
|
||||||
|
|
||||||
if (!userData.username || !userData.firstName || !userData.lastName) {
|
if (!userData.username || !userData.firstName || !userData.lastName) {
|
||||||
res.status(400).json({
|
res.status(400).json(MISSING_FIELDS_ERROR);
|
||||||
error: 'Missing required fields: username, firstName, lastName',
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,15 +60,13 @@ export async function deleteStudentHandler(req: Request, res: Response) {
|
||||||
const username = req.params.username;
|
const username = req.params.username;
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
res.status(400).json({ error: 'Missing required field: username' });
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const deletedUser = await deleteStudent(username);
|
const deletedUser = await deleteStudent(username);
|
||||||
if (!deletedUser) {
|
if (!deletedUser) {
|
||||||
res.status(404).json({
|
res.status(404).json(NAME_NOT_FOUND_ERROR(username));
|
||||||
error: `User with username '${username}' not found.`,
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,25 +74,19 @@ export async function deleteStudentHandler(req: Request, res: Response) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getStudentClassesHandler(req: Request, res: Response): Promise<void> {
|
export async function getStudentClassesHandler(req: Request, res: Response): Promise<void> {
|
||||||
try {
|
const full = req.query.full === 'true';
|
||||||
const full = req.query.full === 'true';
|
const username = req.params.username;
|
||||||
const username = req.params.id;
|
|
||||||
|
|
||||||
const classes = await getStudentClasses(username, full);
|
if (!username) {
|
||||||
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
res.json({
|
return;
|
||||||
classes: classes,
|
|
||||||
endpoints: {
|
|
||||||
self: `${req.baseUrl}/${req.params.id}`,
|
|
||||||
classes: `${req.baseUrl}/${req.params.id}/invitations`,
|
|
||||||
questions: `${req.baseUrl}/${req.params.id}/assignments`,
|
|
||||||
students: `${req.baseUrl}/${req.params.id}/students`,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching learning objects:', error);
|
|
||||||
res.status(500).json({ error: 'Internal server error' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const classes = await getStudentClasses(username, full);
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
classes,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
@ -115,32 +95,62 @@ export async function getStudentClassesHandler(req: Request, res: Response): Pro
|
||||||
// Have this assignment.
|
// Have this assignment.
|
||||||
export async function getStudentAssignmentsHandler(req: Request, res: Response): Promise<void> {
|
export async function getStudentAssignmentsHandler(req: Request, res: Response): Promise<void> {
|
||||||
const full = req.query.full === 'true';
|
const full = req.query.full === 'true';
|
||||||
const username = req.params.id;
|
const username = req.params.username;
|
||||||
|
|
||||||
|
if (!username) {
|
||||||
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const assignments = getStudentAssignments(username, full);
|
const assignments = getStudentAssignments(username, full);
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
assignments: assignments,
|
assignments,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getStudentGroupsHandler(req: Request, res: Response): Promise<void> {
|
export async function getStudentGroupsHandler(req: Request, res: Response): Promise<void> {
|
||||||
const full = req.query.full === 'true';
|
const full = req.query.full === 'true';
|
||||||
const username = req.params.id;
|
const username = req.params.username;
|
||||||
|
|
||||||
|
if (!username) {
|
||||||
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const groups = await getStudentGroups(username, full);
|
const groups = await getStudentGroups(username, full);
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
groups: groups,
|
groups,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getStudentSubmissionsHandler(req: Request, res: Response): Promise<void> {
|
export async function getStudentSubmissionsHandler(req: Request, res: Response): Promise<void> {
|
||||||
const username = req.params.id;
|
const username = req.params.username;
|
||||||
|
|
||||||
|
if (!username) {
|
||||||
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const submissions = await getStudentSubmissions(username);
|
const submissions = await getStudentSubmissions(username);
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
submissions: submissions,
|
submissions,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getStudentQuestionsHandler(req: Request, res: Response): Promise<void> {
|
||||||
|
const username = req.params.username;
|
||||||
|
|
||||||
|
if (!username) {
|
||||||
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const questions = await getStudentQuestions(username, full);
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
questions,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -4,49 +4,40 @@ import {
|
||||||
deleteTeacher,
|
deleteTeacher,
|
||||||
getAllTeachers,
|
getAllTeachers,
|
||||||
getClassesByTeacher,
|
getClassesByTeacher,
|
||||||
getClassIdsByTeacher,
|
|
||||||
getQuestionIdsByTeacher,
|
|
||||||
getQuestionsByTeacher,
|
|
||||||
getStudentIdsByTeacher,
|
|
||||||
getStudentsByTeacher,
|
getStudentsByTeacher,
|
||||||
getTeacher,
|
getTeacher,
|
||||||
} from '../services/teachers.js';
|
} from '../services/teachers.js';
|
||||||
import { ClassDTO } from '../interfaces/class.js';
|
import { ClassDTO } from '../interfaces/class.js';
|
||||||
import { StudentDTO } from '../interfaces/student.js';
|
import { StudentDTO } from '../interfaces/student.js';
|
||||||
import { QuestionDTO, QuestionId } from '../interfaces/question.js';
|
import { QuestionDTO, QuestionId } from '../interfaces/question.js';
|
||||||
import { Teacher } from '../entities/users/teacher.entity.js';
|
|
||||||
import { TeacherDTO } from '../interfaces/teacher.js';
|
import { TeacherDTO } from '../interfaces/teacher.js';
|
||||||
import { getTeacherRepository } from '../data/repositories.js';
|
import {MISSING_FIELDS_ERROR, MISSING_USERNAME_ERROR, NAME_NOT_FOUND_ERROR} from "./users";
|
||||||
|
|
||||||
export async function getAllTeachersHandler(req: Request, res: Response): Promise<void> {
|
export async function getAllTeachersHandler(req: Request, res: Response): Promise<void> {
|
||||||
const full = req.query.full === 'true';
|
const full = req.query.full === 'true';
|
||||||
|
|
||||||
const teacherRepository = getTeacherRepository();
|
const teachers: TeacherDTO[] | string[] = await getAllTeachers(full);
|
||||||
|
|
||||||
const teachers: TeacherDTO[] | string[] = full ? await getAllTeachers() : await getAllTeachers();
|
|
||||||
|
|
||||||
if (!teachers) {
|
if (!teachers) {
|
||||||
res.status(404).json({ error: `Teacher not found.` });
|
res.status(404).json({ error: `Teachers not found.` });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
res.status(201).json(teachers);
|
res.json({teachers});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTeacherHandler(req: Request, res: Response): Promise<void> {
|
export async function getTeacherHandler(req: Request, res: Response): Promise<void> {
|
||||||
const username = req.params.username;
|
const username = req.params.username;
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
res.status(400).json({ error: 'Missing required field: username' });
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const user = await getTeacher(username);
|
const user = await getTeacher(username);
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
res.status(404).json({
|
res.status(404).json(NAME_NOT_FOUND_ERROR(username));
|
||||||
error: `User with username '${username}' not found.`,
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,9 +48,7 @@ export async function createTeacherHandler(req: Request, res: Response) {
|
||||||
const userData = req.body as TeacherDTO;
|
const userData = req.body as TeacherDTO;
|
||||||
|
|
||||||
if (!userData.username || !userData.firstName || !userData.lastName) {
|
if (!userData.username || !userData.firstName || !userData.lastName) {
|
||||||
res.status(400).json({
|
res.status(400).json(MISSING_FIELDS_ERROR);
|
||||||
error: 'Missing required fields: username, firstName, lastName',
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,15 +60,13 @@ export async function deleteTeacherHandler(req: Request, res: Response) {
|
||||||
const username = req.params.username;
|
const username = req.params.username;
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
res.status(400).json({ error: 'Missing required field: username' });
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const deletedUser = await deleteTeacher(username);
|
const deletedUser = await deleteTeacher(username);
|
||||||
if (!deletedUser) {
|
if (!deletedUser) {
|
||||||
res.status(404).json({
|
res.status(404).json(NAME_NOT_FOUND_ERROR(username));
|
||||||
error: `User with username '${username}' not found.`,
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,58 +74,43 @@ export async function deleteTeacherHandler(req: Request, res: Response) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTeacherClassHandler(req: Request, res: Response): Promise<void> {
|
export async function getTeacherClassHandler(req: Request, res: Response): Promise<void> {
|
||||||
try {
|
const username = req.params.username as string;
|
||||||
const username = req.params.username as string;
|
const full = req.query.full === 'true';
|
||||||
const full = req.query.full === 'true';
|
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
res.status(400).json({ error: 'Missing required field: username' });
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
const classes: ClassDTO[] | string[] = full ? await getClassesByTeacher(username) : await getClassIdsByTeacher(username);
|
|
||||||
|
|
||||||
res.status(201).json(classes);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching classes by teacher:', error);
|
|
||||||
res.status(500).json({ error: 'Internal server error' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const classes: ClassDTO[] | string[] = await getClassesByTeacher(username, full);
|
||||||
|
|
||||||
|
res.status(201).json(classes);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTeacherStudentHandler(req: Request, res: Response): Promise<void> {
|
export async function getTeacherStudentHandler(req: Request, res: Response): Promise<void> {
|
||||||
try {
|
const username = req.params.username as string;
|
||||||
const username = req.params.username as string;
|
const full = req.query.full === 'true';
|
||||||
const full = req.query.full === 'true';
|
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
res.status(400).json({ error: 'Missing required field: username' });
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
const students: StudentDTO[] | string[] = full ? await getStudentsByTeacher(username) : await getStudentIdsByTeacher(username);
|
|
||||||
|
|
||||||
res.status(201).json(students);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching students by teacher:', error);
|
|
||||||
res.status(500).json({ error: 'Internal server error' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const students: StudentDTO[] | string[] = await getStudentsByTeacher(username, full);
|
||||||
|
|
||||||
|
res.json({students});
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTeacherQuestionHandler(req: Request, res: Response): Promise<void> {
|
export async function getTeacherQuestionHandler(req: Request, res: Response): Promise<void> {
|
||||||
try {
|
const username = req.params.username as string;
|
||||||
const username = req.params.username as string;
|
const full = req.query.full === 'true';
|
||||||
const full = req.query.full === 'true';
|
|
||||||
|
|
||||||
if (!username) {
|
if (!username) {
|
||||||
res.status(400).json({ error: 'Missing required field: username' });
|
res.status(400).json(MISSING_USERNAME_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
const questions: QuestionDTO[] | QuestionId[] = full ? await getQuestionsByTeacher(username) : await getQuestionIdsByTeacher(username);
|
|
||||||
|
|
||||||
res.status(201).json(questions);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching questions by teacher:', error);
|
|
||||||
res.status(500).json({ error: 'Internal server error' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const questions: QuestionDTO[] | QuestionId[] = await getQuestionsByTeacher(username, full);
|
||||||
|
|
||||||
|
res.json({questions});
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,4 +54,12 @@ export class QuestionRepository extends DwengoEntityRepository<Question> {
|
||||||
orderBy: { timestamp: 'ASC' },
|
orderBy: { timestamp: 'ASC' },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public findAllByAuthor(author: Student): Promise<Question[]> {
|
||||||
|
return this.findAll({
|
||||||
|
where: { author },
|
||||||
|
orderBy: { timestamp: 'DESC' }, // new to old
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import {
|
||||||
getStudentAssignmentsHandler,
|
getStudentAssignmentsHandler,
|
||||||
getStudentClassesHandler,
|
getStudentClassesHandler,
|
||||||
getStudentGroupsHandler,
|
getStudentGroupsHandler,
|
||||||
getStudentHandler,
|
getStudentHandler, getStudentQuestionsHandler,
|
||||||
getStudentSubmissionsHandler,
|
getStudentSubmissionsHandler,
|
||||||
} from '../controllers/students.js';
|
} from '../controllers/students.js';
|
||||||
import { getStudentGroups } from '../services/students.js';
|
import { getStudentGroups } from '../services/students.js';
|
||||||
|
@ -17,30 +17,24 @@ router.get('/', getAllStudentsHandler);
|
||||||
|
|
||||||
router.post('/', createStudentHandler);
|
router.post('/', createStudentHandler);
|
||||||
|
|
||||||
router.delete('/', deleteStudentHandler);
|
|
||||||
|
|
||||||
router.delete('/:username', deleteStudentHandler);
|
router.delete('/:username', deleteStudentHandler);
|
||||||
|
|
||||||
// Information about a student's profile
|
// Information about a student's profile
|
||||||
router.get('/:username', getStudentHandler);
|
router.get('/:username', getStudentHandler);
|
||||||
|
|
||||||
// The list of classes a student is in
|
// The list of classes a student is in
|
||||||
router.get('/:id/classes', getStudentClassesHandler);
|
router.get('/:username/classes', getStudentClassesHandler);
|
||||||
|
|
||||||
// The list of submissions a student has made
|
// The list of submissions a student has made
|
||||||
router.get('/:id/submissions', getStudentSubmissionsHandler);
|
router.get('/:username/submissions', getStudentSubmissionsHandler);
|
||||||
|
|
||||||
// The list of assignments a student has
|
// The list of assignments a student has
|
||||||
router.get('/:id/assignments', getStudentAssignmentsHandler);
|
router.get('/:username/assignments', getStudentAssignmentsHandler);
|
||||||
|
|
||||||
// The list of groups a student is in
|
// The list of groups a student is in
|
||||||
router.get('/:id/groups', getStudentGroupsHandler);
|
router.get('/:username/groups', getStudentGroupsHandler);
|
||||||
|
|
||||||
// A list of questions a user has created
|
// A list of questions a user has created
|
||||||
router.get('/:id/questions', (req, res) => {
|
router.get('/:username/questions', getStudentQuestionsHandler);
|
||||||
res.json({
|
|
||||||
questions: ['0'],
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
|
@ -15,8 +15,6 @@ router.get('/', getAllTeachersHandler);
|
||||||
|
|
||||||
router.post('/', createTeacherHandler);
|
router.post('/', createTeacherHandler);
|
||||||
|
|
||||||
router.delete('/', deleteTeacherHandler);
|
|
||||||
|
|
||||||
router.get('/:username', getTeacherHandler);
|
router.get('/:username', getTeacherHandler);
|
||||||
|
|
||||||
router.delete('/:username', deleteTeacherHandler);
|
router.delete('/:username', deleteTeacherHandler);
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
import { getClassRepository, getGroupRepository, getStudentRepository, getSubmissionRepository } from '../data/repositories.js';
|
import {
|
||||||
import { Class } from '../entities/classes/class.entity.js';
|
getClassRepository,
|
||||||
import { Student } from '../entities/users/student.entity.js';
|
getGroupRepository,
|
||||||
|
getQuestionRepository,
|
||||||
|
getStudentRepository,
|
||||||
|
getSubmissionRepository
|
||||||
|
} from '../data/repositories.js';
|
||||||
import { AssignmentDTO } from '../interfaces/assignment.js';
|
import { AssignmentDTO } from '../interfaces/assignment.js';
|
||||||
import { ClassDTO, mapToClassDTO } from '../interfaces/class.js';
|
import { ClassDTO, mapToClassDTO } from '../interfaces/class.js';
|
||||||
import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js';
|
import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js';
|
||||||
import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js';
|
import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js';
|
||||||
import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js';
|
import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js';
|
||||||
import { getAllAssignments } from './assignments.js';
|
import { getAllAssignments } from './assignments.js';
|
||||||
import { UserService } from './users.js';
|
import {mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId} from "../interfaces/question";
|
||||||
|
|
||||||
export async function getAllStudents(): Promise<StudentDTO[]> {
|
export async function getAllStudents(): Promise<StudentDTO[]> {
|
||||||
const studentRepository = getStudentRepository();
|
const studentRepository = getStudentRepository();
|
||||||
|
@ -88,9 +92,7 @@ export async function getStudentAssignments(username: string, full: boolean): Pr
|
||||||
const classRepository = getClassRepository();
|
const classRepository = getClassRepository();
|
||||||
const classes = await classRepository.findByStudent(student);
|
const classes = await classRepository.findByStudent(student);
|
||||||
|
|
||||||
const assignments = (await Promise.all(classes.map(async (cls) => await getAllAssignments(cls.classId!, full)))).flat();
|
return (await Promise.all(classes.map(async (cls) => await getAllAssignments(cls.classId!, full)))).flat();
|
||||||
|
|
||||||
return assignments;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getStudentGroups(username: string, full: boolean): Promise<GroupDTO[]> {
|
export async function getStudentGroups(username: string, full: boolean): Promise<GroupDTO[]> {
|
||||||
|
@ -124,3 +126,20 @@ export async function getStudentSubmissions(username: string): Promise<Submissio
|
||||||
|
|
||||||
return submissions.map(mapToSubmissionDTO);
|
return submissions.map(mapToSubmissionDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getStudentQuestions(username: string, full: boolean): Promise<QuestionDTO[] | QuestionId[]> {
|
||||||
|
const studentRepository = getStudentRepository();
|
||||||
|
const student = await studentRepository.findByUsername(username);
|
||||||
|
|
||||||
|
if (!student) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const questionRepository = getQuestionRepository();
|
||||||
|
const questions = await questionRepository.findAllByAuthor(student);
|
||||||
|
|
||||||
|
if (full)
|
||||||
|
return questions.map(mapToQuestionDTO)
|
||||||
|
|
||||||
|
return questions.map(mapToQuestionId);
|
||||||
|
}
|
||||||
|
|
|
@ -5,23 +5,17 @@ import {
|
||||||
getStudentRepository,
|
getStudentRepository,
|
||||||
getTeacherRepository,
|
getTeacherRepository,
|
||||||
} from '../data/repositories.js';
|
} from '../data/repositories.js';
|
||||||
import { Teacher } from '../entities/users/teacher.entity.js';
|
|
||||||
import { ClassDTO, mapToClassDTO } from '../interfaces/class.js';
|
import { ClassDTO, mapToClassDTO } from '../interfaces/class.js';
|
||||||
import { getClassStudents } from './class.js';
|
import { getClassStudents } from './class.js';
|
||||||
import { StudentDTO } from '../interfaces/student.js';
|
import { mapToQuestionDTO, mapToQuestionId, QuestionDTO } from '../interfaces/question.js';
|
||||||
import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from '../interfaces/question.js';
|
|
||||||
import { UserService } from './users.js';
|
|
||||||
import { mapToUser } from '../interfaces/user.js';
|
|
||||||
import { mapToTeacher, mapToTeacherDTO, TeacherDTO } from '../interfaces/teacher.js';
|
import { mapToTeacher, mapToTeacherDTO, TeacherDTO } from '../interfaces/teacher.js';
|
||||||
|
|
||||||
export async function getAllTeachers(): Promise<TeacherDTO[]> {
|
export async function getAllTeachers(full: boolean): Promise<TeacherDTO[]> {
|
||||||
const teacherRepository = getTeacherRepository();
|
const teacherRepository = getTeacherRepository();
|
||||||
const users = await teacherRepository.findAll();
|
const users = await teacherRepository.findAll();
|
||||||
return users.map(mapToTeacherDTO);
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getAllTeacherIds(): Promise<string[]> {
|
if (full)
|
||||||
const users = await getAllTeachers();
|
return users.map(mapToTeacherDTO);
|
||||||
return users.map((user) => user.username);
|
return users.map((user) => user.username);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +58,7 @@ export async function deleteTeacher(username: string): Promise<TeacherDTO | null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchClassesByTeacher(username: string): Promise<ClassDTO[]> {
|
async function fetchClassesByTeacher(username: string): Promise<ClassDTO[]> {
|
||||||
const teacherRepository = getTeacherRepository();
|
const teacherRepository = getTeacherRepository();
|
||||||
const teacher = await teacherRepository.findByUsername(username);
|
const teacher = await teacherRepository.findByUsername(username);
|
||||||
if (!teacher) {
|
if (!teacher) {
|
||||||
|
@ -76,31 +70,24 @@ export async function fetchClassesByTeacher(username: string): Promise<ClassDTO[
|
||||||
return classes.map(mapToClassDTO);
|
return classes.map(mapToClassDTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getClassesByTeacher(username: string): Promise<ClassDTO[]> {
|
export async function getClassesByTeacher(username: string, full: boolean): Promise<ClassDTO[] | string[]> {
|
||||||
return await fetchClassesByTeacher(username);
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getClassIdsByTeacher(username: string): Promise<string[]> {
|
|
||||||
const classes = await fetchClassesByTeacher(username);
|
const classes = await fetchClassesByTeacher(username);
|
||||||
|
|
||||||
|
if (full)
|
||||||
|
return classes;
|
||||||
return classes.map((cls) => cls.id);
|
return classes.map((cls) => cls.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchStudentsByTeacher(username: string) {
|
export async function getStudentsByTeacher(username: string, full: boolean) {
|
||||||
const classes = await getClassIdsByTeacher(username);
|
const classes = await getClassesByTeacher(username, false);
|
||||||
|
|
||||||
return (await Promise.all(classes.map(async (id) => getClassStudents(id)))).flat();
|
const students = (await Promise.all(classes.map(async (id) => getClassStudents(id)))).flat();
|
||||||
}
|
if (full)
|
||||||
|
return students
|
||||||
export async function getStudentsByTeacher(username: string): Promise<StudentDTO[]> {
|
|
||||||
return await fetchStudentsByTeacher(username);
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getStudentIdsByTeacher(username: string): Promise<string[]> {
|
|
||||||
const students = await fetchStudentsByTeacher(username);
|
|
||||||
return students.map((student) => student.username);
|
return students.map((student) => student.username);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchTeacherQuestions(username: string): Promise<QuestionDTO[]> {
|
export async function getTeacherQuestions(username: string, full: boolean): Promise<QuestionDTO[]> {
|
||||||
const teacherRepository = getTeacherRepository();
|
const teacherRepository = getTeacherRepository();
|
||||||
const teacher = await teacherRepository.findByUsername(username);
|
const teacher = await teacherRepository.findByUsername(username);
|
||||||
if (!teacher) {
|
if (!teacher) {
|
||||||
|
@ -115,15 +102,9 @@ export async function fetchTeacherQuestions(username: string): Promise<QuestionD
|
||||||
const questionRepository = getQuestionRepository();
|
const questionRepository = getQuestionRepository();
|
||||||
const questions = await questionRepository.findAllByLearningObjects(learningObjects);
|
const questions = await questionRepository.findAllByLearningObjects(learningObjects);
|
||||||
|
|
||||||
return questions.map(mapToQuestionDTO);
|
if (full)
|
||||||
}
|
return questions.map(mapToQuestionDTO);
|
||||||
|
|
||||||
export async function getQuestionsByTeacher(username: string): Promise<QuestionDTO[]> {
|
|
||||||
return await fetchTeacherQuestions(username);
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getQuestionIdsByTeacher(username: string): Promise<QuestionId[]> {
|
|
||||||
const questions = await fetchTeacherQuestions(username);
|
|
||||||
|
|
||||||
return questions.map(mapToQuestionId);
|
return questions.map(mapToQuestionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue