Rails.application.routes.draw do mount ActionCable.server => "/cable" get "up" => "rails/health#show", as: :rails_health_check namespace :api do namespace :v1 do post "auth/login", to: "auth#login" post "auth/register", to: "auth#register" post "auth/logout", to: "auth#logout" post "auth/refresh", to: "auth#refresh" get "auth/me", to: "auth#me" get "invitations/:token", to: "invitations#show" post "invitations/:token/accept", to: "invitations#accept" resources :teams do member do post :members, action: :add_member delete "members/:user_id", action: :remove_member get :recordings end resources :matches, only: %i[index create] get "youtube/authorize", to: "youtube#authorize" end resources :recordings, only: %i[update destroy], controller: "recordings" do member do get :download post :publish_youtube end end resources :matches, only: %i[show update destroy] do resources :sessions, only: %i[create], controller: "stream_sessions" end resources :sessions, only: %i[show], controller: "stream_sessions" do member do patch :start patch :stop patch :pause patch :resume patch :score get :events post :telemetry post :pairing_token post :claim_pairing post :regia_link post :network_test get :youtube_stats end end get "youtube/callback", to: "/youtube_oauth_callback#show" end end namespace :webhooks do post "mediamtx/connect", to: "mediamtx#connect" post "mediamtx/disconnect", to: "mediamtx#disconnect" post "mediamtx/ready", to: "mediamtx#ready" post "mediamtx/validate_publish", to: "mediamtx#validate_publish" post "stripe", to: "stripe#create" end post "internal/validate_publish", to: "webhooks/mediamtx#validate_publish" namespace :admin do get "login", to: "auth#new", as: :login post "login", to: "auth#create" delete "logout", to: "auth#destroy", as: :logout resource :password, only: %i[edit update], controller: "passwords" root to: "dashboard#index" get "metrics", to: "dashboard#metrics" get "billing", to: "billing#index", as: :billing post "billing/payments/:payment_id/attach_pdf", to: "billing#attach_pdf", as: :billing_payment_attach_pdf resources :teams, only: %i[show] resources :clubs, only: %i[index show] do member do post :grant_comped delete :revoke_comped end resources :billing_invoices, only: %i[index new create edit update], controller: "billing_invoices" end resources :sessions, only: %i[index show] do member do post :stop post :regia_link end end get "youtube/platform", to: "youtube#platform", as: :youtube_platform end get "hls/*path", to: "hls_proxy#show", format: false, constraints: { path: /.+/ } get "live", to: "public/live#index", as: :public_live_index get "live/:id", to: "public/live#show", as: :public_live get "live/:id/status.json", to: "public/live#status", as: :public_live_status get "replay", to: "public/replay#index", as: :public_replay_index get "replay/:id", to: "public/replay#show", as: :public_replay get "replay/:id/stream", to: "public/replay#stream", as: :public_replay_stream get "replay/:id/thumbnail", to: "public/replay#thumbnail", as: :public_replay_thumbnail get "replay/:id/download", to: "public/replay#download", as: :public_replay_download get "regia/:token", to: "public/regia#show", as: :public_regia get "regia/:token/status.json", to: "public/regia#status", as: :public_regia_status patch "regia/:token/score", to: "public/regia#score", as: :public_regia_score post "regia/:token/pause", to: "public/regia#pause", as: :public_regia_pause post "regia/:token/resume", to: "public/regia#resume", as: :public_regia_resume post "regia/:token/stop", to: "public/regia#stop", as: :public_regia_stop root to: "public/pages#home" get "sitemap.xml", to: "public/sitemap#show", defaults: { format: :xml } scope module: :public, as: :public do get "funzionalita", to: "pages#features", as: :features get "faq", to: "pages#faq", as: :faq get "pallavolo-giovanile", to: "pages#pallavolo", as: :pallavolo get "prezzi", to: "pages#pricing", as: :prezzi get "pricing", to: redirect("/prezzi") get "privacy", to: "pages#privacy", as: :privacy get "cookie", to: "pages#cookies", as: :cookies get "cookies", to: redirect("/cookie") get "termini", to: "pages#terms", as: :termini get "signup", to: "registrations#new" post "signup", to: "registrations#create" get "login", to: "sessions#new" post "login", to: "sessions#create" delete "logout", to: "sessions#destroy" get "password/forgot", to: "password_resets#new", as: :password_forgot post "password/forgot", to: "password_resets#create" get "password/reset", to: "password_resets#edit", as: :password_reset patch "password/reset", to: "password_resets#update" get "clubs/new", to: "clubs#new", as: :new_club post "clubs", to: "clubs#create" get "clubs/:id", to: "clubs#show", as: :club get "clubs/:id/edit", to: "clubs#edit", as: :edit_club patch "clubs/:id", to: "clubs#update" get "clubs/:id/billing", to: "clubs#billing", as: :club_billing get "clubs/:club_id/replays", to: "club_recordings#index", as: :club_recordings patch "clubs/:club_id/replays/:id", to: "club_recordings#update", as: :club_recording delete "clubs/:club_id/replays/:id", to: "club_recordings#destroy" post "clubs/:club_id/replays/:id/publish_youtube", to: "club_recordings#publish_youtube", as: :club_recording_publish_youtube get "clubs/:id/billing/profile", to: "club_billing#profile", as: :club_billing_profile patch "clubs/:id/billing/profile", to: "club_billing#update_profile" post "clubs/:id/billing/cancel_subscription", to: "club_billing#cancel_subscription", as: :club_billing_cancel_subscription get "clubs/:id/billing/invoices/:invoice_id", to: "club_billing#download_invoice", as: :club_billing_invoice get "clubs/:id/checkout", to: "clubs#checkout", as: :club_checkout post "clubs/:id/portal", to: "clubs#portal", as: :club_portal get "clubs/:id/youtube/connect", to: "clubs#youtube_connect", as: :club_youtube_connect delete "clubs/:id/youtube/disconnect", to: "clubs#youtube_disconnect", as: :club_youtube_disconnect get "clubs/:club_id/matches/new", to: "club_matches#new", as: :new_club_match post "clubs/:club_id/matches", to: "club_matches#create", as: :club_matches get "teams/new", to: redirect("/clubs/new") get "clubs/:club_id/teams/new", to: "teams#new", as: :new_club_team post "clubs/:club_id/teams", to: "teams#create", as: :club_teams get "teams/:id/dettagli", to: "teams#details", as: :team_details get "teams/:id/dashboard", to: "teams#dashboard" get "teams/:id/roster", to: "teams#roster" get "teams/:id/edit", to: "teams#edit", as: :edit_team patch "teams/:id", to: "teams#update", as: :team resources :teams, only: [] do resources :roster_members, only: %i[create edit update destroy], controller: "team_roster_members" resources :matches, only: %i[index new create edit update destroy], controller: "matches" end get "teams/:id/invite", to: "teams#invite", as: :team_invite post "teams/:id/invite", to: "teams#create_invitation" post "teams/:id/staff/self", to: "teams#assign_self_staff", as: :team_assign_self_staff delete "teams/:id/staff/self", to: "teams#clear_self_staff", as: :team_clear_self_staff delete "teams/:id/members/:user_id", to: "teams#remove_member", as: :team_remove_member delete "teams/:id/invitations/:invitation_id", to: "teams#destroy_invitation", as: :team_destroy_invitation get "teams/:id/youtube/connect", to: "teams#youtube_connect", as: :team_youtube_connect delete "teams/:id/youtube/disconnect", to: "teams#youtube_disconnect", as: :team_youtube_disconnect get "join/:token", to: "invitations#show", as: :invitation post "join/:token", to: "invitations#accept" end end