diff --git a/src/main/java/telraam/App.java b/src/main/java/telraam/App.java index 4e6eb03..27be8c2 100644 --- a/src/main/java/telraam/App.java +++ b/src/main/java/telraam/App.java @@ -103,7 +103,7 @@ public void run(AppConfiguration configuration, Environment environment) throws jersey.register(new LapSourceSwitchoverResource(database.onDemand(LapSourceSwitchoverDAO.class))); jersey.register(new AcceptedLapsResource()); jersey.register(new TimeResource()); - jersey.register(new LapCountResource(database.onDemand(TeamDAO.class))); + jersey.register(new LapCountResource(database.onDemand(TeamDAO.class), database.onDemand(LapDAO.class))); jersey.register(new MonitoringResource(database)); environment.healthChecks().register("template", new TemplateHealthCheck(configuration.getTemplate())); diff --git a/src/main/java/telraam/api/LapCountResource.java b/src/main/java/telraam/api/LapCountResource.java index b8ca04d..697bfa6 100644 --- a/src/main/java/telraam/api/LapCountResource.java +++ b/src/main/java/telraam/api/LapCountResource.java @@ -1,5 +1,6 @@ package telraam.api; +import telraam.database.daos.LapDAO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.ws.rs.*; @@ -9,7 +10,10 @@ import telraam.database.models.Team; import telraam.util.AcceptedLapsUtil; +import java.sql.Timestamp; +import java.time.LocalDateTime; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -18,9 +22,11 @@ @Produces(MediaType.APPLICATION_JSON) public class LapCountResource { TeamDAO teamDAO; + LapDAO lapDAO; - public LapCountResource(TeamDAO teamDAO) { + public LapCountResource(TeamDAO teamDAO, LapDAO lapDAO) { this.teamDAO = teamDAO; + this.lapDAO = lapDAO; } @GET @@ -53,4 +59,16 @@ public Map getLapCounts() { return perName; } + + // EndTimestamp should be a ISO formatted date timestamp + @GET + @Path("/{lapSourceId}/{teamId}") + public Integer getLapCountForLapSource(@PathParam("lapSourceId") Integer id, @PathParam("teamId") Integer teamId, @QueryParam("end") Optional endTimestamp) { + LocalDateTime dateTime = LocalDateTime.now(); + if (endTimestamp.isPresent()) { + dateTime = LocalDateTime.parse(endTimestamp.get()); + } + List laps = lapDAO.getAllForTeamBeforeTime(id, teamId, Timestamp.valueOf(dateTime)); + return laps.size(); + } } diff --git a/src/main/java/telraam/database/daos/LapDAO.java b/src/main/java/telraam/database/daos/LapDAO.java index f484f6f..078f35c 100644 --- a/src/main/java/telraam/database/daos/LapDAO.java +++ b/src/main/java/telraam/database/daos/LapDAO.java @@ -29,6 +29,10 @@ public interface LapDAO extends DAO { @RegisterBeanMapper(Lap.class) List getAllBySourceSorted(@Bind("lapSourceId") Integer lapSourceId); + @SqlQuery("SELECT * FROM lap WHERE lap_source_id = :lapSourceId AND timestamp <= :timestamp AND team_id = :teamId") + @RegisterBeanMapper(Lap.class) + List getAllForTeamBeforeTime(@Bind("lapSourceId") Integer lapSourceId, @Bind("teamId") Integer teamId, @Bind("timestamp") Timestamp timestamp); + @SqlUpdate("INSERT INTO lap (team_id, lap_source_id, timestamp) " + "VALUES (:teamId, :lapSourceId, :timestamp)") @GetGeneratedKeys({"id"})