Merge pull request #5755 from techAPJ/flag-webhook
FEATURE: webhook for flag events
This commit is contained in:
commit
00f59f648d
|
@ -68,6 +68,12 @@ module Jobs
|
||||||
args[:payload] = TagSerializer.new(tag, scope: guardian, root: false).as_json
|
args[:payload] = TagSerializer.new(tag, scope: guardian, root: false).as_json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup_flag(args)
|
||||||
|
flag = PostAction.find(args[:flag_id])
|
||||||
|
return if flag.blank?
|
||||||
|
args[:payload] = WebHookFlagSerializer.new(flag, scope: guardian, root: false).as_json
|
||||||
|
end
|
||||||
|
|
||||||
def ping_event?(event_type)
|
def ping_event?(event_type)
|
||||||
event_type.to_s == 'ping'.freeze
|
event_type.to_s == 'ping'.freeze
|
||||||
end
|
end
|
||||||
|
|
|
@ -155,6 +155,7 @@ SQL
|
||||||
|
|
||||||
DiscourseEvent.trigger(:confirmed_spam_post, post) if trigger_spam
|
DiscourseEvent.trigger(:confirmed_spam_post, post) if trigger_spam
|
||||||
DiscourseEvent.trigger(:flag_reviewed, post)
|
DiscourseEvent.trigger(:flag_reviewed, post)
|
||||||
|
DiscourseEvent.trigger(:flag_agreed, actions.first) if actions.first.present?
|
||||||
|
|
||||||
update_flagged_posts_count
|
update_flagged_posts_count
|
||||||
end
|
end
|
||||||
|
@ -188,6 +189,7 @@ SQL
|
||||||
|
|
||||||
Post.with_deleted.where(id: post.id).update_all(cached)
|
Post.with_deleted.where(id: post.id).update_all(cached)
|
||||||
DiscourseEvent.trigger(:flag_reviewed, post)
|
DiscourseEvent.trigger(:flag_reviewed, post)
|
||||||
|
DiscourseEvent.trigger(:flag_disagreed, actions.first) if actions.first.present?
|
||||||
|
|
||||||
update_flagged_posts_count
|
update_flagged_posts_count
|
||||||
end
|
end
|
||||||
|
@ -206,6 +208,7 @@ SQL
|
||||||
end
|
end
|
||||||
|
|
||||||
DiscourseEvent.trigger(:flag_reviewed, post)
|
DiscourseEvent.trigger(:flag_reviewed, post)
|
||||||
|
DiscourseEvent.trigger(:flag_deferred, actions.first) if actions.first.present?
|
||||||
update_flagged_posts_count
|
update_flagged_posts_count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -306,6 +309,10 @@ SQL
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if post_action && PostActionType.notify_flag_type_ids.include?(post_action_type_id)
|
||||||
|
DiscourseEvent.trigger(:flag_created, post_action)
|
||||||
|
end
|
||||||
|
|
||||||
GivenDailyLike.increment_for(user.id) if post_action_type_id == PostActionType.types[:like]
|
GivenDailyLike.increment_for(user.id) if post_action_type_id == PostActionType.types[:like]
|
||||||
|
|
||||||
# agree with other flags
|
# agree with other flags
|
||||||
|
|
|
@ -5,6 +5,7 @@ class WebHookEventType < ActiveRecord::Base
|
||||||
GROUP = 4
|
GROUP = 4
|
||||||
CATEGORY = 5
|
CATEGORY = 5
|
||||||
TAG = 6
|
TAG = 6
|
||||||
|
FLAG = 7
|
||||||
|
|
||||||
has_and_belongs_to_many :web_hooks
|
has_and_belongs_to_many :web_hooks
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
class WebHookFlagSerializer < ApplicationSerializer
|
||||||
|
attributes :id,
|
||||||
|
:post,
|
||||||
|
:flag_type,
|
||||||
|
:created_by,
|
||||||
|
:created_at,
|
||||||
|
:resolved_at,
|
||||||
|
:resolved_by
|
||||||
|
|
||||||
|
def post
|
||||||
|
BasicPostSerializer.new(object.post, scope: scope, root: false).as_json
|
||||||
|
end
|
||||||
|
|
||||||
|
def flag_type
|
||||||
|
object.post_action_type_key
|
||||||
|
end
|
||||||
|
|
||||||
|
def include_post?
|
||||||
|
object.post.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def created_by
|
||||||
|
object.user && object.user.username
|
||||||
|
end
|
||||||
|
|
||||||
|
def resolved_at
|
||||||
|
object.disposed_at
|
||||||
|
end
|
||||||
|
|
||||||
|
def include_resolved_at?
|
||||||
|
object.disposed_at.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def resolved_by
|
||||||
|
if object.disposed_by_id.present?
|
||||||
|
User.find(object.disposed_by_id).username
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def include_resolved_by?
|
||||||
|
object.disposed_by_id.present?
|
||||||
|
end
|
||||||
|
end
|
|
@ -72,3 +72,14 @@ end
|
||||||
WebHook.enqueue_hooks(:tag, tag_id: tag.id, event_name: event.to_s)
|
WebHook.enqueue_hooks(:tag, tag_id: tag.id, event_name: event.to_s)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
%i(
|
||||||
|
flag_created
|
||||||
|
flag_agreed
|
||||||
|
flag_disagreed
|
||||||
|
flag_deferred
|
||||||
|
).each do |event|
|
||||||
|
DiscourseEvent.on(event) do |flag|
|
||||||
|
WebHook.enqueue_hooks(:flag, flag_id: flag.id, event_name: event.to_s)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -2958,6 +2958,9 @@ en:
|
||||||
tag_event:
|
tag_event:
|
||||||
name: "Tag Event"
|
name: "Tag Event"
|
||||||
details: "When a tag is created, updated or destroyed."
|
details: "When a tag is created, updated or destroyed."
|
||||||
|
flag_event:
|
||||||
|
name: "Flag Event"
|
||||||
|
details: "When a flag is created, agreed, disagreed or deferred."
|
||||||
delivery_status:
|
delivery_status:
|
||||||
title: "Delivery Status"
|
title: "Delivery Status"
|
||||||
inactive: "Inactive"
|
inactive: "Inactive"
|
||||||
|
|
|
@ -27,3 +27,8 @@ WebHookEventType.seed do |b|
|
||||||
b.id = WebHookEventType::TAG
|
b.id = WebHookEventType::TAG
|
||||||
b.name = "tag"
|
b.name = "tag"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
WebHookEventType.seed do |b|
|
||||||
|
b.id = WebHookEventType::FLAG
|
||||||
|
b.name = "flag"
|
||||||
|
end
|
||||||
|
|
|
@ -63,3 +63,11 @@ Fabricator(:tag_web_hook, from: :web_hook) do
|
||||||
web_hook.web_hook_event_types = [transients[:tag_hook]]
|
web_hook.web_hook_event_types = [transients[:tag_hook]]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Fabricator(:flag_web_hook, from: :web_hook) do
|
||||||
|
transient flag_hook: WebHookEventType.find_by(name: 'flag')
|
||||||
|
|
||||||
|
after_build do |web_hook, transients|
|
||||||
|
web_hook.web_hook_event_types = [transients[:flag_hook]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -710,4 +710,36 @@ describe PostAction do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "triggers webhook events" do
|
||||||
|
let(:post) { Fabricate(:post) }
|
||||||
|
|
||||||
|
it 'flag created' do
|
||||||
|
event = DiscourseEvent.track_events { PostAction.act(eviltrout, post, PostActionType.types[:spam]) }.last
|
||||||
|
expect(event[:event_name]).to eq(:flag_created)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "resolving flags" do
|
||||||
|
before do
|
||||||
|
@flag = PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'flag agreed' do
|
||||||
|
event = DiscourseEvent.track_events { PostAction.agree_flags!(post, moderator) }.last
|
||||||
|
expect(event[:event_name]).to eq(:flag_agreed)
|
||||||
|
expect(event[:params].first).to eq(@flag)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'flag disagreed' do
|
||||||
|
event = DiscourseEvent.track_events { PostAction.clear_flags!(post, moderator) }.last
|
||||||
|
expect(event[:event_name]).to eq(:flag_disagreed)
|
||||||
|
expect(event[:params].first).to eq(@flag)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'flag deferred' do
|
||||||
|
event = DiscourseEvent.track_events { PostAction.defer_flags!(post, moderator) }.last
|
||||||
|
expect(event[:event_name]).to eq(:flag_deferred)
|
||||||
|
expect(event[:params].first).to eq(@flag)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue