Skip to content

Commit

Permalink
wip: tmp scheduler endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
dlg1206 committed Apr 20, 2024
1 parent 8c7cd24 commit 5947390
Show file tree
Hide file tree
Showing 10 changed files with 200 additions and 19 deletions.
28 changes: 28 additions & 0 deletions src/main/java/com/uh/rainbow/controller/CampusController.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.uh.rainbow.dto.identifier.IdentifierDTO;
import com.uh.rainbow.dto.response.*;
import com.uh.rainbow.service.HTMLParserService;
import com.uh.rainbow.service.SchedulerService;
import com.uh.rainbow.util.SourceURL;
import com.uh.rainbow.util.filter.CourseFilter;
import com.uh.rainbow.util.logging.Logger;
Expand Down Expand Up @@ -34,6 +35,7 @@ public class CampusController {

private final static Logger LOGGER = new Logger(CampusController.class);
private final HTMLParserService htmlParserService = new HTMLParserService();
private final SchedulerService schedulerService = new SchedulerService();

/**
* Util logging method for reporting HTTP failures
Expand Down Expand Up @@ -101,6 +103,32 @@ public ResponseEntity<ResponseDTO> getAllTerms(@PathVariable String instID) {
}
}

/**
* GET Endpoint: /campuses/{instID}/terms/{termID}/subjects
* Get list of subjects for a given campus and term
*
* @param instID Inst ID to search for subjects
* @param termID Term ID to search for subjects
* @return List of subjects for a given campus and term
*/
@GetMapping(value = "/{instID}/terms/{termID}/schedule")
public ResponseEntity<ResponseDTO> getSchedules(@PathVariable String instID, @PathVariable String termID, @RequestParam List<String> courses) {
try {
// Get all subjects
return new ResponseEntity<>(
new IdentifierResponseDTO(new SourceURL(instID, termID), this.htmlParserService.parseSubjects(instID, termID)),
HttpStatus.OK
);
} catch (HttpStatusException e) {
// Report and return html access failure
reportHTTPAccessError(MessageBuilder.Type.SUBJECT, e);
return new ResponseEntity<>(new BadAccessResponseDTO(e), HttpStatus.BAD_REQUEST);
} catch (IOException e) {
// Internal server error
LOGGER.error(new MessageBuilder(MessageBuilder.Type.SUBJECT).addDetails(e));
return new ResponseEntity<>(new APIErrorResponseDTO(e), HttpStatus.INTERNAL_SERVER_ERROR);
}
}

/**
* GET Endpoint: /campuses/{instID}/terms/{termID}/subjects
Expand Down
52 changes: 52 additions & 0 deletions src/main/java/com/uh/rainbow/controller/SchedulerController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.uh.rainbow.controller;

import com.uh.rainbow.dto.request.ScheduleTemplate;
import com.uh.rainbow.dto.response.ResponseDTO;
import com.uh.rainbow.service.HTMLParserService;
import com.uh.rainbow.service.SchedulerService;
import com.uh.rainbow.util.filter.CourseFilter;
import com.uh.rainbow.util.logging.Logger;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
* <b>File:</b> SchedulerController
* <p>
* <b>Description:</b>
*
* @author Derek Garcia
*/
@RequestMapping("/v1/scheduler")
@RestController(value = "SchedulerController")
public class SchedulerController {

private final static Logger LOGGER = new Logger(SchedulerController.class);
private final HTMLParserService htmlParserService = new HTMLParserService();
private final SchedulerService schedulerService = new SchedulerService();

/**
* GET Endpoint: /scheduler
* Get list of University of Hawaii Campuses
*
* @return List of University of Hawaii Campuses and their ID's
*/
@GetMapping(value = "")
public ResponseEntity<ResponseDTO> getSchedules( @PathVariable String instID,
@PathVariable String termID,
@PathVariable String subjectID,
@RequestParam(required = false) List<String> crn,
@RequestParam(required = false) List<String> code,
@RequestParam(required = false) String start_after,
@RequestParam(required = false) String end_before,
@RequestParam(required = false) String online,
@RequestParam(required = false) String sync,
@RequestParam(required = false) List<String> day,
@RequestParam(required = false) List<String> instructor,
@RequestParam(required = false) List<String> keyword) {
// var cf = new CourseFilter.Builder()
// var foo = this.htmlParserService.parseCourses()
return null;
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/uh/rainbow/dto/request/BufferDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.uh.rainbow.dto.request;

/**
* <b>File:</b> BufferDTO.java
* <p>
* <b>Description:</b>
*
* @author Derek Garcia
*/
public record BufferDTO() {
}
11 changes: 11 additions & 0 deletions src/main/java/com/uh/rainbow/dto/request/RulesDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.uh.rainbow.dto.request;

/**
* <b>File:</b> RulesDTO.java
* <p>
* <b>Description:</b>
*
* @author Derek Garcia
*/
public record RulesDTO() {
}
13 changes: 13 additions & 0 deletions src/main/java/com/uh/rainbow/dto/request/ScheduleTemplate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.uh.rainbow.dto.request;

import java.util.List;

/**
* <b>File:</b> ScheduleTemplate.java
* <p>
* <b>Description:</b>
*
* @author Derek Garcia
*/
public record ScheduleTemplate(String instID, String termID, List<String> courses) {
}
24 changes: 24 additions & 0 deletions src/main/java/com/uh/rainbow/dto/response/ScheduleResponseDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.uh.rainbow.dto.response;

import com.uh.rainbow.dto.schedule.ScheduleDTO;

import java.util.List;

/**
* <b>File:</b> ScheduleResponseDTO.java
* <p>
* <b>Description:</b>
*
* @author Derek Garcia
*/
public class ScheduleResponseDTO extends ResponseDTO {
public final List<ScheduleDTO> schedules;

/**
* Create new Schedule response with list of valid schedules
*
*/
public ScheduleResponseDTO(List<ScheduleDTO> schedules) {
this.schedules = schedules;
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/uh/rainbow/dto/schedule/ScheduleDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.uh.rainbow.dto.schedule;

import java.util.List;

/**
* <b>File:</b> ScheduleDTO.java
* <p>
* <b>Description:</b>
*
* @author Derek Garcia
*/
public record ScheduleDTO(
List<ScheduleMeetingDTO> tba,
List<ScheduleMeetingDTO> sunday,
List<ScheduleMeetingDTO> monday,
List<ScheduleMeetingDTO> tuesday,
List<ScheduleMeetingDTO> wednesday,
List<ScheduleMeetingDTO> thursday,
List<ScheduleMeetingDTO> friday,
List<ScheduleMeetingDTO> saturday) {
}
11 changes: 11 additions & 0 deletions src/main/java/com/uh/rainbow/dto/schedule/ScheduleMeetingDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.uh.rainbow.dto.schedule;

/**
* <b>File:</b> ScheduleMeetingDTO.java
* <p>
* <b>Description:</b>
*
* @author Derek Garcia
*/
public record ScheduleMeetingDTO() {
}
9 changes: 9 additions & 0 deletions src/main/java/com/uh/rainbow/entities/PotentialSchedule.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.uh.rainbow.entities;

import com.uh.rainbow.dto.schedule.ScheduleDTO;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -48,6 +50,13 @@ private PotentialSchedule(PotentialSchedule other, Section next) {
this.remainingSections.removeIf((s) -> s.getCourse().equals(next.getCourse()));
}


public ScheduleDTO toScheduleDTO(){
for(Section section : this.sections){
section.
}
}

/**
* Test to see if this schedule is complete
*
Expand Down
39 changes: 20 additions & 19 deletions src/main/java/com/uh/rainbow/service/SchedulerService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.uh.rainbow.service;

import com.uh.rainbow.dto.course.CourseDTO;
import com.uh.rainbow.dto.schedule.ScheduleDTO;
import com.uh.rainbow.entities.Course;
import com.uh.rainbow.entities.PotentialSchedule;
import com.uh.rainbow.entities.Section;
Expand All @@ -21,25 +22,6 @@
@Service
public class SchedulerService {

/**
* Generate list of valid schedules
*
* @param courses List of courses to include in the schedule
* @return List of valid schedules
*/
public List<PotentialSchedule> schedule(List<CourseDTO> courses) {
// Convert course DTO back into courses
List<Course> cor = new ArrayList<>();
courses.forEach((c) -> cor.add(new Course(c.cid(), c.name(), c.credits())));

// Convert section DTO back into sections
List<Section> sections = new ArrayList<>();
courses.forEach((c) -> sections.addAll(c.toSections())); // todo add buffers

// Generate all possible schedules
return new Scheduler(cor).solve(new PotentialSchedule(sections));
}

/**
* Scheduler that generates valid schedules
*/
Expand Down Expand Up @@ -76,4 +58,23 @@ public List<PotentialSchedule> solve(PotentialSchedule potentialSchedule) {

}

/**
* Generate list of valid schedules
*
* @param courses List of courses to include in the schedule
* @return List of valid schedules
*/
public List<ScheduleDTO> schedule(List<CourseDTO> courses) {
// Convert course DTO back into courses
List<Course> cor = new ArrayList<>();
courses.forEach((c) -> cor.add(new Course(c.cid(), c.name(), c.credits())));

// Convert section DTO back into sections
List<Section> sections = new ArrayList<>();
courses.forEach((c) -> sections.addAll(c.toSections())); // todo add buffers

// Generate all possible schedules
return new Scheduler(cor).solve(new PotentialSchedule(sections));
}

}

0 comments on commit 5947390

Please sign in to comment.