Skip to content

Commit

Permalink
add hard penalty for capacity, add new endpoint for groups
Browse files Browse the repository at this point in the history
  • Loading branch information
MihailCCfit committed Jun 24, 2024
1 parent 10c8129 commit 0e522c5
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,20 @@ public enum PenaltyEnum {
,
false
),
AudienceCapacity(
data -> {
LessonWithTime lesson = data.currentLesson();
double roomCapacity = lesson.cell().audience().groupCapacity();
double groupsAmount = lesson.groups().size();
if (groupsAmount > roomCapacity) {
return problem(-100, "Not enough space {%s} in the room %s, %s/%s groups/capacity"
.formatted(groupsAmount - roomCapacity, lesson.audience(), groupsAmount, roomCapacity));
}
return ok();
}
,
true
),
// FakePenalty(
// data -> {
// LessonWithTime lesson = data.currentLesson();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ public record AlgoSchedule(List<LessonWithTime> allLessons, PenaltyChecker.Check

}

public class AlgorithmStatus {
public static class AlgorithmStatus {
volatile double percentage = 1;
volatile boolean running = false;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.conferatus.timetable.backend.controller;

import java.util.List;

import lombok.RequiredArgsConstructor;
import org.conferatus.timetable.backend.dto.SemesterPlanDTO;
import org.conferatus.timetable.backend.dto.SubjectPlanDTO;
Expand All @@ -10,12 +8,9 @@
import org.conferatus.timetable.backend.services.SemesterPlanService;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
Expand Down Expand Up @@ -80,6 +75,19 @@ public ResponseEntity<SemesterPlanDTO> deleteSubjectPlan(
)));
}

@PostMapping("/subject/group")
public ResponseEntity<SemesterPlanDTO> addSubjectGroup(
@AuthenticationPrincipal User user,
@RequestParam("id") Long semesterId,
@RequestParam("subject_id") Long subjectId,
@RequestParam("group_id") Long groupId
) {
return ResponseEntity.ok(new SemesterPlanDTO(semesterPlanService.addSubjectGroup(
user, semesterId, subjectId, groupId
)));
}


@PostMapping("/subject/teacher")
public ResponseEntity<SemesterPlanDTO> addSubjectTeacher(
@AuthenticationPrincipal User user,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public ResponseEntity<AlgorithmStatus.StatusDto> getTaskState(@RequestParam(requ
AlgorithmStatus algorithmStatus = taskId != null
? algoService.getTaskStatus(taskId)
: algoService.getLastResult(user.getUniversity());
return ResponseEntity.ok(algorithmStatus.toStatusDto());
return ResponseEntity.ok(algorithmStatus == null ? null : algorithmStatus.toStatusDto());
}

@GetMapping("generate/result")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
package org.conferatus.timetable.backend.services;

import java.util.Collections;
import java.util.List;
import java.util.Objects;

import lombok.RequiredArgsConstructor;
import org.conferatus.timetable.backend.exception.ServerException;
import org.conferatus.timetable.backend.exception.ServerExceptions;
import org.conferatus.timetable.backend.model.entity.SemesterPlan;
import org.conferatus.timetable.backend.model.entity.SubjectPlan;
import org.conferatus.timetable.backend.model.entity.Teacher;
import org.conferatus.timetable.backend.model.entity.University;
import org.conferatus.timetable.backend.model.entity.User;
import org.conferatus.timetable.backend.model.entity.*;
import org.conferatus.timetable.backend.model.enums.AudienceType;
import org.conferatus.timetable.backend.repository.SemesterPlanRepository;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.List;
import java.util.Objects;

@Service
@RequiredArgsConstructor
public class SemesterPlanService {
Expand Down Expand Up @@ -143,4 +139,12 @@ public List<SubjectPlan> getAllSubjectPlans(User user, Long semesterId) {
SemesterPlan semesterPlan = getSemesterPlanByUserAndIdOrThrow(user, semesterId);
return semesterPlan.subjectPlans();
}

public SemesterPlan addSubjectGroup(User user, Long semesterId, Long subjectId, Long groupId) {
SemesterPlan semesterPlan = getSemesterPlanByUserAndIdOrThrow(user, semesterId);
SubjectPlan subjectPlan = getSubjectPlanInSemesterPlanByIdOrThrow(semesterPlan, subjectId);
StudyGroup group = studyGroupService.getGroup(user, groupId);
subjectPlan.groups().add(group);
return semesterPlanRepository.save(semesterPlan);
}
}

0 comments on commit 0e522c5

Please sign in to comment.