Commit Graph
19 Commits
Author SHA1 Message Date
frommeandClaude Opus 5 b27639c7fa fix: keep the travel date code to a single path segment
The dateCode requirement added with the export route was `.+`, which
replaces Symfony's default `[^/]+` and lets the segment span slashes.
`/api/travels/{dateId}/{hotelId}/{dateTo}/availability` was then matched
by byCode() -- declared above it -- with dateCode swallowing all four
segments, so availability answered 404 "Not found" instead of reaching
the upstream call.

Adds a routing test that reflects the controller's own attributes, so
both the declaration order and the segment class stay guarded. Neither
fails loudly on its own: a path falling through to the wrong route reads
like an endpoint that exists and holds no data.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-29 14:19:24 +02:00
frommeandClaude Opus 5 c5685e6d7c feat: add paginated travel export endpoint for the teamer app
GET /api/travels/export flattens the XML export into one row per travel
date x hotel with its pickups resolved, so the Teamer app can import the
disposition in one walk instead of fanning out over /api/travels.

Built from the XML file map, not travel_snapshot: the snapshot table sits
at this grain but refreshes on its own schedule, while the loaders share
the bpn.cache pool under the xml-sync tag. That is what makes /api/hotels,
/api/pickups and this export move together for free.

Each Ziel_*.xml is walked once and TravelParser::getPickups() does the
zeit parsing, which buys both zeit shapes and adjustOvernightTimes() --
a time-only 02:15 listed after a 23:59 rolls onto the next calendar day.
Pickups join against PickupLoader::loadAll() rather than
patchPickupsDetails(), which sorts: the contract is source order.

The whole assembled export is cached, not a page, so skipped, total and
pickupsWithoutMasterData are whole-export figures identical on every page
and a consumer can abort after the first one. Errors stay real status
codes; the builder is deliberately not wrapped in a catch that would
answer 200 with an error body the way hotelAvailability() does.

The route is declared before api_travel_single_code and that route grows
a requirement, or /api/travels/export resolves to byCode('export') and
404s as though the endpoint existed with no data.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-29 12:13:55 +02:00
fromme bad916cfb7 feat: identify accounts by a uuid in the oauth2 sub claim 2026-09-23 15:17:09 +02:00
fromme ab7d00b35d feat: emit team admin role in userinfo claims when applicable 2026-09-21 11:43:36 +02:00
fromme ec83ad598f feat: identify the authenticated account in the userinfo claims 2026-09-19 10:54:06 +02:00
fromme f8ff4b82a3 feat: replace custom discount with absolute value in favor of percentage 2026-09-08 17:11:00 +02:00
fromme 8443dae5ad feat: additional custom discount applied to total price 2026-09-08 15:29:00 +02:00
Björn Fromme bfad61f1dd feat: upgrade phpunit to 12.5 2026-08-31 09:31:00 +02:00
Björn Fromme 80d734e7d6 feat: derive calendar date range from price configurations 2026-08-26 13:32:25 +02:00
Björn Fromme 351fbab498 feat: improved contingents api performance with db backed snapshots 2026-08-20 11:46:03 +02:00
Björn Fromme 5a3957e143 feat: refactored accommodation booking status model 2026-08-19 11:46:52 +02:00
Björn Fromme 8dee65d0dc feat: additional confirmation cycle and status for groups inquiries 2026-08-18 12:48:17 +02:00
Björn Fromme aa8fa5c1b2 feat: accommodation booking type and status as dedicated properties 2026-08-06 08:52:09 +02:00
Björn Fromme 2c381ee741 feat: additional status 2026-08-04 18:09:40 +02:00
Björn Fromme 8ff13614d2 fix: treat dates without price as unavailable 2026-08-04 11:29:58 +02:00
Björn Fromme 9d2aa11fdb feat: groups price calculator admin crud, booking/offer flow and api 2026-08-03 15:25:10 +02:00
Björn Fromme b2fccae431 chore: remote obsolete contingents-related plumbing 2026-06-11 16:19:14 +02:00
Björn Fromme e4ef2f7adc feat: MailJet list handling with DOI, webhook receiver and API endpoint
addresses #869cut134
2026-04-29 09:51:57 +02:00
Björn Fromme 9b84893d88 feat: api endpoints and xml sync for contingents data 2026-04-22 11:23:52 +02:00