Procházet zdrojové kódy

Fix Bug: Each student can get only one grade per subject

Eldar Mukhtarov před 9 měsíci
rodič
revize
3e3a13fe9a

+ 7 - 4
project/frontend-angular/src/app/grade-teacher/grade-teacher.html

@@ -12,12 +12,15 @@
         </select>
         @if (f.submitted && grade.invalid) {
           <div>
-            @if (grade.errors?.['required']) {
-              <div>Grade is required</div>
-            }
+        @if (grade.errors?.['required']) {
+          <div>Grade is required</div>
+        }
           </div>
         }
       </div>
+      <div *ngIf="errorMessage === 'Student already has a grade'">
+        Student already has a grade
+      </div>
       <div>
         <label for="student">Student</label>
         <select id="student" name="student" [(ngModel)]="form.student" #student="ngModel" required>
@@ -57,7 +60,7 @@
                 @if (grade.student.id === student.id) {
                   <div>
                     @if (selectedGrade === grade) {
-                      <select [(ngModel)]="selectedGradeValue" style="width: 60px;">
+                      <select [(ngModel)]="selectedGradeValue">
                         <option *ngFor="let g of gradeOptions" [value]="g">{{ g }}</option>
                       </select>
                       <button (click)="saveGrade()">Save</button>

+ 18 - 1
project/frontend-angular/src/app/grade-teacher/grade-teacher.ts

@@ -54,13 +54,30 @@ export class GradeTeacher implements OnInit {
         .subscribe(gradeList => this.gradeList = gradeList);
     }
   }
+  hasGradeForStudentInSubject(studentId: number, subjectId: number): boolean {
+    return !!this.gradeList?.some(
+      grade => grade.student.id === studentId && grade.subject.id === subjectId
+    );
+  }
 
   addGrade(): void {
     this.student = this.studentList?.find(student => student.id === Number(this.form.student));
+    if (!this.student) {
+      this.errorMessage = 'Please select a student.';
+      return;
+    }
+    if (
+      this.student.id !== undefined &&
+      this.subjectId !== undefined &&
+      this.hasGradeForStudentInSubject(this.student.id, this.subjectId)
+    ) {
+      this.errorMessage = 'Student already has a grade';
+      return;
+    }
     if (this.subject && this.student) {
       this.gradeToAdd = new Grade(this.form.grade, this.subject, this.student);
     }
-    if(this.gradeToAdd) {
+    if (this.gradeToAdd) {
       this.gradeService.addGrade(this.gradeToAdd).subscribe(
         data => {
           console.log(data);