Merge remote-tracking branch 'origin/dev' into feat/indieningen-kunnen-posten-en-bekijken-#194

# Conflicts:
#	backend/tests/setup-tests.ts
This commit is contained in:
Gerald Schmittinger 2025-04-16 16:31:18 +02:00
commit dd2cdf3fe9
46 changed files with 1670 additions and 123 deletions

View file

@ -2,8 +2,8 @@ import { BaseController } from "./base-controller";
import type { ClassDTO } from "@dwengo-1/common/interfaces/class";
import type { StudentsResponse } from "./students";
import type { AssignmentsResponse } from "./assignments";
import type { TeacherInvitationDTO } from "@dwengo-1/common/interfaces/teacher-invitation";
import type { TeachersResponse } from "@/controllers/teachers.ts";
import type { TeacherInvitationsResponse } from "@/controllers/teacher-invitations.ts";
export interface ClassesResponse {
classes: ClassDTO[] | string[];
@ -13,14 +13,6 @@ export interface ClassResponse {
class: ClassDTO;
}
export interface TeacherInvitationsResponse {
invites: TeacherInvitationDTO[];
}
export interface TeacherInvitationResponse {
invite: TeacherInvitationDTO;
}
export class ClassController extends BaseController {
constructor() {
super("class");

View file

@ -36,11 +36,11 @@ export class GroupController extends BaseController {
return this.put<GroupResponse>(`/${num}`, data);
}
async getSubmissions(groupNumber: number, full = true): Promise<SubmissionsResponse> {
return this.get<SubmissionsResponse>(`/${groupNumber}/submissions`, { full });
async getSubmissions(num: number, full = true): Promise<SubmissionsResponse> {
return this.get<SubmissionsResponse>(`/${num}/submissions`, { full });
}
async getQuestions(groupNumber: number, full = true): Promise<QuestionsResponse> {
return this.get<QuestionsResponse>(`/${groupNumber}/questions`, { full });
async getQuestions(num: number, full = true): Promise<QuestionsResponse> {
return this.get<QuestionsResponse>(`/${num}/questions`, { full });
}
}

View file

@ -15,13 +15,14 @@ export class LearningPathController extends BaseController {
async getBy(
hruid: string,
language: Language,
options?: { forGroup?: string; forStudent?: string },
forGroup?: { forGroup: number, assignmentNo: number, classId: string },
): Promise<LearningPath> {
const dtos = await this.get<LearningPathDTO[]>("/", {
hruid,
language,
forGroup: options?.forGroup,
forStudent: options?.forStudent,
forGroup: forGroup?.forGroup,
assignmentNo: forGroup?.assignmentNo,
classId: forGroup?.classId
});
return LearningPath.fromDTO(single(dtos));
}

View file

@ -1,5 +1,6 @@
import { BaseController } from "./base-controller";
import type { SubmissionDTO, SubmissionDTOId } from "@dwengo-1/common/interfaces/submission";
import type {Language} from "@dwengo-1/common/util/language";
export interface SubmissionsResponse {
submissions: SubmissionDTO[] | SubmissionDTOId[];
@ -10,19 +11,35 @@ export interface SubmissionResponse {
}
export class SubmissionController extends BaseController {
constructor(classid: string, assignmentNumber: number, groupNumber: number) {
super(`class/${classid}/assignments/${assignmentNumber}/groups/${groupNumber}`);
constructor(hruid: string) {
super(`learningObject/${hruid}/submissions`);
}
async getAll(full = true): Promise<SubmissionsResponse> {
return this.get<SubmissionsResponse>(`/`, { full });
async getAll(
language: Language, version: number, classId: string, assignmentId: number, groupId?: number, full = true
): Promise<SubmissionsResponse> {
return this.get<SubmissionsResponse>(
`/`,
{ language, version, classId, assignmentId, groupId, full }
);
}
async getByNumber(submissionNumber: number): Promise<SubmissionResponse> {
return this.get<SubmissionResponse>(`/${submissionNumber}`);
async getByNumber(
language: Language,
version: number,
classId: string,
assignmentId: number,
groupId: number,
submissionNumber: number
): Promise<SubmissionResponse> {
return this.get<SubmissionResponse>(
`/${submissionNumber}`,
{ language, version, classId, assignmentId, groupId },
);
}
async createSubmission(data: unknown): Promise<SubmissionResponse> {
async createSubmission(data: SubmissionDTO): Promise<SubmissionResponse> {
return this.post<SubmissionResponse>(`/`, data);
}

View file

@ -0,0 +1,36 @@
import { BaseController } from "@/controllers/base-controller.ts";
import type { TeacherInvitationData, TeacherInvitationDTO } from "@dwengo-1/common/interfaces/teacher-invitation";
export interface TeacherInvitationsResponse {
invitations: TeacherInvitationDTO[];
}
export interface TeacherInvitationResponse {
invitation: TeacherInvitationDTO;
}
export class TeacherInvitationController extends BaseController {
constructor() {
super("teachers/invitations");
}
async getAll(username: string, sent: boolean): Promise<TeacherInvitationsResponse> {
return this.get<TeacherInvitationsResponse>(`/${username}`, { sent });
}
async getBy(data: TeacherInvitationData): Promise<TeacherInvitationResponse> {
return this.get<TeacherInvitationResponse>(`/${data.sender}/${data.receiver}/${data.class}`);
}
async create(data: TeacherInvitationData): Promise<TeacherInvitationResponse> {
return this.post<TeacherInvitationResponse>("/", data);
}
async remove(data: TeacherInvitationData): Promise<TeacherInvitationResponse> {
return this.delete<TeacherInvitationResponse>(`/${data.sender}/${data.receiver}/${data.class}`);
}
async respond(data: TeacherInvitationData): Promise<TeacherInvitationResponse> {
return this.put<TeacherInvitationResponse>("/", data);
}
}