Rails.application.routes.draw do # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. # Can be used by load balancers and uptime monitors to verify that the app is live. get "up" => "rails/health#show", as: :rails_health_check # Render dynamic PWA files from app/views/pwa/* (remember to link manifest in application.html.erb) # get "manifest" => "rails/pwa#manifest", as: :pwa_manifest # get "service-worker" => "rails/pwa#service_worker", as: :pwa_service_worker # Defines the root path route ("/") root "pages#home" # === Devise === # Routes for devise authentication Gem # Bind devise to user devise_for :users, path: "auth", path_names: { sign_in: "sign_in", # Route for user login sign_out: "sign_out", # Route for user logout password: "reset-password", # Route for changing password confirmation: "verification", # Route for account confirmation unlock: "unblock", # Route for account unlock # registration: "account", # Route for user account sign_up: "signup" # Route for user registration }, controllers: { sessions: "auth/sessions", # Custom controller for sessions registrations: "auth/registrations", # Custom controller for registrations passwords: "auth/passwords", # Custom controller for passwords confirmation: "auth/confirmations" # Custom controller for confirmations } # === Onboarding === get "onboarding", to: "onboarding#index", as: "onboarding" post "onboarding", to: "onboarding#complete", as: "complete_onboarding" # === Pages === get "dashboard", to: "pages#dashboard", as: "dashboard" # === Settings === get "settings", to: "settings#show", as: "settings" patch "settings", to: "settings#update" # === Events === get "events", to: "events#index", as: "events" get "events/:slug.:id", to: "events#show", as: "event" # === 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: [ :index, :show ] do member do get :checkout get :invoice match :retry_payment, via: [ :get, :post ] post :increment_payment_attempt 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" # 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: "tickets#download", as: "ticket_download" # === Promoter Routes === namespace :promoter do resources :events do member do patch :publish patch :unpublish patch :cancel patch :mark_sold_out end # Nested ticket types routes resources :ticket_types do member do post :duplicate end end end end # API routes versioning namespace :api do namespace :v1 do # RESTful routes for event management resources :events, only: [ :index, :show, :create, :update, :destroy ] post "carts/store", to: "carts#store", as: "store_cart" # RESTful routes for order management resources :orders, only: [] do member do patch :increment_payment_attempt end end # resources :ticket_types, only: [ :index, :show, :create, :update, :destroy ] end end end