From 4ad04ca2fb8f9cf7bcc246ad09ea16dcbb14deb8 Mon Sep 17 00:00:00 2001 From: NuttyShrimp Date: Wed, 3 Apr 2024 18:15:53 +0200 Subject: [PATCH] feat(LapCount): add endpoint for count for all teams for specific lapSource --- src/main/java/telraam/api/LapCountResource.java | 12 ++++++++++++ src/main/java/telraam/database/daos/LapDAO.java | 5 +++++ src/main/java/telraam/database/models/LapCount.java | 11 +++++++++++ 3 files changed, 28 insertions(+) create mode 100644 src/main/java/telraam/database/models/LapCount.java diff --git a/src/main/java/telraam/api/LapCountResource.java b/src/main/java/telraam/api/LapCountResource.java index 697bfa6..62be1d1 100644 --- a/src/main/java/telraam/api/LapCountResource.java +++ b/src/main/java/telraam/api/LapCountResource.java @@ -7,6 +7,7 @@ import jakarta.ws.rs.core.MediaType; import telraam.database.daos.TeamDAO; import telraam.database.models.Lap; +import telraam.database.models.LapCount; import telraam.database.models.Team; import telraam.util.AcceptedLapsUtil; @@ -59,6 +60,17 @@ public Map getLapCounts() { return perName; } + + @GET + @Path("/{lapSourceId}") + public List getLapCountForLapSource(@PathParam("lapSourceId") Integer id, @QueryParam("end") Optional endTimestamp) { + LocalDateTime dateTime = LocalDateTime.now(); + if (endTimestamp.isPresent()) { + dateTime = LocalDateTime.parse(endTimestamp.get()); + } + List laps = lapDAO.getAllBeforeTime(id, Timestamp.valueOf(dateTime)); + return laps; + } // EndTimestamp should be a ISO formatted date timestamp @GET diff --git a/src/main/java/telraam/database/daos/LapDAO.java b/src/main/java/telraam/database/daos/LapDAO.java index 078f35c..490058a 100644 --- a/src/main/java/telraam/database/daos/LapDAO.java +++ b/src/main/java/telraam/database/daos/LapDAO.java @@ -8,6 +8,7 @@ import org.jdbi.v3.sqlobject.statement.SqlQuery; import org.jdbi.v3.sqlobject.statement.SqlUpdate; import telraam.database.models.Lap; +import telraam.database.models.LapCount; import telraam.database.models.TeamLapCount; import java.sql.Timestamp; @@ -29,6 +30,10 @@ public interface LapDAO extends DAO { @RegisterBeanMapper(Lap.class) List getAllBySourceSorted(@Bind("lapSourceId") Integer lapSourceId); + @SqlQuery("SELECT t.id as team_id, (SELECT COUNT(*) FROM lap WHERE lap_source_id = :lapSourceId AND timestamp <= :timestamp and team_id = t.id) as count FROM team t") + @RegisterBeanMapper(LapCount.class) + List getAllBeforeTime(@Bind("lapSourceId") Integer lapSourceId, @Bind("timestamp") Timestamp timestamp); + @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); diff --git a/src/main/java/telraam/database/models/LapCount.java b/src/main/java/telraam/database/models/LapCount.java new file mode 100644 index 0000000..a3831a5 --- /dev/null +++ b/src/main/java/telraam/database/models/LapCount.java @@ -0,0 +1,11 @@ +package telraam.database.models; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter @Setter @NoArgsConstructor +public class LapCount { + private int teamId; + private int count; +}