Skip to content

Commit

Permalink
feat(lapCountResource): add lap count per source & team (#131)
Browse files Browse the repository at this point in the history
* feat(lapCountResource): add lap count per source & team

End date should be the date of the postgres DB so in our normal settingg, the local time (UTC + 2)

* feat(LapCount): add endpoint for count for all teams for specific lapSource

* refactor(LapDao): unify getAllBeforeTime query results

* fix(LapCountResource): make DAO attributes private
  • Loading branch information
NuttyShrimp authored Apr 14, 2024
1 parent 9880665 commit 29daae2
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/main/java/telraam/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public void run(AppConfiguration configuration, Environment environment) {
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()));

Expand Down
34 changes: 32 additions & 2 deletions src/main/java/telraam/api/LapCountResource.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,33 @@
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.*;
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;

import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@Path("/lap-counts")
@Tag(name="Lap Counts")
@Produces(MediaType.APPLICATION_JSON)
public class LapCountResource {
TeamDAO teamDAO;
private TeamDAO teamDAO;
private LapDAO lapDAO;

public LapCountResource(TeamDAO teamDAO) {
public LapCountResource(TeamDAO teamDAO, LapDAO lapDAO) {
this.teamDAO = teamDAO;
this.lapDAO = lapDAO;
}

@GET
Expand Down Expand Up @@ -53,4 +60,27 @@ public Map<String, Integer> getLapCounts() {

return perName;
}

@GET
@Path("/{lapSourceId}")
public List<LapCount> getLapCountForLapSource(@PathParam("lapSourceId") Integer id, @QueryParam("end") Optional<String> endTimestamp) {
LocalDateTime dateTime = LocalDateTime.now();
if (endTimestamp.isPresent()) {
dateTime = LocalDateTime.parse(endTimestamp.get());
}
List<LapCount> laps = lapDAO.getAllBeforeTime(id, Timestamp.valueOf(dateTime));
return laps;
}

// 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<String> endTimestamp) {
LocalDateTime dateTime = LocalDateTime.now();
if (endTimestamp.isPresent()) {
dateTime = LocalDateTime.parse(endTimestamp.get());
}
LapCount lapInfo = lapDAO.getAllForTeamBeforeTime(id, teamId, Timestamp.valueOf(dateTime));
return lapInfo.getCount();
}
}
9 changes: 9 additions & 0 deletions src/main/java/telraam/database/daos/LapDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -29,6 +30,14 @@ public interface LapDAO extends DAO<Lap> {
@RegisterBeanMapper(Lap.class)
List<Lap> 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<LapCount> getAllBeforeTime(@Bind("lapSourceId") Integer lapSourceId, @Bind("timestamp") Timestamp timestamp);

@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 where id = :teamId")
@RegisterBeanMapper(LapCount.class)
LapCount 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"})
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/telraam/database/models/LapCount.java
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit 29daae2

Please sign in to comment.