feat(meeting-types): let owners write the note bookers already see - #172
Merged
Conversation
…digest to 76adddc
…ocker digest to 0a761cf
…maven-plugin to v10.0.1
…distroless-musl docker digest to 6f86698
MeetingType.description has existed since V1 and renders in two public places -- the booking page's left rail and the public landing card -- but no form ever wrote it, so the column was permanently null and the renders were dead code. GH #128 asked for exactly that note. Expose the existing field instead of adding a second one: a textarea on the meeting-type create form and on the detail page's Basics section, carried through applyEditableFields so create and edit share one code path. Blank clears it back to null. No migration -- the column is there. Note that Booking.effectiveDescription falls back to the type's description, so the note also becomes the Google Calendar event body and the .ics DESCRIPTION for bookings of that type. Closes #128 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
asm0dey
added a commit
that referenced
this pull request
Sep 5, 2026
The Note textarea (PR #172) sits under Slug in the Basics section, so both the create-form and detail-form shots were stale. Reshot from a live dev instance seeded to match the originals (Intro call / intro-call, 30 min, Google Meet, min notice 0, write calendar alex@example.com). Also adds a booking-page shot to the Note section, which had no image. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sonar java:S9358 on both meeting-type slug sites: the ternary picked between two slugify calls rather than between the two inputs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…x-base-stream-musl' into feat/meeting-type-description-field
…me-container-jdk-26-musl' into feat/meeting-type-description-field
…ica-runtime-container-jre-distroless-musl' into feat/meeting-type-description-field
…potless-maven-plugin-3.x' into feat/meeting-type-description-field
…-git-commit-id-maven-plugin-10.x' into feat/meeting-type-description-field
…oogle-api-client-2.x' into feat/meeting-type-description-field
…n' into feat/meeting-type-description-field
…' into feat/meeting-type-description-field # Conflicts: # pom.xml
…eeting-type-description-field
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Closes #128.
What was actually wrong
MeetingType.descriptionhas been in the schema sinceV1__core_schema.sql:15and renders in two public places already — the booking page's left rail (book.html:40) and the public landing card (landing.html:21). But no form ever wrote it. The column was permanentlyNULLfor every user, and both renders were unreachable branches.So #128 isn't "add a note field" — it's "expose the note field that already exists".
flowchart LR CF["create form<br/><code>meetingTypes.html</code>"]:::new DF["detail Basics form<br/><code>meetingTypeDetail.html</code>"]:::new AEF["<code>AdminResource.applyEditableFields</code>"]:::new COL[("<b>meeting_type.description</b><br/>TEXT — since V1")] BP["booking page left rail<br/><code>book.html:40</code>"] LC["landing card<br/><code>landing.html:21</code>"] ED["<code>Booking.effectiveDescription</code>"] GC["Google Calendar event body"] ICS[".ics DESCRIPTION"] CF -->|"new"| AEF DF -->|"new"| AEF AEF -->|"new"| COL COL --> BP COL --> LC COL --> ED ED --> GC ED --> ICS classDef new stroke-width:3px,stroke-dasharray:0Everything to the right of the column already shipped. Nothing on the left existed — no form wrote
the column, so it was
NULLfor every user and all four read paths were dead. This PR adds onlythe left half.
Change
AdminResource.applyEditableFieldstakes adescriptionand writes it (blank →null); create and edit already share that method, so both paths get it from one line.@RestForm String descriptiononcreateMeetingTypeandeditMeetingType.meetingTypes.html) and the detail page's Basics section (meetingTypeDetail.html),maxlength="2000".adm_meetingTypes_label_descriptionwithde+hevalues.Placement: the note stays in the left rail where it already rendered, not in the booking-form column the reporter's screenshot pointed at. It sits under the type name and duration, above the fold, and stacks first on mobile. Easy to move if the reporter disagrees once they can actually see it.
Worth knowing
Booking.effectiveDescription(type)falls back to the type's description (BookingService.java:608), so this note also becomes the Google Calendar event body and the.icsDESCRIPTION for every booking of that type. That's arguably the right behaviour for "please don't worry if you're late", but it isn't note-on-the-page-only.Tests
MeetingTypeDescriptionTest— 8 cases covering the round trip: admin form → column → public booking page and landing card, plus blank-clears-to-null and the edit path.Full suite: 1044 tests, 0 failures, 0 errors, BUILD SUCCESS.
Folded-in dependency updates
This branch also carries the nine open Renovate PRs, merged in and validated together rather than
one at a time:
quarkus.platform.version→ 3.39.2surefire-plugin.version→ 3.6.0com.google.api-client:google-api-client→ 2.9.1git-commit-id-maven-plugin→ 10.0.1spotless-maven-plugin→ 3.10.2oven/bun:1digestbellsoft/hardened-liberica-runtime-container:jre-distroless-musldigestbellsoft/liberica-runtime-container:jdk-26-musldigestbellsoft/alpaquita-linux-base:stream-musldigest#169 and #170 both edited adjacent lines in
pom.xml's property block, so that one merge conflicted;resolved by keeping both bumps. Full suite re-run on the merged result: 1044 tests, 0 failures,
spotless:checkclean.Also in here: a Sonar
java:S9358fix on both meeting-type slug sites — the ternary chose betweentwo
Slugs.slugify(...)calls instead of between the two inputs.🤖 Generated with Claude Code