Add new endpoints to PartiesController
* `preview` shows the preview and queues it up for generation if it doesn't exist yet * `regenerate_preview` allows the party owner to force regeneration of previews
This commit is contained in:
parent
8d047be149
commit
0257469582
2 changed files with 42 additions and 0 deletions
|
|
@ -116,6 +116,30 @@ module Api
|
||||||
render_party_json(@parties, count, total_pages)
|
render_party_json(@parties, count, total_pages)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def preview
|
||||||
|
party = Party.find_by!(shortcode: params[:id])
|
||||||
|
|
||||||
|
preview_service = PreviewService::Coordinator.new(party)
|
||||||
|
redirect_to preview_service.preview_url
|
||||||
|
end
|
||||||
|
|
||||||
|
def regenerate_preview
|
||||||
|
party = Party.find_by!(shortcode: params[:id])
|
||||||
|
|
||||||
|
# Ensure only party owner can force regeneration
|
||||||
|
unless current_user && party.user_id == current_user.id
|
||||||
|
return render_unauthorized_response
|
||||||
|
end
|
||||||
|
|
||||||
|
preview_service = PreviewService::Coordinator.new(party)
|
||||||
|
if preview_service.force_regenerate
|
||||||
|
render json: { status: 'Preview regeneration started' }
|
||||||
|
else
|
||||||
|
render json: { error: 'Preview regeneration failed' },
|
||||||
|
status: :unprocessable_entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def authorize
|
def authorize
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
get 'parties/favorites', to: 'parties#favorites'
|
get 'parties/favorites', to: 'parties#favorites'
|
||||||
get 'parties/:id', to: 'parties#show'
|
get 'parties/:id', to: 'parties#show'
|
||||||
|
get 'parties/:id/preview', to: 'parties#preview'
|
||||||
|
post 'parties/:id/regenerate_preview', to: 'parties#regenerate_preview'
|
||||||
post 'parties/:id/remix', to: 'parties#remix'
|
post 'parties/:id/remix', to: 'parties#remix'
|
||||||
|
|
||||||
put 'parties/:id/jobs', to: 'jobs#update_job'
|
put 'parties/:id/jobs', to: 'jobs#update_job'
|
||||||
|
|
@ -72,4 +74,20 @@ Rails.application.routes.draw do
|
||||||
delete 'favorites', to: 'favorites#destroy'
|
delete 'favorites', to: 'favorites#destroy'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if Rails.env.development?
|
||||||
|
get '/party-previews/*filename', to: proc { |env|
|
||||||
|
filename = env['action_dispatch.request.path_parameters'][:filename]
|
||||||
|
path = Rails.root.join('storage', 'party-previews', filename)
|
||||||
|
|
||||||
|
if File.exist?(path)
|
||||||
|
[200, {
|
||||||
|
'Content-Type' => 'image/png',
|
||||||
|
'Cache-Control' => 'no-cache' # Prevent caching during development
|
||||||
|
}, [File.read(path)]]
|
||||||
|
else
|
||||||
|
[404, { 'Content-Type' => 'text/plain' }, ['Preview not found']]
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue