# creates post actions based on a post and a user class PostActionCreator def initialize(user, post) @user = user @post = post end def perform(action) guardian.ensure_post_can_act!(@post, action, opts: { taken_actions: PostAction.counts_for([@post].compact, @user)[@post&.id] }) PostAction.act(@user, @post, action) end private def guardian @guardian ||= Guardian.new(@user) end end