From 7df28c735a052e2c21d2dc2982e2d75d11bb076d Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu <91431503+TsimurSh@users.noreply.github.com> Date: Sun, 19 May 2024 07:14:06 +0200 Subject: [PATCH 1/5] Configs for allowing CORS requests (#15) --- .../transitclock/config/WebConfiguration.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/src/main/java/org/transitclock/config/WebConfiguration.java diff --git a/app/src/main/java/org/transitclock/config/WebConfiguration.java b/app/src/main/java/org/transitclock/config/WebConfiguration.java new file mode 100644 index 00000000..943c5b2a --- /dev/null +++ b/app/src/main/java/org/transitclock/config/WebConfiguration.java @@ -0,0 +1,20 @@ +package org.transitclock.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@EnableWebMvc +public class WebConfiguration implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOriginPatterns("http://**", "https://**") + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*") + .allowCredentials(true); + } +} \ No newline at end of file From b6c75c44c0ac6ddbcd0d7332d4b0a2b291d817ee Mon Sep 17 00:00:00 2001 From: Vlad Vesa Date: Sun, 19 May 2024 08:49:15 +0300 Subject: [PATCH 2/5] Fixing wrong database configuration. (#14) --- ...700__fix-wrong-column-for-export-table.sql | 1 + .../V20240516223701__fix-wrong-relation.sql | 13 ++++++++ .../domain/structs/ExportTable.java | 2 +- .../domain/structs/TravelTimesForTrip.java | 33 +++++-------------- .../domain/structs/TripPattern.java | 13 +++++--- 5 files changed, 32 insertions(+), 30 deletions(-) create mode 100644 app/src/main/resources/db/migration/V20240516223700__fix-wrong-column-for-export-table.sql create mode 100644 app/src/main/resources/db/migration/V20240516223701__fix-wrong-relation.sql diff --git a/app/src/main/resources/db/migration/V20240516223700__fix-wrong-column-for-export-table.sql b/app/src/main/resources/db/migration/V20240516223700__fix-wrong-column-for-export-table.sql new file mode 100644 index 00000000..c9a92983 --- /dev/null +++ b/app/src/main/resources/db/migration/V20240516223700__fix-wrong-column-for-export-table.sql @@ -0,0 +1 @@ +ALTER TABLE export_table RENAME COLUMN first_name TO file_name; diff --git a/app/src/main/resources/db/migration/V20240516223701__fix-wrong-relation.sql b/app/src/main/resources/db/migration/V20240516223701__fix-wrong-relation.sql new file mode 100644 index 00000000..7ed9be0b --- /dev/null +++ b/app/src/main/resources/db/migration/V20240516223701__fix-wrong-relation.sql @@ -0,0 +1,13 @@ +-- removing faulty constraints definitions +ALTER TABLE travel_times_for_trip_to_travel_times_for_path + DROP CONSTRAINT fk_tratimfortritotratimforpat_on_travel_times_for_stop_path; + +ALTER TABLE travel_times_for_trip_to_travel_times_for_path + DROP CONSTRAINT fk_tratimfortritotratimforpat_on_travel_times_for_trip; + +-- recreating new constraints +ALTER TABLE travel_times_for_trip_to_travel_times_for_path + ADD CONSTRAINT fk_tratimfortritotratimforpat_on_travel_times_for_stop_path FOREIGN KEY (for_path_id) REFERENCES travel_times_for_stop_paths (id); + +ALTER TABLE travel_times_for_trip_to_travel_times_for_path + ADD CONSTRAINT fk_tratimfortritotratimforpat_on_travel_times_for_trip FOREIGN KEY (for_trip_id) REFERENCES travel_times_for_trips (id); diff --git a/libs/core/src/main/java/org/transitclock/domain/structs/ExportTable.java b/libs/core/src/main/java/org/transitclock/domain/structs/ExportTable.java index 405c234b..1fbf05e5 100644 --- a/libs/core/src/main/java/org/transitclock/domain/structs/ExportTable.java +++ b/libs/core/src/main/java/org/transitclock/domain/structs/ExportTable.java @@ -46,7 +46,7 @@ public class ExportTable implements Serializable { @Column(name = "export_status") private int exportStatus; - @Column(name = "first_name") + @Column(name = "file_name") private String fileName; @Column(name = "file") diff --git a/libs/core/src/main/java/org/transitclock/domain/structs/TravelTimesForTrip.java b/libs/core/src/main/java/org/transitclock/domain/structs/TravelTimesForTrip.java index c6163a05..9c17b1ec 100644 --- a/libs/core/src/main/java/org/transitclock/domain/structs/TravelTimesForTrip.java +++ b/libs/core/src/main/java/org/transitclock/domain/structs/TravelTimesForTrip.java @@ -3,14 +3,13 @@ import com.querydsl.jpa.impl.JPAQuery; import jakarta.persistence.*; -import lombok.*; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; import org.hibernate.annotations.DynamicUpdate; -import org.transitclock.domain.structs.QTravelTimesForTrip; import java.io.Serializable; import java.util.*; @@ -24,7 +23,7 @@ @Entity @Slf4j @DynamicUpdate -@Getter @Setter @ToString +@Data @Table( name = "travel_times_for_trips", indexes = { @@ -72,15 +71,13 @@ public class TravelTimesForTrip implements Serializable { private final String tripCreatedForId; @ManyToMany(fetch = FetchType.EAGER) - @JoinTable( - name = "travel_times_for_trip_to_travel_times_for_path", - joinColumns = { - @JoinColumn(name = "for_path_id", referencedColumnName = "id") - }, - inverseJoinColumns = { - @JoinColumn(name = "for_trip_id", referencedColumnName = "id") - } - ) + @JoinTable(name = "travel_times_for_trip_to_travel_times_for_path", + joinColumns = { + @JoinColumn(name = "for_trip_id", referencedColumnName = "id") + }, + inverseJoinColumns = { + @JoinColumn(name = "for_path_id", referencedColumnName = "id") + }) @Cascade({CascadeType.SAVE_UPDATE}) @OrderColumn(name = "list_index") private final List travelTimesForStopPaths = new ArrayList<>(); @@ -273,16 +270,4 @@ public TravelTimesForStopPath getTravelTimesForStopPath(int index) { public int numberOfStopPaths() { return travelTimesForStopPaths.size(); } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TravelTimesForTrip that)) return false; - return configRev == that.configRev && travelTimesRev == that.travelTimesRev && Objects.equals(id, that.id) && Objects.equals(tripPatternId, that.tripPatternId) && Objects.equals(tripCreatedForId, that.tripCreatedForId) && Objects.equals(travelTimesForStopPaths, that.travelTimesForStopPaths); - } - - @Override - public int hashCode() { - return Objects.hash(id, configRev, travelTimesRev, tripPatternId, tripCreatedForId, travelTimesForStopPaths); - } } diff --git a/libs/core/src/main/java/org/transitclock/domain/structs/TripPattern.java b/libs/core/src/main/java/org/transitclock/domain/structs/TripPattern.java index 7254a0cf..63cf68ff 100644 --- a/libs/core/src/main/java/org/transitclock/domain/structs/TripPattern.java +++ b/libs/core/src/main/java/org/transitclock/domain/structs/TripPattern.java @@ -528,9 +528,9 @@ public boolean isStopAtOrAfterStop(String stopId1, String stopId2) { * @return */ public List getStopIds() { - List list = new ArrayList(stopPaths.size()); - for (StopPath stopPath : stopPaths) list.add(stopPath.getStopId()); - return list; + return stopPaths.stream() + .map(StopPath::getStopId) + .collect(Collectors.toList()); } /** @@ -539,7 +539,9 @@ public List getStopIds() { * @return ID of last stop */ public String getLastStopIdForTrip() { - return stopPaths.get(stopPaths.size() - 1).getStopId(); + return Optional.ofNullable(getStopPath(stopPaths.size() - 1)) + .map(StopPath::getStopId) + .orElse(null); } /** @@ -560,7 +562,8 @@ public double getLength() { * @return The specified StopPath or null if index out of range */ public StopPath getStopPath(int index) { - if (index < 0 || index >= stopPaths.size()) return null; + if (index < 0 || index >= stopPaths.size()) + return null; return stopPaths.get(index); } From cc6baa0a8395bcdf7e269ac139fdf22c143c10a6 Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu <91431503+TsimurSh@users.noreply.github.com> Date: Sun, 19 May 2024 22:09:43 +0200 Subject: [PATCH 3/5] Schedule adherence report include vehicle id (#16) --- .../api/resources/ReportsApi.java | 8 ++++---- .../transitclock/core/reports/Reports.java | 20 ++++++++++--------- .../transitclock/core/reports/SqlUtils.java | 8 +++++++- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/transitclock/api/resources/ReportsApi.java b/app/src/main/java/org/transitclock/api/resources/ReportsApi.java index cc5c4d44..78323409 100644 --- a/app/src/main/java/org/transitclock/api/resources/ReportsApi.java +++ b/app/src/main/java/org/transitclock/api/resources/ReportsApi.java @@ -47,8 +47,8 @@ ResponseEntity getTripsWithTravelTimes( ResponseEntity getAvlReport( StandardParameters stdParameters, @Parameter(description = "Vehicle id") @RequestParam(value = "v") String vehicleId, - @Parameter(description = "Begin date(MM-DD-YYYY.") @RequestParam(value = "beginDate") String beginDate, - @Parameter(description = "Num days.", required = false) @RequestParam(value = "numDays", required = false) int numDays, + @Parameter(description = "Begin date(MM-DD-YYYY or YYYY-MM-DD") @RequestParam(value = "beginDate") String beginDate, + @Parameter(description = "Num days.") @RequestParam(value = "numDays", defaultValue = "1", required = false) int numDays, @Parameter(description = "Begin time(HH:MM)") @RequestParam(value = "beginTime", required = false) String beginTime, @Parameter(description = "End time(HH:MM)") @RequestParam(value = "endTime", required = false) String endTime); @@ -104,8 +104,8 @@ ResponseEntity getTrips( ResponseEntity scheduleAdhReport( StandardParameters stdParameters, @Parameter(description = "Route id") @RequestParam(value = "r") String routeId, - @Parameter(description = "Begin date(MM-DD-YYYY.") @RequestParam(value = "beginDate") String beginDate, - @Parameter(description = "Num days.", required = false) @RequestParam(value = "numDays", required = false) int numDays, + @Parameter(description = "Begin date(MM-DD-YYYY or YYYY-MM-DD") @RequestParam(value = "beginDate") String beginDate, + @Parameter(description = "Num days.") @RequestParam(value = "numDays", defaultValue = "1", required = false) int numDays, @Parameter(description = "Begin time(HH:MM)") @RequestParam(value = "beginTime") String beginTime, @Parameter(description = "End time(HH:MM)") @RequestParam(value = "endTime") String endTime, @Parameter(description = "Allowable early in mins(default 1.0)") diff --git a/app/src/main/java/org/transitclock/core/reports/Reports.java b/app/src/main/java/org/transitclock/core/reports/Reports.java index c9673ffc..17c31237 100644 --- a/app/src/main/java/org/transitclock/core/reports/Reports.java +++ b/app/src/main/java/org/transitclock/core/reports/Reports.java @@ -251,7 +251,8 @@ public static String getScheduleAdhByStops( // + " abs(((ad.time / 1000) - (ad.scheduled_time / 1000))) AS // difference_in_seconds, \n" + " s.id AS stop_id, \n" - + " ad.stop_order AS stop_order \n" + + " ad.stop_order AS stop_order, \n" + + " ad.vehicle_id AS v_id \n" + " FROM arrivals_departures ad, stops s \n" + "WHERE " // To get stop name @@ -276,7 +277,8 @@ public static String getScheduleAdhByStops( // + " ((ad.time / 1000) - (ad.scheduled_time / 1000)) AS // difference_in_seconds, \n" + " s.id AS stop_id, \n" - + " ad.stop_order AS stop_order \n" + + " ad.stop_order AS stop_order, \n" + + " ad.vehicle_id AS v_id \n" + " FROM arrivals_departures ad, Stops s \n" + "WHERE " // To get stop name @@ -294,18 +296,18 @@ public static String getScheduleAdhByStops( + " \n" + " ORDER BY direction_id, ad.stop_order, s.name \n" + "), \n" - + "trips_late_query_v2 AS ( SELECT" - + " array_to_string(array_agg(trips_late::text || ' (' ||" - + " difference_in_seconds::text || ')' order by trips_late::text), '; ') AS" - + " trips_late, \n" + + "trips_late_query_v2 AS ( SELECT \n" + + " array_to_string(array_agg('trip: ' || trips_late::text || ' (' ||" + + " difference_in_seconds::text || '), vehicle: ' || v_id::text order by trips_late::text), '; ')" + + " AS trips_late, \n" + " stop_id, \n" + " stop_order \n" + " FROM trips_late_query_with_time \n" + " GROUP BY stop_id, stop_order \n" + " ), \n" - + " trips_early_query_v2 AS ( \n" - + " SELECT array_to_string(array_agg(trips_early::text || ' (' ||" - + " difference_in_seconds::text || ')' order by trips_early::text), '; ')" + + " trips_early_query_v2 AS ( SELECT \n" + + " array_to_string(array_agg('trip: ' || trips_early::text || ' (' ||" + + " difference_in_seconds::text || '), vehicle: ' || v_id::text order by trips_early::text), '; ')" + " AS trips_early, \n" + " stop_id, \n" + " stop_order \n" diff --git a/app/src/main/java/org/transitclock/core/reports/SqlUtils.java b/app/src/main/java/org/transitclock/core/reports/SqlUtils.java index f138336d..8a8cb4f8 100644 --- a/app/src/main/java/org/transitclock/core/reports/SqlUtils.java +++ b/app/src/main/java/org/transitclock/core/reports/SqlUtils.java @@ -217,11 +217,17 @@ public static String timeRangeClause( SimpleDateFormat currentFormat = new SimpleDateFormat("MM-dd-yyyy"); SimpleDateFormat requiredFormat = new SimpleDateFormat("yyyy-MM-dd"); + try { - beginDate = requiredFormat.format(currentFormat.parse(beginDate)); + if (beginDate.charAt(4) != '-') { // for two patterns MM-dd-yyyy & yyyy-MM-dd + beginDate = requiredFormat.format(currentFormat.parse(beginDate)); + } else { + requiredFormat.parse(beginDate); + } } catch (ParseException e) { logger.error("Exception happened while processing time-range clause", e); } + return " AND %s BETWEEN '%s' AND TIMESTAMP '%s' + INTERVAL '%d day' %s " .formatted(timeColumnName, beginDate, beginDate, numDays, timeSql); } From 1a6fb8cf7cada77b53c681d0c2f7081252c9ad2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 May 2024 23:10:30 +0300 Subject: [PATCH 4/5] [java] Bump org.apache.commons:commons-csv from 1.10.0 to 1.11.0 (#11) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index ae3d08d6..2e36bc11 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -28,7 +28,7 @@ subprojects { mavenBom("org.springframework.boot:spring-boot-dependencies:${springVersion}") } dependencies{ - dependency("org.apache.commons:commons-csv:1.10.0") + dependency("org.apache.commons:commons-csv:1.11.0") dependency("io.hypersistence:hypersistence-utils-hibernate-62:3.7.5") dependency("com.google.guava:guava:33.2.0-jre") } From 6a5b8ec84ba070e2158e7dce49dd3c1b5e068449 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 07:26:39 +0300 Subject: [PATCH 5/5] [java] Bump org.json:json from 20231013 to 20240303 (#1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Vlad Vesa --- libs/core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/core/build.gradle.kts b/libs/core/build.gradle.kts index 2f9cff6b..164ae2d7 100644 --- a/libs/core/build.gradle.kts +++ b/libs/core/build.gradle.kts @@ -31,7 +31,7 @@ dependencies { implementation("com.google.guava:guava") - api("org.json:json:20231013") + api("org.json:json:20240303") implementation("org.jasypt:jasypt:1.9.3") api(group = "org.ehcache", name = "ehcache", classifier = "jakarta") {