Merge remote-tracking branch 'origin/feat/user-routes' into feat/user-routes
# Conflicts: # backend/src/controllers/students.ts # backend/src/services/students.ts
This commit is contained in:
		
						commit
						d2cf5b95a9
					
				
					 11 changed files with 37 additions and 40 deletions
				
			
		|  | @ -6,10 +6,11 @@ import { | |||
|     getStudent, | ||||
|     getStudentAssignments, | ||||
|     getStudentClasses, | ||||
|     getStudentGroups, getStudentQuestions, | ||||
|     getStudentGroups, | ||||
|     getStudentQuestions, | ||||
|     getStudentSubmissions, | ||||
| } from '../services/students.js'; | ||||
| import {MISSING_FIELDS_ERROR, MISSING_USERNAME_ERROR, NAME_NOT_FOUND_ERROR} from './users.js'; | ||||
| import { MISSING_FIELDS_ERROR, MISSING_USERNAME_ERROR, NAME_NOT_FOUND_ERROR } from './users.js'; | ||||
| import { StudentDTO } from '../interfaces/student.js'; | ||||
| 
 | ||||
| 
 | ||||
|  | @ -23,7 +24,7 @@ export async function getAllStudentsHandler(req: Request, res: Response): Promis | |||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     res.json({students}); | ||||
|     res.json({ students }); | ||||
| } | ||||
| 
 | ||||
| export async function getStudentHandler(req: Request, res: Response): Promise<void> { | ||||
|  | @ -153,5 +154,5 @@ export async function getStudentQuestionsHandler(req: Request, res: Response): P | |||
| 
 | ||||
|     res.json({ | ||||
|         questions, | ||||
|     }) | ||||
|     }); | ||||
| } | ||||
|  |  | |||
|  | @ -1,17 +1,10 @@ | |||
| import { Request, Response } from 'express'; | ||||
| import { | ||||
|     createTeacher, | ||||
|     deleteTeacher, | ||||
|     getAllTeachers, | ||||
|     getClassesByTeacher, | ||||
|     getStudentsByTeacher, | ||||
|     getTeacher, | ||||
| } from '../services/teachers.js'; | ||||
| import { createTeacher, deleteTeacher, getAllTeachers, getClassesByTeacher, getStudentsByTeacher, getTeacher } from '../services/teachers.js'; | ||||
| import { ClassDTO } from '../interfaces/class.js'; | ||||
| import { StudentDTO } from '../interfaces/student.js'; | ||||
| import { QuestionDTO, QuestionId } from '../interfaces/question.js'; | ||||
| import { TeacherDTO } from '../interfaces/teacher.js'; | ||||
| import {MISSING_FIELDS_ERROR, MISSING_USERNAME_ERROR, NAME_NOT_FOUND_ERROR} from "./users"; | ||||
| import { MISSING_FIELDS_ERROR, MISSING_USERNAME_ERROR, NAME_NOT_FOUND_ERROR } from './users'; | ||||
| 
 | ||||
| export async function getAllTeachersHandler(req: Request, res: Response): Promise<void> { | ||||
|     const full = req.query.full === 'true'; | ||||
|  | @ -23,7 +16,7 @@ export async function getAllTeachersHandler(req: Request, res: Response): Promis | |||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     res.json({teachers}); | ||||
|     res.json({ teachers }); | ||||
| } | ||||
| 
 | ||||
| export async function getTeacherHandler(req: Request, res: Response): Promise<void> { | ||||
|  | @ -98,7 +91,7 @@ export async function getTeacherStudentHandler(req: Request, res: Response): Pro | |||
| 
 | ||||
|     const students: StudentDTO[] | string[] = await getStudentsByTeacher(username, full); | ||||
| 
 | ||||
|     res.json({students}); | ||||
|     res.json({ students }); | ||||
| } | ||||
| 
 | ||||
