diff --git a/Gemfile b/Gemfile index 39fbcb6d..505b6414 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,8 @@ gem "rails", "7.1.2" gem "bootsnap", require: false gem "chartkick" gem "fog-aws" -gem "gds-api-adapters" +gem "gds-api-adapters", "~> 92.1.0" + gem "gds-sso" gem "govspeak" gem "govuk_app_config" diff --git a/Gemfile.lock b/Gemfile.lock index 2ffe016c..7732dd92 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -111,7 +111,7 @@ GEM debug_inspector (1.1.0) diff-lcs (1.5.0) docile (1.4.0) - domain_name (0.6.20231109) + domain_name (0.6.20240107) drb (2.2.0) ruby2_keywords erubi (1.12.0) @@ -145,7 +145,7 @@ GEM fog-core nokogiri (>= 1.5.11, < 2.0.0) formatador (1.1.0) - gds-api-adapters (92.0.0) + gds-api-adapters (92.1.0) addressable link_header null_logger @@ -716,7 +716,7 @@ DEPENDENCIES chartkick factory_bot_rails fog-aws - gds-api-adapters + gds-api-adapters (~> 92.1.0) gds-sso govspeak govuk_app_config diff --git a/app/controllers/metrics_controller.rb b/app/controllers/metrics_controller.rb index 6561d8c2..1d12aa69 100644 --- a/app/controllers/metrics_controller.rb +++ b/app/controllers/metrics_controller.rb @@ -1,7 +1,6 @@ class MetricsController < ApplicationController def show time_period = params[:date_range] || "past-30-days" - base_path = params[:base_path] curr_period = DateRange.new(time_period) prev_period = curr_period.previous @@ -15,24 +14,39 @@ def show curr_period, ) - if current_user.view_siteimprove? - begin - @summary_info = Siteimprove::FetchSummary.call(url: "https://www.gov.uk/#{params[:base_path]}") - - raw_policy_issues = Siteimprove::FetchPolicyIssues.call(url: "https://www.gov.uk/#{params[:base_path]}") - @policy_issues = Siteimprove::PolicyIssuesPresenter.new(raw_policy_issues, @summary_info) - raw_quality_assurance_issues = Siteimprove::FetchQualityAssuranceIssues.call(url: "https://www.gov.uk/#{params[:base_path]}") - @quality_assurance_issues = Siteimprove::QualityAssuranceIssuesPresenter.new(raw_quality_assurance_issues, @summary_info) - @has_accessibility_info = @policy_issues.any? || @quality_assurance_issues.any? - rescue Siteimprove::BaseError - @has_accessibility_info = false - end - else - @has_accessibility_info = false - end + setup_siteimprove + setup_email_subscriptions end rescue_from GdsApi::HTTPNotFound do render "errors/404", status: :not_found end + +private + + def base_path + params[:base_path] + end + + def setup_email_subscriptions + return unless current_user.view_email_subs? + + @show_email_subs_section = true + @email_subscriptions = EmailApi::PageSubscriptionsClient.new.fetch(path: "/#{base_path}") + end + + def setup_siteimprove + return unless current_user.view_siteimprove? + + begin + @summary_info = Siteimprove::FetchSummary.call(url: "https://www.gov.uk/#{base_path}") + raw_policy_issues = Siteimprove::FetchPolicyIssues.call(url: "https://www.gov.uk/#{base_path}") + @policy_issues = Siteimprove::PolicyIssuesPresenter.new(raw_policy_issues, @summary_info) + raw_quality_assurance_issues = Siteimprove::FetchQualityAssuranceIssues.call(url: "https://www.gov.uk/#{base_path}") + @quality_assurance_issues = Siteimprove::QualityAssuranceIssuesPresenter.new(raw_quality_assurance_issues, @summary_info) + @has_accessibility_info = @policy_issues.any? || @quality_assurance_issues.any? + rescue Siteimprove::BaseError + @has_accessibility_info = false + end + end end diff --git a/app/models/user.rb b/app/models/user.rb index f073750d..ab57dde6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -4,4 +4,8 @@ class User < ApplicationRecord def view_siteimprove? permissions.include?("view_siteimprove") end + + def view_email_subs? + permissions.include?("view_email_subs") + end end diff --git a/app/services/email_api/page_subscriptions_client.rb b/app/services/email_api/page_subscriptions_client.rb new file mode 100644 index 00000000..c1eb839e --- /dev/null +++ b/app/services/email_api/page_subscriptions_client.rb @@ -0,0 +1,18 @@ +module EmailApi + class PageSubscriptionsClient + def initialize + @email_alert_api = GdsApi.email_alert_api + end + + def fetch(path:) + response = email_alert_api.get_subscriber_list_metrics(path:) + EmailApi::PageSubscriptionsResponse.new(**response.to_h.symbolize_keys) + rescue GdsApi::HTTPNotFound + nil + end + + private + + attr_reader :email_alert_api + end +end diff --git a/app/services/email_api/page_subscriptions_response.rb b/app/services/email_api/page_subscriptions_response.rb new file mode 100644 index 00000000..8759e175 --- /dev/null +++ b/app/services/email_api/page_subscriptions_response.rb @@ -0,0 +1,10 @@ +module EmailApi + class PageSubscriptionsResponse + def initialize(all_notify_count:, subscriber_list_count:) + @all_notify_count = all_notify_count + @subscriber_list_count = subscriber_list_count + end + + attr_reader :all_notify_count, :subscriber_list_count + end +end diff --git a/app/views/metrics/_email_subscriptions.html.erb b/app/views/metrics/_email_subscriptions.html.erb new file mode 100644 index 00000000..ecffe450 --- /dev/null +++ b/app/views/metrics/_email_subscriptions.html.erb @@ -0,0 +1,19 @@ +
<%= t("metrics.email_subscriptions.active_title") %>: <%= @email_subscriptions.subscriber_list_count %>
+<%= t("metrics.email_subscriptions.total_notify_title") %>: <%=@email_subscriptions.all_notify_count %>
+<% else %> +<%= t("metrics.email_subscriptions.no_information") %>
+<% end %> + +<%= render "govuk_publishing_components/components/details", { + title: t("metrics.email_subscriptions.about_title") +} do %> + +<%= t("metrics.email_subscriptions.active_description") %>
+ +<%= t("metrics.email_subscriptions.total_notify_description") %>
+ +<% end %> diff --git a/app/views/metrics/show.html.erb b/app/views/metrics/show.html.erb index c897ce39..a020a0b7 100644 --- a/app/views/metrics/show.html.erb +++ b/app/views/metrics/show.html.erb @@ -151,6 +151,10 @@