# frozen_string_literal: true class Api::BroadcastsController < Api::ApiController deserializable_resource :broadcast, only: [:update] include ProjectContext before_action :set_project before_action :set_broadcast, only: [:show, :update] def index render jsonapi: broadcasts, class: { Broadcast: SerializableBroadcast } end def show render jsonapi: @broadcast, class: { Broadcast: SerializableBroadcast, "ActiveStorage::Attachment".to_sym => ActiveStorage::SerializableAttachment }, include: [:files] end def update file_params.each do |file| file[:io] = StringIO.new(Base64.decode64(file[:io])) @broadcast.files.attach(io: file[:io], filename: file[:filename]) end @broadcast.save! render jsonapi: @broadcast, class: { Broadcast: SerializableBroadcast, "ActiveStorage::Attachment".to_sym => ActiveStorage::SerializableAttachment }, include: [:files] end private def file_params broadcast_params = params.require(:broadcast).permit! broadcast_params[:files] end def broadcasts policy_scope(@project.broadcasts.where(status: %w[created idle])) end def set_broadcast @broadcast = authorize policy_scope(@project.broadcasts).find(params[:id]) end end