| export async function getTeacherQuestionHandler(req: Request, res: Response): Promise<void> { | ||||
|  | @ -112,5 +105,5 @@ export async function getTeacherQuestionHandler(req: Request, res: Response): Pr | |||
| 
 | ||||
|     const questions: QuestionDTO[] | QuestionId[] = await getQuestionsByTeacher(username, full); | ||||
| 
 | ||||
|     res.json({questions}); | ||||
|     res.json({ questions }); | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| export const MISSING_USERNAME_ERROR = { error: 'Missing required field: username' }; | ||||
| 
 | ||||
| export function NAME_NOT_FOUND_ERROR(username: string){ | ||||
|     return {error: `User with username '${username}' not found.`}; | ||||
| export function NAME_NOT_FOUND_ERROR(username: string) { | ||||
|     return { error: `User with username '${username}' not found.` }; | ||||
| } | ||||
| 
 | ||||
| export const MISSING_FIELDS_ERROR = { error: 'Missing required fields: username, firstName, lastName'} | ||||
| export const MISSING_FIELDS_ERROR = { error: 'Missing required fields: username, firstName, lastName' }; | ||||
|  |  | |||
|  | @ -58,8 +58,7 @@ export class QuestionRepository extends DwengoEntityRepository<Question> { | |||
|     public findAllByAuthor(author: Student): Promise<Question[]> { | ||||
|         return this.findAll({ | ||||
|             where: { author }, | ||||
|             orderBy: { timestamp: 'DESC' }, // new to old
 | ||||
|             orderBy: { timestamp: 'DESC' }, // New to old
 | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -6,7 +6,8 @@ import { | |||
|     getStudentAssignmentsHandler, | ||||
|     getStudentClassesHandler, | ||||
|     getStudentGroupsHandler, | ||||
|     getStudentHandler, getStudentQuestionsHandler, | ||||
|     getStudentHandler, | ||||
|     getStudentQuestionsHandler, | ||||
|     getStudentSubmissionsHandler, | ||||
| } from '../controllers/students.js'; | ||||
| import { getStudentGroups } from '../services/students.js'; | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ import { | |||
|     getGroupRepository, | ||||
|     getQuestionRepository, | ||||
|     getStudentRepository, | ||||
|     getSubmissionRepository | ||||
|     getSubmissionRepository, | ||||
| } from '../data/repositories.js'; | ||||
| import { AssignmentDTO } from '../interfaces/assignment.js'; | ||||
| import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; | ||||
|  | @ -11,7 +11,7 @@ import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js | |||
| import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; | ||||
| import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js'; | ||||
| import { getAllAssignments } from './assignments.js'; | ||||
| import {mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId} from "../interfaces/question"; | ||||
| import { mapToQuestionDTO, mapToQuestionId, QuestionDTO, QuestionId } from '../interfaces/question'; | ||||
| 
 | ||||
| export async function getAllStudents(full: boolean): Promise<StudentDTO[] | string[]> { | ||||
|     const studentRepository = getStudentRepository(); | ||||
|  |  | |||
|  | @ -14,8 +14,9 @@ export async function getAllTeachers(full: boolean): Promise<TeacherDTO[]> { | |||
|     const teacherRepository = getTeacherRepository(); | ||||
|     const users = await teacherRepository.findAll(); | ||||
| 
 | ||||
|     if (full) | ||||
|     if (full) { | ||||
|         return users.map(mapToTeacherDTO); | ||||
|     } | ||||
|     return users.map((user) => user.username); | ||||
| } | ||||
| 
 | ||||
|  | @ -73,17 +74,19 @@ async function fetchClassesByTeacher(username: string): Promise<ClassDTO[]> { | |||
| export async function getClassesByTeacher(username: string, full: boolean): Promise<ClassDTO[] | string[]> { | ||||
|     const classes = await fetchClassesByTeacher(username); | ||||
| 
 | ||||
|     if (full) | ||||
|     if (full) { | ||||
|         return classes; | ||||
|     } | ||||
|     return classes.map((cls) => cls.id); | ||||
| } | ||||
| 
 | ||||
| export async function getStudentsByTeacher(username: string, full: boolean) { | ||||
|     const classes = await getClassesByTeacher(username, false); | ||||
| 
 | ||||
|     const students =  (await Promise.all(classes.map(async (id) => getClassStudents(id)))).flat(); | ||||
|     if (full) | ||||
|         return students | ||||
|     const students = (await Promise.all(classes.map(async (id) => getClassStudents(id)))).flat(); | ||||
|     if (full) { | ||||
|         return students; | ||||
|     } | ||||
|     return students.map((student) => student.username); | ||||
| } | ||||
| 
 | ||||
|  | @ -102,9 +105,9 @@ export async function getTeacherQuestions(username: string, full: boolean): Prom | |||
|     const questionRepository = getQuestionRepository(); | ||||
|     const questions = await questionRepository.findAllByLearningObjects(learningObjects); | ||||
| 
 | ||||
|     if (full) | ||||
|     if (full) { | ||||
|         return questions.map(mapToQuestionDTO); | ||||
|     } | ||||
| 
 | ||||
|     return questions.map(mapToQuestionId); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue
	
	 Gabriellvl
						Gabriellvl