Can now get average score stats over all time.

This commit is contained in:
neviyn 2018-09-16 16:38:18 +01:00
parent 9ceac25393
commit 583e07877d
3 changed files with 46 additions and 0 deletions

View File

@ -0,0 +1,33 @@
package uk.co.neviyn.Observations.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.sql.ResultSet;
import java.sql.SQLException;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.jdbi.v3.core.mapper.RowMapper;
import org.jdbi.v3.core.statement.StatementContext;
import org.joda.time.LocalDate;
@Data
@NoArgsConstructor
@RequiredArgsConstructor
public class AverageStats {
@NonNull
@JsonProperty
private float monitoring, control, conservatism, teamwork, knowledge;
@NonNull
@JsonProperty
private LocalDate date;
public static class Mapper implements RowMapper<AverageStats> {
public AverageStats map(ResultSet rs, StatementContext ctx) throws SQLException {
return new AverageStats(rs.getFloat("monitoring"), rs.getFloat("control"), rs.getFloat("conservatism"),
rs.getFloat("teamwork"), rs.getFloat("knowledge"), new LocalDate(rs.getDate("date")));
}
}
}

View File

@ -8,6 +8,7 @@ import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys;
import org.jdbi.v3.sqlobject.statement.SqlQuery; import org.jdbi.v3.sqlobject.statement.SqlQuery;
import org.jdbi.v3.sqlobject.statement.SqlUpdate; import org.jdbi.v3.sqlobject.statement.SqlUpdate;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import uk.co.neviyn.Observations.api.AverageStats;
import uk.co.neviyn.Observations.api.NewObservation; import uk.co.neviyn.Observations.api.NewObservation;
import uk.co.neviyn.Observations.core.Observation; import uk.co.neviyn.Observations.core.Observation;
@ -44,4 +45,9 @@ public interface ObservationDao {
"LEFT JOIN tutor ON observation_tutor.tutorId = tutor.id WHERE tutor.id = :tutorId") "LEFT JOIN tutor ON observation_tutor.tutorId = tutor.id WHERE tutor.id = :tutorId")
List<Observation> observationsByTutorBetweenDates(@Bind("tutorId")int tutorId, @Bind("startDate")DateTime startDate, List<Observation> observationsByTutorBetweenDates(@Bind("tutorId")int tutorId, @Bind("startDate")DateTime startDate,
@Bind("endDate")DateTime endDate); @Bind("endDate")DateTime endDate);
@SqlQuery("SELECT AVG(monitoring) as monitoring, AVG(control) as control, AVG(conservatism) as conservatism, " +
"AVG(teamwork) as teamwork, AVG(knowledge) as knowledge, date FROM observations GROUP BY date")
@RegisterRowMapper(AverageStats.Mapper.class)
List<AverageStats> averageObservationScoresByDay();
} }

View File

@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import uk.co.neviyn.Observations.api.AverageStats;
import uk.co.neviyn.Observations.api.NewObservation; import uk.co.neviyn.Observations.api.NewObservation;
import uk.co.neviyn.Observations.core.Observation; import uk.co.neviyn.Observations.core.Observation;
import uk.co.neviyn.Observations.dao.ObservationDao; import uk.co.neviyn.Observations.dao.ObservationDao;
@ -42,4 +43,10 @@ public class ObservationResource {
public List<Observation> observationsBy(@PathParam("tutorId") int tutorId){ public List<Observation> observationsBy(@PathParam("tutorId") int tutorId){
return dao.observationsByTutor(tutorId); return dao.observationsByTutor(tutorId);
} }
@Path("/average/all")
@GET
public List<AverageStats> averageObservationScores(){
return dao.averageObservationScoresByDay();
}
} }