Files
discourse/plugins/discourse-events/app/services/discourse_post_event/update_invitee.rb
T
David Battersby 629c919eb2 DEV: rename Discourse Calendar to Discourse Events (#42021)
Moves the plugin directory and associated files, along with updating
various import references.
2026-08-12 11:34:15 +04:00

58 lines
1.3 KiB
Ruby

# frozen_string_literal: true
module DiscoursePostEvent
class UpdateInvitee
include Service::Base
params do
attribute :event_id, :integer
attribute :invitee_id, :integer
attribute :status, :symbol
attribute :recurring, :boolean, default: false
validates :event_id, presence: true
validates :invitee_id, presence: true
validates :status, inclusion: { in: Invitee.statuses.keys }
end
model :invitee
policy :can_act_on_invitee
model :event
policy :can_see_event
policy :can_update_attendance
policy :has_capacity
step :update
private
def fetch_invitee(params:)
Invitee.find_by(id: params.invitee_id, post_id: params.event_id)
end
def can_act_on_invitee(guardian:, invitee:)
guardian.can_act_on_invitee?(invitee)
end
def fetch_event(invitee:)
invitee.event
end
def can_see_event(guardian:, event:)
guardian.can_see?(event.post)
end
def can_update_attendance(guardian:, event:)
event.can_user_update_attendance?(guardian.user)
end
def has_capacity(event:, invitee:, params:)
params.status != :going || !event.at_capacity? || invitee.status == Invitee.statuses[:going]
end
def update(invitee:, params:)
invitee.update_attendance!(params.status, recurring: params.recurring)
end
end
end