|
| 1 | +# frozen_string_literal: true |
| 2 | +module Graphql |
| 3 | + class Dashboard < Rails::Engine |
| 4 | + module Subscriptions |
| 5 | + class BaseController < Graphql::Dashboard::ApplicationController |
| 6 | + include Installable |
| 7 | + |
| 8 | + def feature_installed? |
| 9 | + schema_class.subscriptions.is_a?(GraphQL::Pro::Subscriptions) |
| 10 | + end |
| 11 | + end |
| 12 | + |
| 13 | + class TopicsController < BaseController |
| 14 | + def show |
| 15 | + topic_name = params[:name] |
| 16 | + all_subscription_ids = [] |
| 17 | + schema_class.subscriptions.each_subscription_id(topic_name) do |sid| |
| 18 | + all_subscription_ids << sid |
| 19 | + end |
| 20 | + |
| 21 | + page = params[:page]&.to_i || 1 |
| 22 | + limit = params[:per_page]&.to_i || 20 |
| 23 | + offset = limit * (page - 1) |
| 24 | + subscription_ids = all_subscription_ids[offset, limit] |
| 25 | + subs = schema_class.subscriptions.read_subscriptions(subscription_ids) |
| 26 | + show_broadcast_subscribers_count = schema_class.subscriptions.show_broadcast_subscribers_count? |
| 27 | + subs.each do |sub| |
| 28 | + sub[:is_broadcast] = is_broadcast = schema_class.subscriptions.broadcast_subscription_id?(sub[:id]) |
| 29 | + if is_broadcast && show_broadcast_subscribers_count |
| 30 | + sub[:subscribers_count] = sub_count =schema_class.subscriptions.count_broadcast_subscribed(sub[:id]) |
| 31 | + sub[:still_subscribed] = sub_count > 0 |
| 32 | + else |
| 33 | + sub[:still_subscribed] = schema_class.subscriptions.still_subscribed?(sub[:id]) |
| 34 | + sub[:subscribers_count] = nil |
| 35 | + end |
| 36 | + end |
| 37 | + |
| 38 | + @topic_last_triggered_at = schema_class.subscriptions.topic_last_triggered_at(topic_name) |
| 39 | + @subscriptions = subs |
| 40 | + @subscriptions_count = all_subscription_ids.size |
| 41 | + @show_broadcast_subscribers_count = show_broadcast_subscribers_count |
| 42 | + @has_next_page = all_subscription_ids.size > offset + limit ? page + 1 : false |
| 43 | + end |
| 44 | + |
| 45 | + def index |
| 46 | + page = params[:page]&.to_i || 1 |
| 47 | + per_page = params[:per_page]&.to_i || 20 |
| 48 | + offset = per_page * (page - 1) |
| 49 | + limit = per_page |
| 50 | + topics, all_topics_count, has_next_page = schema_class.subscriptions.topics(offset: offset, limit: limit) |
| 51 | + |
| 52 | + @topics = topics |
| 53 | + @all_topics_count = all_topics_count |
| 54 | + @has_next_page = has_next_page |
| 55 | + @page = page |
| 56 | + end |
| 57 | + end |
| 58 | + |
| 59 | + class SubscriptionsController < BaseController |
| 60 | + def show |
| 61 | + subscription_id = params[:id] |
| 62 | + subscriptions = schema_class.subscriptions |
| 63 | + query_data = subscriptions.read_subscription(subscription_id) |
| 64 | + is_broadcast = subscriptions.broadcast_subscription_id?(subscription_id) |
| 65 | + |
| 66 | + if is_broadcast && subscriptions.show_broadcast_subscribers_count? |
| 67 | + subscribers_count = subscriptions.count_broadcast_subscribed(subscription_id) |
| 68 | + is_still_subscribed = subscribers_count > 0 |
| 69 | + else |
| 70 | + subscribers_count = nil |
| 71 | + is_still_subscribed = subscriptions.still_subscribed?(subscription_id) |
| 72 | + end |
| 73 | + |
| 74 | + @query_data = query_data |
| 75 | + @still_subscribed = is_still_subscribed |
| 76 | + @is_broadcast = is_broadcast |
| 77 | + @subscribers_count = subscribers_count |
| 78 | + end |
| 79 | + |
| 80 | + def clear_all |
| 81 | + schema_class.subscriptions.clear |
| 82 | + flash[:success] = "All subscription data cleared." |
| 83 | + redirect_to graphql_dashboard.subscriptions_topics_path |
| 84 | + end |
| 85 | + end |
| 86 | + end |
| 87 | + end |
| 88 | +end |
0 commit comments