Skip to content

feat: enlace directo a la compra desde el mapa de butacas - #11

Open
gersonsebastianx wants to merge 2 commits into
asther0:mainfrom
gersonsebastianx:feat/purchase-link
Open

gersonsebastianx wants to merge 2 commits into
asther0:mainfrom
gersonsebastianx:feat/purchase-link

Conversation

@gersonsebastianx

Copy link
Copy Markdown

El README dice que "la compra y la reserva siguen ocurriendo fuera de la CLI, en Cineplanet". Este PR respeta ese límite, pero quita la parte tediosa: hoy, después de que la TUI te muestra la mejor función y dónde están los buenos asientos, hay que rehacer a mano en la web la elección de ciudad, película, fecha, sede y hora.

Con esto, el mapa de butacas muestra el enlace que cae directo en esa función.

Qué cambia

  • Movie ahora guarda el slug que Cineplanet expone como movieDetailsUrl.
  • Showtime::purchase_url(slug) arma la URL: /compra/{slug}/{cinemaId}/{sessionId}/asientos. El id viene compuesto como sede-sesión, así que reusa el mismo rsplit_once('-') que ya hace hydrate_showtime.
  • La pantalla de mapa muestra el enlace debajo de la leyenda, sólo si el slug se conoce. Si no, se comporta igual que antes en vez de imprimir una URL rota.

Verificación

  • cargo test — 105 pasan, 0 fallan.
  • cargo test -- --ignored — los dos tests de contrato contra la API real pasan. Le agregué una aserción a public_catalog_contract_still_parses para que avise si Cineplanet dejara de mandar el slug: sin eso el enlace se rompería en silencio.
  • cargo fmt --check y cargo clippy --all-targets limpios.
  • El enlace se probó a mano en frío, en pestaña nueva sin estado previo: cae en el mapa correcto con el cronómetro de retención corriendo.

Contexto

Salió de documentar la API mientras armaba mi propia versión en Node, que ya conversamos por WhatsApp. Si preferís que el enlace vaya en otro lado de la pantalla, que sea una tecla en vez de texto, o que no vaya, decime y lo ajusto — o cerralo sin problema.

gersonsebastianx and others added 2 commits August 17, 2026 16:51
The README states that buying happens outside the CLI. This keeps that
boundary but removes the tedious part: instead of redoing city, movie,
date, venue and time by hand on the website, the link lands straight on
the seat map of the chosen showtime.

Cineplanet exposes the movie slug as `movieDetailsUrl`, so `Movie` now
carries it and `Showtime::purchase_url` assembles the URL. The live
contract test asserts the slug still arrives, since a missing slug would
break the link silently.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Closes the loop the seat map opens: after picking a showtime and seeing
where the good seats are, the link is right there instead of forcing a
manual search back on the website.

Rendered only when the slug is known, so a catalog without it degrades
to the previous behaviour rather than printing a broken URL.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gersonsebastianx

Copy link
Copy Markdown
Author

Rebasé sobre main para resolver los conflictos.

Coincidimos en el campo: tú lo llamaste movie_details_url y yo slug. Adopté el tuyo y adapté todo lo mío, así no tienes que tocar tu código para aceptar esto.

Revisé si quedaba redundante con tu browser checkout handoff y creo que no: tú armas la URL dentro de recommend, y esto expone purchase_url en el dominio y muestra el enlace en el mapa de butacas del CLI interactivo. Si prefieres unificarlo en un solo lugar, dime y lo muevo.

Cada commit compila por separado y pasan las 110 pruebas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant