# Copyright (C) 2024-2025 LibreWeddingPlanner contributors # frozen_string_literal: true class InvitationsController < ApplicationController skip_before_action :authenticate_user!, only: :show def index @invitations = Invitation.includes(:guests).all respond_to do |format| format.json do render json: @invitations.as_json( only: :id, include: { guests: { only: %i[id name] } } ) end format.pdf do pdf_html = ActionController::Base.new.render_to_string( template: 'invitations/sheet', layout: 'pdf', locals: { invitations: @invitations } ) pdf = WickedPdf.new.pdf_from_string(pdf_html) send_data pdf, filename: "invitations_#{Time.current.strftime('%Y%m%d_%H%M%S')}.pdf" end end end def sheet; end def show invitation = Invitation.includes(:guests).find(params[:id]) if invitation render json: invitation, only: :id, include: { guests: { only: %i[id name status] } }, status: :ok else render json: { error: 'Invitation not found' }, status: :not_found end end def create invitation = Invitation.create if invitation.persisted? render json: invitation, only: :id, status: :created else render json: { errors: invitation.errors.full_messages }, status: :unprocessable_entity end end def update invitation = Invitation.find(params[:id]) if invitation.update(guest_ids: params[:invitation][:guest_ids]) render json: invitation, only: :id, include: { guests: { only: %i[id name] } }, status: :ok else render json: { errors: invitation.errors.full_messages }, status: :unprocessable_entity end end def destroy invitation = Invitation.find(params[:id]) if invitation.destroy head :no_content else render json: { errors: invitation.errors.full_messages }, status: :unprocessable_entity end end end