mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2026-07-30 15:28:30 -04:00
v0.12.1 version update + itinerary validation fixes (#1158)
* fix(itinerary): suppress false-positive UniqueTogetherValidator in CollectionItineraryItemSerializer (#1157) DRF 3.15 inspects `UniqueConstraint` entries from `Model._meta.constraints` and auto-generates `UniqueTogetherValidator` objects for them, but strips each constraint's `condition` argument in the process. The `CollectionItineraryItem` model has two conditional constraints: - `unique_order_per_collection_day`: unique `(collection, date, order)` only when `is_global=False AND date IS NOT NULL` - `unique_order_per_collection_global`: unique `(collection, order)` only when `is_global=True` Without their conditions, DRF turns the second constraint into a validator that checks `(collection, order)` across *all* rows regardless of type. This means adding any dated itinerary item (transportation, lodging, etc.) with `order=0` is rejected with 400 whenever a trip-wide (global) item already holds `order=0` for the same collection — which is almost always, since global items start at order 0. Fix: set `validators = []` on the serializer Meta to suppress the incorrectly-stripped validators. The view already adjusts `order` to avoid real conflicts within each group, and the DB-level constraints continue to enforce conditional uniqueness correctly. This actually fixes #1153 for me Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(release): update version to v0.12.1 in settings, documentation, Dockerfile, and config * fix(config): update appVersion to remove suffix and align with release v0.12.1 * docs(changelog): update v0.12.1 release notes with new features and improvements --------- Co-authored-by: Maxim Burgerhout <maxim@wzzrd.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1071,6 +1071,11 @@ class CollectionItineraryItemSerializer(CustomModelSerializer):
|
||||
model = CollectionItineraryItem
|
||||
fields = ['id', 'collection', 'content_type', 'object_id', 'item', 'date', 'is_global', 'order', 'start_datetime', 'end_datetime', 'created_at', 'object_name']
|
||||
read_only_fields = ['id', 'created_at', 'start_datetime', 'end_datetime', 'item', 'object_name']
|
||||
# DRF 3.15 generates UniqueTogetherValidator from UniqueConstraints without applying
|
||||
# their conditions, causing false 400s (e.g. a dated item with order=0 is rejected
|
||||
# when a global item with the same order exists). The view and DB constraints
|
||||
# already enforce the correct conditional uniqueness.
|
||||
validators = []
|
||||
|
||||
def validate(self, attrs):
|
||||
data = super().validate(attrs)
|
||||
|
||||
@@ -392,7 +392,7 @@ PUBLIC_URL = getenv('PUBLIC_URL', 'http://localhost:8000')
|
||||
# ADVENTURELOG_CDN_URL = getenv('ADVENTURELOG_CDN_URL', 'https://cdn.adventurelog.app')
|
||||
|
||||
# Major release version of AdventureLog, not including the patch version date.
|
||||
ADVENTURELOG_RELEASE_VERSION = 'v0.12.0'
|
||||
ADVENTURELOG_RELEASE_VERSION = 'v0.12.1'
|
||||
|
||||
# https://github.com/dr5hn/countries-states-cities-database/tags
|
||||
COUNTRY_REGION_JSON_VERSION = 'v3.1'
|
||||
|
||||
@@ -53,7 +53,7 @@ export default defineConfig({
|
||||
priceCurrency: "USD",
|
||||
description: "Open-source version available for self-hosting.",
|
||||
},
|
||||
softwareVersion: "v0.12.0",
|
||||
softwareVersion: "v0.12.1",
|
||||
license:
|
||||
"https://github.com/seanmorley15/adventurelog/blob/main/LICENSE",
|
||||
screenshot:
|
||||
@@ -281,6 +281,10 @@ export default defineConfig({
|
||||
text: "Development Timeline",
|
||||
link: "/docs/changelogs/development_timeline",
|
||||
},
|
||||
{
|
||||
text: "v0.12.1",
|
||||
link: "/docs/changelogs/v0-12-1",
|
||||
},
|
||||
{
|
||||
text: "v0.12.0",
|
||||
link: "/docs/changelogs/v0-12-0",
|
||||
|
||||
61
documentation/docs/changelogs/v0-12-1.md
Normal file
61
documentation/docs/changelogs/v0-12-1.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# AdventureLog v0.12.1
|
||||
|
||||
Released 5-26-2026
|
||||
|
||||
Hi everyone!
|
||||
|
||||
I’m excited to announce AdventureLog v0.12.1, an incremental release that improves the day-to-day experience of logging, managing, and visualizing your travels. While this update is smaller than v0.12.0, it brings meaningful quality-of-life upgrades, better reliability, and fixes bugs associated with the v0.12.0 feature update.
|
||||
|
||||
## ⚡ New Quick-Add Workflow
|
||||
|
||||
- Added the location and lodging quick-add feature to make logging places faster and more convenient. (#687)
|
||||
- Quick-add pulls from Google Maps so the integration is required for it to be available on your instance
|
||||
|
||||
## 🗺️ Collection Map Fixes
|
||||
|
||||
- Fixed a bug where collection maps displayed no markers or pins even when the underlying data was correct (#1100)
|
||||
|
||||
## ✨ Miscellaneous
|
||||
|
||||
- New light and dark themes that better reflect AdventureLog
|
||||
- Ability to set default basemap for the map views in the user settings page
|
||||
- This is now reflected across all maps in the application
|
||||
- Added OpenFreeMap Liberty as a basemap option
|
||||
- Opening a location in an external map provider now searches and displays the location properly
|
||||
- Enhanced API key management interface for a clearer and more usable experience
|
||||
- Improved API hashing algorithm for higher security
|
||||
- Various UI and workflow refinements across the app
|
||||
- General stability and usability improvements
|
||||
- Make it so only collection owners can edit collection details
|
||||
|
||||
## 🙌 Thanks to the Community
|
||||
|
||||
This release was shaped by an incredible amount of feedback, ideas, testing, and code contributions from the community. Thank you to everyone who opened issues, reviewed changes, tested builds, and helped refine this update.
|
||||
|
||||
### 💻 Code Contributors
|
||||
|
||||
- @HangoverHGV
|
||||
- @citrusjunoss
|
||||
- @lesensei
|
||||
- @vorbeiei
|
||||
- @mllopart
|
||||
- @stephanzwicknagl
|
||||
- @orhunavcu
|
||||
- @bittin
|
||||
- @totoroot
|
||||
- @cyphra
|
||||
- @Pexilo
|
||||
|
||||
## 💖 Support the Project
|
||||
|
||||
If AdventureLog helps you plan, remember, or relive your travels, consider supporting the project:
|
||||
|
||||
👉 https://seanmorley.com/sponsor
|
||||
|
||||
📖 Full Changelog:
|
||||
https://github.com/seanmorley15/AdventureLog/compare/v0.12.0...v0.12.1
|
||||
|
||||
Happy travels!
|
||||
|
||||
Sean Morley (@seanmorley15)
|
||||
Founder & Project Lead
|
||||
@@ -23,11 +23,11 @@ FROM gcr.io/distroless/nodejs22-debian12:nonroot@sha256:13593b7570658e8477de39e2
|
||||
|
||||
# Metadata labels for the AdventureLog image
|
||||
LABEL maintainer="Sean Morley" \
|
||||
version="v0.12.0" \
|
||||
version="v0.12.1" \
|
||||
description="AdventureLog - the ultimate self-hosted travel companion." \
|
||||
org.opencontainers.image.title="AdventureLog" \
|
||||
org.opencontainers.image.description="AdventureLog is a self-hosted travel companion that helps you plan, track, and share your adventures." \
|
||||
org.opencontainers.image.version="v0.12.0" \
|
||||
org.opencontainers.image.version="v0.12.1" \
|
||||
org.opencontainers.image.authors="Sean Morley" \
|
||||
org.opencontainers.image.url="https://raw.githubusercontent.com/seanmorley15/AdventureLog/refs/heads/main/brand/banner.png" \
|
||||
org.opencontainers.image.source="https://github.com/seanmorley15/AdventureLog" \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export let appVersion = 'v0.12.1-beta-052126';
|
||||
export let versionChangelog = 'https://github.com/seanmorley15/AdventureLog/releases/tag/v0.12.0';
|
||||
export let appVersion = 'v0.12.1';
|
||||
export let versionChangelog = 'https://github.com/seanmorley15/AdventureLog/releases/tag/v0.12.1';
|
||||
export let appTitle = 'AdventureLog';
|
||||
export let copyrightYear = '2023-2026';
|
||||
|
||||
Reference in New Issue
Block a user