- Updated `requirements.txt` to include `pillow-heif` for HEIF image format support.
- Modified `ContentImage` model to retain image metadata during processing.
- Implemented new functions for GPS coordinate normalization and conversion from DMS to decimal format in `metadata.py`.
- Added unit tests for DMS conversion and GPS extraction from JPEG images in `test_image_metadata.py` to ensure accuracy and reliability.
- Renamed `ExternalSunTimesThrottle` to `ExternalSunriseSunsetThrottle` for clarity.
- Added `SunriseSunsetAPI` view to handle sunrise and sunset data retrieval.
- Implemented caching for sunrise/sunset data using `get_or_fetch_cached`.
- Created new service functions for fetching sunrise/sunset data from the external API.
- Updated related tests to ensure proper functionality and caching behavior.
- Removed deprecated sun times handling from the `LocationViewSet` for cleaner code.
- Added utility functions to ensure datetime values are UTC-aware, improving consistency in date handling across the application.
- Introduced migrations to update existing visit records, making start and end dates timezone-aware.
- Normalized all-day visit end dates to UTC midnight, ensuring accurate representation of all-day events.
- Updated serializers and services to utilize new datetime utilities, enhancing the handling of visit dates in various contexts.
- Added comprehensive tests for new datetime utilities to ensure correct functionality and edge case handling.
- Introduced a helper function to check if a hostname matches a given domain, improving the clarity of the `infer_source_from_url` function.
- Updated the image source inference logic to utilize the new helper function for better maintainability.
- Added a test case to ensure that spoofed hostnames do not match valid image sources, enhancing security and robustness of the inference logic.
- Updated Docker Compose configuration to ensure the correct image is used for the backend service.
- Introduced a new `source` field in the `ContentImage` model to track the origin of images (e.g., upload, Google, Wikipedia, URL, Immich).
- Added a `source_url` field to store the URL associated with the image source.
- Implemented a `coordinates` field to store GPS data for images.
- Enhanced the `ContentImageSerializer` to include the new fields and updated the representation logic.
- Created a management command to backfill GPS coordinates for existing images based on EXIF data or Immich metadata.
- Added utility functions for resolving image metadata and creating `ContentImage` instances with proper source and coordinates.
- Updated various views and services to utilize the new image source and coordinates features.
- Added tests to ensure the correct functionality of the new features and metadata handling.
- Added permissions for GitHub Actions workflows to manage contents, packages, and actions.
- Refactored SearchValidationError and IntegrationError classes to include custom messages and status codes.
- Improved logging in GlobalSearchView and WandererIntegrationViewSet to capture validation errors and exceptions more effectively.
- Updated error responses in billing views to provide user-friendly messages while logging detailed exceptions.
- Added dashboard service to aggregate user data, including recent locations, upcoming trips, active trips, and events.
- Introduced UserStatsService for calculating user activity statistics and visited locations.
- Created unit tests for dashboard functionality to ensure data integrity and expected responses.
- Updated frontend components to display dashboard data, including user stats and trip information.
- Enhanced localization support for dashboard-related strings in the application.
- Introduced CalendarViewSet for handling calendar events, including user authentication and event retrieval.
- Implemented calendar event services for managing various event types (visits, transportation, lodging, etc.).
- Added new calendar-related components in the frontend, including event display, filtering, and sidebar statistics.
- Enhanced user avatar component for better visual representation.
- Updated application version to reflect new features.
- Updated the global search URL construction to ensure proper handling of city and region IDs.
- Refactored ReadOnlyLatLonMixin to expose latitude and longitude as part of the serializer's representation.
- Added unit tests for city, region, and country serializers to verify latitude and longitude inclusion.
- Improved the user interface in various components to enhance the search experience and display relevant information.
- Updated localization strings for better user guidance in search functionalities.
- Added a new global search API endpoint to handle search queries across various entities including locations, collections, and users.
- Introduced SearchHitSerializer to standardize the response format for search results.
- Developed a command palette for enhanced search experience, allowing users to quickly access search functionalities.
- Created frontend components for displaying search results, including a dedicated SearchResultRow component.
- Implemented recent searches feature to improve user experience by remembering previous queries.
- Updated localization strings to support new search features and improve user guidance.
- Added tests to ensure the reliability of the search functionality and its integration with existing components.
- Implemented PDF generation for collections, allowing users to create printable itineraries.
- Added support for Noto fonts to ensure proper rendering of text and emojis in PDFs.
- Enhanced admin interfaces for achievements and adventures, improving usability and data management.
- Introduced new fields and methods in models and serializers to support geolocation features and improve data handling.
- Updated migrations to transition from latitude/longitude fields to a unified PointField for geographic data.
- Added tests to validate PDF generation functionality and ensure reliability.