20 Commits

Author SHA1 Message Date
Daniel Graf
d267b09329 Added Owntracks friend data support, including avatar and location data. (#617) 2026-01-03 09:47:29 +01:00
Daniel Graf
c45e6afdb9 feat(#559): update to Java 25 (#560) 2025-12-17 17:15:51 +01:00
Daniel Graf
88ddeb5804 Test processing pipeline (#534) 2025-12-07 12:14:31 +01:00
Daniel Graf
cba793354c 489 feature request infer missing gps data between close points in visit computation (#509) 2025-11-29 15:18:34 +01:00
Daniel Graf
030ecdeed6 392 feature request improve home detection (#414) 2025-11-06 14:44:40 +01:00
Daniel Graf
cb86bd2384 - Update Spring Boot parent version to 3.5.6 (#296) 2025-09-23 06:07:39 +02:00
Daniel Graf
4e65288aac 192 feature request all dates and times are utc UI user settings to show in local time in area (#225) 2025-09-08 14:58:27 +02:00
Daniel Graf
8ec9a3d3a1 164 feature request enhance map for long distances between two points (#184) 2025-08-29 13:00:31 +02:00
Elyviere
4a66b050e4 Add OIDC sign-in (#155)
Signed-off-by: elyviere <ir5d1xr6@anonaddy.me>
Co-authored-by: elyviere <ir5d1xr6@anonaddy.me>
2025-08-23 11:43:01 +02:00
Daniel Graf
c1db2ed5a2 148 update documentation (#149) 2025-07-25 14:54:19 +02:00
Daniel Graf
7309fe51b2 chore: updated spring boot to 3.5.3 (#116) 2025-07-12 15:59:14 +02:00
Daniel Graf
6016f5f4e8 81 show multiple users on the map (#113) 2025-07-12 06:31:55 +02:00
Daniel Graf
844d550daf reworked import process again (#61) 2025-06-26 12:56:22 +02:00
Daniel Graf
7ed4f7700b add version information to the application (#53) 2025-06-13 10:34:49 +02:00
Daniel Graf
7fc502b220 tripmergeservice does not recognize consecutive trips (#44)
* reworked the whole processing pipeline
* processing starts every 5 minutes with the location points which are not already processed
* added geojson support
2025-06-12 15:41:26 +02:00
Daniel Graf
a5b0f6caeb build !: changed final jar name to reitti-app.jar 2025-06-05 08:29:30 +02:00
Daniel Graf
905bed840d 19 finish docker integration for reitti (#20)
* feat: enable actuator health endpoint and add Docker healthcheck

* - added application-docker.properties
- update Dockerfile and corrosponding docker-compose.yml

* - removed init.sql

* docs: update environment variables in README and Docker Hub description

* docs: update environment variables section to table format

* - removed generated-requests.http
- updated application-docker.properties
2025-06-04 21:53:34 +02:00
Daniel Graf
ed07c18500 10 update detection of visits and places (#17)
* - Remove `SignificantPlaceService` and migrate functionality to `VisitService` and `VisitMergingService`.
- Decouple `Visit` from `SignificantPlace` by removing `place_id` and adding `latitude` and `longitude` fields.
- Refactor `LocationProcessingPipeline` to work with updated `VisitService` for stay point processing.
- Update database schema via migration to remove references to `place_id` in `visits` table.
- Cleanup and improve merging logic in `VisitMergingService` for processed visits.

* refactor: update visit merging logic and distance calculation method

* refactor: optimize visit merging algorithm to reduce ProcessedVisit objects

* refactor: rename Haversine distance method to improve clarity

* feat: add meters to degrees conversion method in GeoUtils

* test: add unit test for GeoUtils distance calculation

* test: add test cases for metersToDegreesAtPosition method

* feat: Add Testcontainers configuration for RabbitMQ and TimescaleDB

* - Refactor TestContainer management to simplify integration tests setup
- Remove redundant Google Takeout and GPX import endpoints from LocationDataApiController
- Add dedicated ImportDataApiController for handling file imports
- Replace RabbitTemplate dependency with ImportListener interface in ImportHandler
- Implement RabbitMQImportDispatcher to handle RabbitMQ interactions
- Convert GeoUtils method calls to use more succinct `distanceInMeters`
- Adjust visit merging threshold setting in application.properties
- Enable Flyway migrations during tests
- Add unit test for ImportHandler GPX functionality
- Update visit repository with method for unprocessed visit periods logging

* refactor: Adjust stay point detection parameters and time window calculation

* feat: make stay point detection parameters configurable

* - Remove `LocationDataProcessingService` and related unused files/tests.
- Migrate RabbitMQ listener to `LocationProcessingPipeline`.
- Add new test `StayPointDetectionServiceTest` for stay point detection validation.
- Refactor `ImportListener` method to `handleImport` for improved clarity.
- Enhance `RawLocationPoint` with `equals` and `hashCode` methods.
- Adjust stay point detection property names for better readability.
- Add `MockImportListener` for test use.
- Refactor and expand test coverage for `LocationDataService` and `ImportHandler`.
- Add utility method for `StayPoint` distance calculation in `GeoUtils`.

* - Remove unused imports from StayPointDetectionServiceTest.java

* refactor: Update place merge distance calculation using GeoUtils method

* feat: enhance visit merging with configurable time and proximity criteria

* - Introduced `VisitMergingServiceTest` to validate visit merging functionality.
- Optimized visit merging in `VisitMergingService` by removing unnecessary time checks and parameters.
- Refactored stay point detection in `StayPointDetectionService` for simplicity and improved clustering.
- Added helper methods `weightedCenter` and reduced redundant logic in `StayPointDetectionService`.
- Enhanced testing utilities in `AbstractIntegrationTest` for visit-related imports.
- Extended `ProcessedVisitRepository` with `findByUserOrderByStartTime` for better sorting.

* - Removed TimescaleDB extension from database initialization script.
- Increased ImportHandler batch size from 100 to 10,000.
- Added staypoint time threshold configuration property.
- Adjusted staypoint detection minimum points from 5 to 1 in test properties.
- Updated BCrypt encoded password for the admin user.
- Switched Docker PostGIS image from TimescaleDB to PostGIS Alpine.
- Expanded StayPointDetectionService processing window by 1 hour before and after points.
- Fixed SettingsController to retrieve the principal from authentication instead of details.

* - Replace `Point` with `GeoPoint` for better consistency and clarity across the codebase.
- Update stay point clustering logic to reflect new `GeoPoint` implementation.
- Add transaction management to visit merging service test.
- Optimize imports and flatten stay point detection to improve readability.
- Reduce batch size in import handler from 10000 to 100.
- Update application properties for fine-tuned stay point and visit processing settings.
- Introduce `GeoPoint` record for encapsulating geographic coordinates.
- Adjust test cases to match refined clustering and visit merging logic

* refactor: Simplify nearby places search by removing unnecessary blank line

* refactor: modify visit merging algorithm to merge consecutive visits at same place

* - Add `equals` and `hashCode` methods to `SignificantPlace` for better object comparison.
- Introduce `VisitMergingService` dependency and helper method `importUntilProcessedVisits` in `AbstractIntegrationTest`.
- Adjust `reitti.visit.merge-threshold-seconds` configuration from 300 to 600 seconds.
- Minor cleanup: remove redundant line in `VisitMergingService` and duplicate test data in `VisitMergingServiceTest`.

* - Add `toString` implementation to `SignificantPlace` class
- Add integration test for `TripDetectionService` to ensure trip detection logic between visits
- Include helper method to print detected trips in tests

* feat: make batch size configurable in ImportHandler with @Value

* refactor: Extend trip search time range by one day before and after

* added new icons

* - updated trip merging to ignore duplicates
- add first and last places if they start before the current day but end on it.

* - updated labels on trips

* refactor: remove icon element from entry rendering logic

* feat: add day and month for entries spanning multiple days

* - added day and month if time is outside the selected day

* style: update login.html to match dark theme of the app

* feat: add persistent login with remember-me functionality

* feat: add user update functionality to settings page

* style: remove extra semicolon in CSS file

* feat: allow editing of current logged-in user with re-login warning

* refactor: Remove unused return value from updateUser method

* refactor: use HTMX for user form management with dynamic fragments

* - add ability to update existing users
- add remember me functionality

* - finished login page

* feat: adjust marker size and popup to reflect visit duration

* Revert "- finished login page"

This reverts commit 424988d009.

* - updated display of visits

* build: add Docker image building configuration to pom.xml

* fixed running all tests

* added docker image creation to build step

* feat: Add Docker Hub description and update README with comprehensive project details

* docs: Update README with detailed project information and usage instructions

* added docker image creation to build step

* add pre-release.yml

* add pre-release.yml

* added docker push

* added docker push

* added docker push

* added docker push

* added docker push

* refactor: remove Spring Boot Docker plugin and add custom Dockerfile with UID/GID support

* feat: improve user and group ID switching in Dockerfile

* build: add docker run script for container deployment

* updated docker creation

* updated docker creation

* updated docker creation

* updated docker creation

* updated docker creation

* updated docker creation
2025-06-04 16:40:37 +02:00
Daniel Graf
34a02f052d 1 add gpx ingest and import (#9)
added GPX data import
2025-05-30 20:09:48 +02:00
Daniel Graf
2eabf69396 Init (#4)
* feat: initialize Spring Boot project with core application structure

* docs: update README with project description and setup instructions

* Remove unused Location model and TimelineController

The Location model and TimelineController, along with related dependencies (Lombok and placeholder data), were removed as they are no longer used. Updated the project to Java 21 and Spring Boot 3.3.2 for compatibility and modern features. Adjusted `.gitignore` and cleaned up the Maven configuration accordingly.

* feat: add docker-compose and database initialization for Reitti infrastructure

* chore: Add comment explaining reitti user creation in init.sql

* fix: enhance database user privileges in init.sql

* Remove unused pgAdmin service and redundant SQL grants

The pgAdmin service definition has been removed from docker-compose.yml as it is not used. Additionally, redundant schema privileges in init.sql were cleaned up to avoid duplication and ensure clarity.

* feat: add core model classes, repositories, and controllers for Reitti application

* fixed code. removed lombok finally and fixed db initialization

* - Replace H2 database with PostgreSQL and add Flyway dependencies
- Introduce Flyway migrations for initial database schema
- Update JPA configuration: set `ddl-auto` to `validate` and remove unnecessary logging properties

* - Update Java version to 24 in `pom.xml` and `README.md`
- Add Spring Boot Actuator dependency to `pom.xml`

* feat: Add Thymeleaf support with web and timeline controllers

* - Replace external MapLibre style with custom inline raster style in `index.html`
- Update Spring Boot version to 3.5.0 in `pom.xml`
- Remove deprecated Hibernate dialect property from `application.properties`

* feat: implement API token authentication and location data ingestion

* - Remove `LocationDataController` and `TimelineController` implementations.
- Relocate `ApiTokenController` and `LocationDataApiController` to `controller.api` package.
- Update `.gitignore` to exclude `/target/` and `/.idea/` directories.

* feat: add location data API controller and request DTO

* - Remove `userId` field from `LocationDataRequest` class.
- Simplify `LocationDataRequest` handling by removing associated getters, setters, and validations for `userId`.
- Remove unused endpoint for processing single location points (`/location-point`).
- Clean up unused code and redundant logic in `LocationDataApiController`.

* feat: implement event-driven architecture for location data processing

* feat: add RabbitMQ configuration to application.properties

* feat: add Google Takeout location import endpoint with streaming processing

* - Add initial test structure for `LocationDataApiController`
- Remove unnecessary imports and `@Transactional` annotation from `LocationDataProcessingService`
- Update RabbitMQ credentials in `application.properties`

* feat: Migrate location data processing to RabbitMQ asynchronous messaging

This commit implements the following changes:
- Replace ApplicationEventPublisher with RabbitMQ for location data processing
- Add RabbitMQ configuration and dependencies
- Modify LocationDataApiController to publish events to RabbitMQ
- Create LocationDataProcessingService to consume RabbitMQ messages
- Update event handling to use RabbitMQ message listener
- Improve scalability and resilience of location data processing

* feat: add method to find RawLocationPoint by user and timestamp

* feat: prevent duplicate location points by timestamp check

* feat: Add geospatial support and visit tracking to SignificantPlace model

This commit enhances the SignificantPlace model with:
- PostGIS Point geometry column for geospatial queries
- Visit count tracking
- Total duration tracking for visits
- Methods to increment visit count and add duration
- Additional constructor to support Point geometry

The changes will improve geospatial analysis and provide more insights into place visitation patterns.

* - Remove `@Transactional` annotation from `processLocationData` to simplify method behavior.
- Add `jts-core` dependency to `pom.xml` for geometry data support.
- Create database migration `V3__updated_significant_places.sql` to add `geom`, `total_duration_seconds`, and `visit_count` columns to `significant_places` table.
- Refactor `LocationDataApiController` to remove unused `LocationDataService` dependency.

* feat: add method to calculate average visit duration for significant places

* Based on the changes and the context of the location processing pipeline, here's a concise commit message:

feat: Implement location processing pipeline with stay point detection and significant place tracking

* feat: add GeoCodingService to SignificantPlaceService constructor

* feat: implement event-driven reverse geocoding for significant places

* feat: add raw location points display with map toggle

* feat: load raw location points from repository for timeline view

* - Add initial JSON sample data for Google Takeout location records
- Refactor `StayPointDetectionService` to improve null safety and reduce distance threshold
- Remove redundant raw-points layer cleanup in map update function
- Adjust imports and clean up `SignificantPlaceService` for efficiency

* fix: correct stay point detection logic by changing distance condition

* feat: implement cluster-based stay point detection algorithm

* - Adjust `PLACE_MERGE_DISTANCE` to use degrees instead of meters.
- Replace `save` with `saveAndFlush` for immediate database synchronization.
- Add `Optional` check when updating existing significant places.
- Remove unnecessary `@Transactional` annotations.

* - Remove redundant map layer and source clearing logic
- Simplify handling of raw points and map updates

* feat: implement trip detection between significant places

* feat: add visit processing configuration and migration for processed visits

* feat: implement visit merging with processed visits table

* refactor: improve visit merging to handle single-place visits chronologically

* feat: add trip detection service and controller for identifying trips between consecutive visits

This commit introduces a comprehensive trip detection system that:
- Identifies trips between consecutive processed visits
- Calculates estimated distance using Haversine formula
- Infers transport mode based on speed
- Provides REST endpoints for manual trip detection
- Integrates with visit merging process to automatically detect trips

Key changes:
- Created TripDetectionService to handle trip detection logic
- Added TripDetectionController for manual trip detection
- Updated VisitMergingRunner to optionally run trip detection after visit merging
- Implemented distance and transport mode inference methods

* feat: enable processing visits on startup

* feat: add trip detection configuration to application properties

* feat: add travelled distance tracking for trips

* refactor: Remove unused code and simplify TripDetectionService

* feat: Add travelled distance calculation for trip detection

* feat: replace mock timeline implementation with actual database data

* refactor: rename origin/destination place methods in timeline view controller

* refactor: Replace Visit with ProcessedVisit in TimelineViewController

* feat: Prevent duplicate ProcessedVisit entries during visit processing

This commit adds logic to check for existing ProcessedVisit entries and prevent duplicates when processing visits. Key changes include:

- Add method to find overlapping ProcessedVisits by user, place, and time range
- Check for existing ProcessedVisits before processing to avoid redundant work
- Update existing ProcessedVisit entries instead of creating duplicates
- Extend time ranges and merge original visit IDs when overlapping visits are found

* feat: implement trip merging service to handle duplicate trips

This commit adds functionality to merge duplicate trips for users by:
- Grouping trips by user, start/end places, and time range
- Merging trips with the earliest start and latest end times
- Recalculating distances based on raw location points
- Determining the most common transport mode
- Adding API endpoints to trigger trip merging for all users or a specific user

* feat: Add processed flag to Visit repository to filter unprocessed visits

* refactor: Remove unused SignificantPlaceRepository and simplify visit processing logic

* feat: Add processed flag to Visit and mark visits as processed after merging

* - Add `processed` column to `visits` table.
- Refactor `calculateHaversineDistance` to `GeoUtils` utility class and update usage across services.
- Enhance `LocationProcessingPipeline` with trip and visit merging logic.
- Modify processed visit indexing and detect trips within specific time ranges.
- Update Google Takeout import API to handle larger file uploads (5GB limit).
- Improve logic and format consistency in database migration and UI templates.
- Adjust trip grouping key and reduce redundant trip detection steps.

* feat: add settings page with navigation link and configuration options

* refactor: simplify index.html by removing complex map and timeline features

* feat: Add full-screen map with transparent navbar and timeline panel

* feat: add timeline navigation and container to index page

* feat: add MapLibre GL JS map with interactive timeline markers and paths

* feat: Update timeline navigation and endpoint handling

* feat: Add TimelineApiController with JSON timeline endpoints

* refactor: replace HTMX timeline loading with pure JavaScript

* feat: Enhance timeline entries with improved styling and details

* feat: enhance timeline entry rendering with icons, details, and duration

* feat: migrate map library from MapLibre GL to Leaflet

* - **Remove settings.html**: Deleted the `settings.html` template as it is no longer used.
- **Update index.html**: Minor formatting and whitespace adjustments.
- **Enhance trip details API**: Added path data to Timeline API, including latitude, longitude, timestamp, and accuracy.
- **Refactor TimelineResponse**: Added `path` attribute to `TimelineEntry` and introduced `PointInfo` record for trip path details.
- **Adjust RabbitMQ Listener**: Added concurrency limit for `LocationDataProcessingService` and removed unused error handling comments.
- **Remove settings mapping**: Deleted unused `/settings` mapping in `WebViewController`.

* feat: add user authentication with login page and password storage

* refactor: replace ON CONFLICT with PL/pgSQL block for admin user migration

* - Rename migration file from `V2` to `V7`.
- Use `ON CONFLICT` to handle admin user creation/upsert logic.
- Ensure `password` column addition remains idempotent.

* feat: add settings page with API token, user management, and job status sections

* - Add `getTokensForUser` method to `ApiTokenService` to fetch user-specific tokens.
- Introduce `RabbitAdmin` bean configuration in `RabbitMQConfig`.
- Autowire `RabbitAdmin` in `QueueStatsService` constructor.
- Add `thymeleaf-extras-springsecurity6` dependency in `pom.xml`.
- Extend `ApiTokenRepository` with `findByUser` method.
- Remove `redirectToSettings` method from `WebViewController`.

* feat: add pagination and place management to settings page

This commit adds a new section to the settings page for managing significant places, including:
- Pagination of places (20 per page)
- Small map display for each place
- Ability to update place names
- Server-side support for place updates
- URL parameter handling for active tabs

The changes include updates to:
- SignificantPlaceRepository (added pagination method)
- PlaceService (added methods for retrieving and updating places)
- SettingsController (added place management endpoint)
- Settings page template (added places management section)

* feat: add places management section with pagination and map display

* - Refactored `QueueStatsService` by removing trip queue handling and updating queue names.
- Integrated Leaflet library into `settings.html` for enhanced map functionality.
- Removed outdated `<div>` and JavaScript trip queue elements in `settings.html`.
- Deleted unused methods and functionalities from `PlaceService`.

* - Fix typo in `LOCATION_QUEUE` constant string.
- Add a translucent circle to the map with a radius of 30 for enhanced visualization.

* feat: add form to create new users in settings page

* feat: add user creation endpoint and move form below users table

* feat: add createUser method to UserService

* feat: add BCryptPasswordEncoder to UserService for secure password hashing

* - Remove `TripMergingController` and its API endpoints.
- Transition trip processing to RabbitMQ messaging.
- Replace direct user trip/visit processing with message queue listeners.
- Simplify `QueueStatsService` and update client APIs for queue stats.
- Add new RabbitMQ queues in `RabbitMQConfig` for processing workflows.
- Refactored frontend template (`settings.html`) for dynamic job statistics display.
- General code cleanup: remove unused methods, adjust indentation, minor fixes.

* feat: add auto-refresh for queue stats on settings page

* feat: add date parameter to URL for sharing and navigation

* - Refactored trip merging logic with added flexibility for grouping by start or end time.
- Removed unused fields (`firstSeen`, `lastSeen`, `visitCount`, `totalDurationSeconds`) from `SignificantPlace` model and database.
- Adjusted significant place processing to simplify logic and remove redundant updates.
- Reduced logging verbosity, changed significant log levels to `debug` or `trace`.
- Updated queue stats refresh interval in settings template.
- Added `MERGE_TRIP_ROUTING_KEY` scheduling in `VisitMergingRunner`.
- Disabled Spring Security debug mode and updated `csrf` configuration.
- Removed unused import and properties.

* style: Refactor index.html with modern UI and improved UX design

* style: switch to 24h time format in timeline display

* - Add new `main.css` file with updated styles for UI enhancements
- Update `index.html` to improve structure and styles, including `timeline-header` and `map` elements placement
- Integrate `HumanizeDuration.js` library for handling time-related operations

* - Remove unused `/merge/{userId}` API endpoint.
- Refactor `VisitMergingService` and `TripDetectionService` to process events with time ranges.
- Introduce `MergeVisitEvent` to encapsulate processing time ranges.
- Replace `CommandLineRunner` in `VisitMergingRunner` with `@Scheduled` for periodic execution.
- Adjust timeline font to "Serif" in `index.html`.
- Increase location processing batch size from 1 to 100.
- Update RabbitMQ prefetch count from 2 to 10.

* - Remove unused imports in `MergeVisitEvent` class
- Optimize code readability

* - Replace `MergeVisitEvent` record with a class for extended functionality.
- Introduce time range filtering in trip and visit merging processes.
- Add configurable cron-based scheduling for visit and trip processing.
- Improve RabbitMQ event handling with detailed payloads.
- Add database index for `raw_location_points` to optimize queries.
- Remove `process-visits-on-startup` and introduce `process-visits-trips.schedule`.
- Increase RabbitMQ processing concurrency for location data queue.
- Simplify significant place repository save operation for efficiency.

* feat: replace date picker with text display of current day

* - Refactored timeline styles in `index.html` for improved layout and consistency.
- Adjusted trip merging logic to remove unused variables and streamline execution in `TripMergingService`.
- Cleaned up redundant visit merging logic in `VisitMergingRunner`.
- Removed obsolete `processVisitsOnStartup` flag from `VisitMergingRunner`.

* feat: add calendar view with date selection functionality

* feat: display multiple months in calendar view

* feat: enhance calendar to display 6 months with responsive layout

* style: update calendar layout and month display count

* feat: add horizontal date picker with responsive design and event handling

* feat: add horizontal date picker with dynamic date selection

* refactor: rename datePicker variable to datePicker2 in index.html

* feat: add auto-select on scroll for horizontal date picker

* feat: add navigation buttons and improve date picker navigation functionality

* refactor: disable navigation buttons in date picker

* feat: add min and max date configuration to horizontal date picker

* feat: enhance horizontal date picker with infinite scrolling and date centering

* feat: Enable infinite scrolling in horizontal date picker without min/max date constraints

* feat: implement infinite scrolling for horizontal date picker

* feat: improve horizontal date picker with centered selection and scroll handling

* feat: add month and year display for selected date element

* feat: add month and year display to selected date element

* feat: enhance date picker with smooth scrolling and animated selection

* refactor: prevent month name duplication during date selection and scrolling

* - Remove unnecessary animation delays and transitions in `horizontal-date-picker.js`
- Refine `.selected` style for date picker in `index.html`
- Comment out unused URL and date display update logic in `index.html`
- Configure RabbitMQ listener concurrency for trip detection service

* perf: optimize horizontal date picker scrolling performance

* refactor: simplify date picker onDateSelect callback

* refactor: remove calendar functionality and related HTML/CSS

* refactor: disable navigation buttons in date picker

* refactor: remove date display and related functionality from index.html

* style: remove date label CSS class

* refactor: remove date navigation and related JavaScript code

* fix: improve date picker selection and scrolling behavior

* fix: add null check for date picker input element

* fix: improve date selection behavior in horizontal date picker

* feat: add horizontal date picker with fixed bottom positioning

* feat: add month row feature with month selection and synchronization

* fix: sync month row with selected date and display 12 months

* feat: modify month picker to start from January for the selected year

* feat: prevent actions when clicking on active month or date

* feat: add year selection and scrolling to horizontal date picker

* style: enhance month item and date picker styling with color and font updates

* feat: add configurable year row with show/hide and years to display options

* feat: emit date selected event when selecting month or year

* style: update timeline and date picker styling with padding and color adjustments

* feat: add option to control selection of future dates

* feat: add today button option to horizontal date picker

* style: update CSS styles for date picker and map components

* feat: ensure date picker initializes with URL-provided date

* fix: adjust date comparison to include full current day

* feat: center horizontal date picker around selected date instead of today

* refactor: preserve current year and month when selecting date components

* fix: update timeline when selecting year or month

* fix: prevent date jumping when selecting month or year in date picker

* - Add concurrency configuration (1-16) to @RabbitListener annotation in ReverseGeocodingListener
2025-05-29 23:01:29 +02:00