Skip to content

Commit

Permalink
Added massive load of grades (#116)
Browse files Browse the repository at this point in the history
- Added massive load of grades for students of a given course
- Added massive load of final grades for students in a final inscription of a given coursea
  • Loading branch information
gibarsin committed Feb 5, 2017
1 parent a58c5ac commit 159bf8e
Show file tree
Hide file tree
Showing 6 changed files with 207 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ public void deleteStudentFinalInscription(Student student, FinalInscription fina

@Transactional
@Override
public boolean checkFinalCorrelatives(int docket, String courseId) {
public boolean checkFinalCorrelatives(int docket, final String courseId) {

final List<Course> correlatives = courseService.getCorrelativesByFilter(courseId, null);
final List<Course> approvedCourses = studentDao.getApprovedFinalCourses(docket);
Expand All @@ -400,7 +400,7 @@ public boolean checkFinalCorrelatives(int docket, String courseId) {

@Transactional
@Override
public boolean addFinalGrade(Integer id, Integer docket, BigDecimal grade) {
public boolean addFinalGrade(final Integer id, final Integer docket, final BigDecimal grade) {

final FinalInscription fi = courseService.getFinalInscription(id);
final Student student = studentDao.getByDocket(docket);
Expand All @@ -409,8 +409,8 @@ public boolean addFinalGrade(Integer id, Integer docket, BigDecimal grade) {
return false;
}

for (Grade grade1 : student.getGrades()) {
if (grade1.getCourse().equals(fi.getCourse()) && BigDecimal.valueOf(4).compareTo(grade1.getGrade()) <= 0 && grade1.getFinalGrades().size() < 3){
for (final Grade grade1 : student.getGrades()) {
if (grade1.getCourse().equals(fi.getCourse()) && BigDecimal.valueOf(4).compareTo(grade1.getGrade()) <= 0 && grade1.getFinalGrades().size() < 3){

FinalGrade fg = new FinalGrade.Builder(null, grade).build();
studentDao.addFinalGrade(grade1, fg);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ar.edu.itba.paw.webapp.controllers;

import ar.edu.itba.paw.interfaces.CourseService;
import ar.edu.itba.paw.interfaces.StudentService;
import ar.edu.itba.paw.models.Course;
import ar.edu.itba.paw.models.FinalInscription;
import ar.edu.itba.paw.models.Grade;
Expand All @@ -21,6 +22,7 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.math.BigDecimal;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -41,6 +43,9 @@ public class CourseController {
@Autowired
private CourseService cs;

@Autowired
private StudentService ss;

@Autowired
private DTOEntityMapper mapper;

Expand Down Expand Up @@ -148,6 +153,50 @@ public Response coursesStudentsIndex(@PathParam("courseId") final String courseI
return ok(new StudentsList(studentsList)).build();
}

@POST
@Path("/{courseId}/students/qualify")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response coursesStudentsQualify(@PathParam("courseId") final String courseId,
@Valid final List<QualifyStudent> qualifiedStudents) {
final HTTPResponseList httpStatusList = new HTTPResponseList(qualifiedStudents.size());

final Course course = cs.getByCourseID(courseId);

if (course == null) {
return status(Status.NOT_FOUND).build();
}

if (qualifiedStudents.size() != 0) {

for (final QualifyStudent qualifyStudent : qualifiedStudents) {
final int docket = qualifyStudent.getDocket();
final BigDecimal gradeValue = qualifyStudent.getGrade();

final Student student = ss.getByDocket(qualifyStudent.getDocket());

if (student == null) {
httpStatusList.add(String.valueOf(docket), Status.NOT_FOUND);
} else {
final List<Course> studentCourses = ss.getStudentCourses(docket, null);

if (studentCourses == null || !studentCourses.contains(course)) {
httpStatusList.add(String.valueOf(docket), Status.CONFLICT);
final Grade grade = new Grade.Builder(null, student, course.getId(), course.getCourseId(), gradeValue).build();

grade.setCourse(course);

final int gradeId = ss.addGrade(grade);

final URI uri = uriInfo.getAbsolutePathBuilder().path(String.valueOf(gradeId)).build();
httpStatusList.add(uri.toString(), Status.CREATED);
}
}
}
}
return Response.status(207).entity(httpStatusList).build();
}

//TODO: It seems that it never returned the grade, should we do it?
@GET
@Path("/{courseId}/students/passed")
Expand Down Expand Up @@ -317,4 +366,35 @@ public Response coursesFinalInscriptionsDestroy(
return noContent().build();
}

@POST
@Path("/{courseId}/finalInscriptions/{finalInscriptionId}/qualify")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response courseFinalInscriptionQualify(@Pattern(regexp = "\\d{2}\\.\\d{2}") @PathParam("courseId") final String courseId,
@PathParam("finalInscriptionId") final int finalInscriptionId,
@Valid List<QualifyStudent> qualifiedStudents) {
if (cs.getByCourseID(courseId) == null || cs.getFinalInscription(finalInscriptionId) == null) {
return status(Status.NOT_FOUND).build();
}

final FinalInscription finalInscription = cs.getFinalInscription(finalInscriptionId);
if (!cs.getCourseFinalInscriptions(courseId).contains(finalInscription)) {
return status(Status.NOT_FOUND).build();
}

final HTTPResponseList httpStatusList = new HTTPResponseList(qualifiedStudents.size());

for (final QualifyStudent qualifyStudent : qualifiedStudents) {
final int docket = qualifyStudent.getDocket();
final BigDecimal grade = qualifyStudent.getGrade();

if (!ss.addFinalGrade(finalInscriptionId, docket, grade)) {
httpStatusList.add(String.valueOf(docket), Status.CONFLICT);
} else {
httpStatusList.add(String.valueOf(docket), Status.NO_CONTENT);
}
}

return status(207).entity(httpStatusList).build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ar.edu.itba.paw.webapp.models;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "response")
public class HTTPResponseDTO {
private int status;
private String property;

public HTTPResponseDTO() {
}

HTTPResponseDTO(String property, int status) {
setProperty(property);
setStatus(status);
}

public int getStatus() {
return status;
}

public void setStatus(int status) {
this.status = status;
}

public String getProperty() {
return property;
}

private void setProperty(final String property) {
this.property = property;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ar.edu.itba.paw.webapp.models;


import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;

public class HTTPResponseList {
private List<HTTPResponseDTO> responses;

public HTTPResponseList() {

}

public HTTPResponseList(final int size) {
responses = new ArrayList<>(size);
}


public void add(final String property, final Response.Status status) {
final HTTPResponseDTO responseDTO = new HTTPResponseDTO(property, status.getStatusCode());

responses.add(responseDTO);
}

public List<HTTPResponseDTO> getResponses() {
return responses;
}

public void setResponses(List<HTTPResponseDTO> responses) {
this.responses = responses;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ar.edu.itba.paw.webapp.models;

import java.util.List;

public class QualifiedStudentsList {
private List<QualifyStudent> studentsWithGrade;

public QualifiedStudentsList() {
}

public List<QualifyStudent> getStudentsWithGrade() {
return studentsWithGrade;
}

public int size() {
if (studentsWithGrade == null) {
return 0;
}
return studentsWithGrade.size();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package ar.edu.itba.paw.webapp.models;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

public class QualifyStudent {
@NotNull
@Min(0)
private Integer docket;

@NotNull
@Min(0)
@Max(10)
private BigDecimal grade;

public QualifyStudent() {
}

public int getDocket() {
return docket;
}

public void setDocket(int docket) {
this.docket = docket;
}

public BigDecimal getGrade() {
return grade;
}

public void setGrade(BigDecimal grade) {
this.grade = grade;
}
}

0 comments on commit 159bf8e

Please sign in to comment.