feat: Merge PDF ticket generation functionality from feat/pdf-ticket branch

- Add TicketPdfGenerator service for creating PDF tickets with QR codes
- Implement download_ticket action in TicketsController
- Update ticket routes to support both ID and QR code access
- Add to_pdf method to Ticket model using TicketPdfGenerator
- Resolve conflicts between email notifications and PDF ticket features
- Maintain backward compatibility with existing QR code routes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
kbe
2025-09-06 20:51:06 +02:00
5 changed files with 62 additions and 18 deletions

View File

@@ -38,9 +38,9 @@ Rails.application.routes.draw do
get "events", to: "events#index", as: "events"
get "events/:slug.:id", to: "events#show", as: "event"
# === Orders ===
get "events/:slug.:id/orders/new", to: "orders#new", as: "event_order_new"
post "events/:slug.:id/orders", to: "orders#create", as: "event_order_create"
# === Orders (scoped to events) ===
get "orders/new/events/:slug.:id", to: "orders#new", as: "event_order_new"
post "orders/create/events/:slug.:id", to: "orders#create", as: "event_order_create"
resources :orders, only: [ :show ] do
member do
@@ -50,18 +50,20 @@ Rails.application.routes.draw do
end
end
get "orders/payments/success", to: "orders#payment_success", as: "order_payment_success"
get "orders/payments/cancel", to: "orders#payment_cancel", as: "order_payment_cancel"
get "orders/payments/success", to: "orders#payment_success", as: "order_payment_success"
get "orders/payments/cancel", to: "orders#payment_cancel", as: "order_payment_cancel"
# Legacy ticket routes - redirect to order system
# Legacy routes - redirect to order system
get "events/:slug.:id/tickets/checkout", to: "tickets#checkout", as: "ticket_checkout"
post "events/:slug.:id/tickets/retry", to: "tickets#retry_payment", as: "ticket_retry_payment"
get "payments/success", to: "tickets#payment_success", as: "payment_success"
get "payments/cancel", to: "tickets#payment_cancel", as: "payment_cancel"
# === Tickets ===
get "tickets/:qr_code", to: "tickets#show", as: "ticket"
get "tickets/:qr_code/download", to: "events#download_ticket", as: "ticket_download"
# Support both ticket_id and qr_code for backward compatibility
get "tickets/:qr_code", to: "tickets#show", as: "ticket", constraints: { qr_code: /[^\/]+/ }
get "tickets/:ticket_id", to: "tickets#show", as: "ticket_by_id"
get "tickets/:ticket_id/download", to: "tickets#download_ticket", as: "download_ticket"
# === Promoter Routes ===
namespace :promoter do