From 305c30e8ed5a1af1bb3a0bf549a1fcd4fbc0d231 Mon Sep 17 00:00:00 2001 From: Andrew <72628255+PivovarAndrew@users.noreply.github.com> Date: Mon, 7 Feb 2022 01:39:48 +0300 Subject: [PATCH 1/5] Change default mailer configuration. --- app/mailers/application_mailer.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 286b2239..e3e736ed 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -1,4 +1,7 @@ +# frozen_string_literal: true + +# Base mailer class class ApplicationMailer < ActionMailer::Base - default from: 'from@example.com' + default from: 'SocialNetwork ' layout 'mailer' end From ddaa5d30e704fba767b7e852bf77a0e02d3e2e07 Mon Sep 17 00:00:00 2001 From: Andrew <72628255+PivovarAndrew@users.noreply.github.com> Date: Mon, 7 Feb 2022 02:14:38 +0300 Subject: [PATCH 2/5] Create weekly report service. --- app/services/weekly_report_service.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 app/services/weekly_report_service.rb diff --git a/app/services/weekly_report_service.rb b/app/services/weekly_report_service.rb new file mode 100644 index 00000000..c028553d --- /dev/null +++ b/app/services/weekly_report_service.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: True + +# Service responsible for compiling a weekly user report +class WeeklyReportService + WEEK_AGO = 1.week.ago.utc + + def initialize(user) + @user = user + end + + def weekly_report + { subscriptions: weekly_subscriptions, subscribers: weekly_subscribers } + end + + private + + def weekly_subscriptions + @user.subscriptions.where('user_subscriptions.created_at >= ?', WEEK_AGO).order('created_at DESC') + end + + def weekly_subscribers + @user.subscribers.where('user_subscriptions.created_at >= ?', WEEK_AGO).order('created_at DESC') + end +end From 86346d791e80397aa27db4264479b5f41cc3dda1 Mon Sep 17 00:00:00 2001 From: Andrew <72628255+PivovarAndrew@users.noreply.github.com> Date: Mon, 7 Feb 2022 03:03:31 +0300 Subject: [PATCH 3/5] Create user report mailer. --- app/mailers/user_report_mailer.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 app/mailers/user_report_mailer.rb diff --git a/app/mailers/user_report_mailer.rb b/app/mailers/user_report_mailer.rb new file mode 100644 index 00000000..7099cbe4 --- /dev/null +++ b/app/mailers/user_report_mailer.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +require Rails.root.join('app', 'services', 'weekly_report_service.rb') + +# User report mailer class +class UserReportMailer < ApplicationMailer + def weekly_report_mailer + @user = User.find(params[:user_id]) + @weekly_report = WeeklyReportService.new(@user).weekly_report + mail(to: @user.email, subject: 'Weekly report!') + end +end From 82ace9a7b201f096aa6ae1f7e1b60b32b3ebf7cc Mon Sep 17 00:00:00 2001 From: Andrew <72628255+PivovarAndrew@users.noreply.github.com> Date: Mon, 7 Feb 2022 03:38:01 +0300 Subject: [PATCH 4/5] Add html and text views to user report mail. --- app/views/user_report_mailer/_users.html.erb | 4 ++++ .../weekly_report_mailer.html.erb | 20 +++++++++++++++++++ .../weekly_report_mailer.text.erb | 15 ++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 app/views/user_report_mailer/_users.html.erb create mode 100644 app/views/user_report_mailer/weekly_report_mailer.html.erb create mode 100644 app/views/user_report_mailer/weekly_report_mailer.text.erb diff --git a/app/views/user_report_mailer/_users.html.erb b/app/views/user_report_mailer/_users.html.erb new file mode 100644 index 00000000..4a360577 --- /dev/null +++ b/app/views/user_report_mailer/_users.html.erb @@ -0,0 +1,4 @@ +<% users.each_with_index do |user, counter| %> + <%= "#{counter + 1} #{user.profile.surname} #{user.profile.name}" %> +
+<% end %> diff --git a/app/views/user_report_mailer/weekly_report_mailer.html.erb b/app/views/user_report_mailer/weekly_report_mailer.html.erb new file mode 100644 index 00000000..11868172 --- /dev/null +++ b/app/views/user_report_mailer/weekly_report_mailer.html.erb @@ -0,0 +1,20 @@ + + + + <%= csrf_meta_tags %> + + + +

Hi, <%= @user.profile.name %>

+

Your weekly report is here! 🙈 Check it out! 🙄

+

New subscriptions:

+ <%= render partial: "users", locals: { users: @weekly_report[:subscriptions]} %> +

New subscribers:

+ <%= render partial: "users", locals: { users: @weekly_report[:subscribers]} %> + + diff --git a/app/views/user_report_mailer/weekly_report_mailer.text.erb b/app/views/user_report_mailer/weekly_report_mailer.text.erb new file mode 100644 index 00000000..2917b9bb --- /dev/null +++ b/app/views/user_report_mailer/weekly_report_mailer.text.erb @@ -0,0 +1,15 @@ +Hi, <%= @user.profile.name %> +Your weekly report is here! 🙈 Check it out! 🙄 +=============================================== + +New subscriptions: +<% @weekly_report[:subscriptions].each_with_index do |user, counter| %> + <%= "#{counter + 1} #{user.profile.surname} #{user.profile.name}" %> +<% end %> + +New subscribers: +<% @weekly_report[:subscribers].each_with_index do |user, counter| %> + <%= "#{counter + 1} #{user.profile.surname} #{user.profile.name}" %> +<% end %> + +=============================================== From 73ae809244fd18d770492c78b87f0d08e01c7c0f Mon Sep 17 00:00:00 2001 From: Andrew <72628255+PivovarAndrew@users.noreply.github.com> Date: Mon, 7 Feb 2022 04:49:04 +0300 Subject: [PATCH 5/5] Create user report mail preview. --- spec/mailers/previews/user_report_mailer_preview.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 spec/mailers/previews/user_report_mailer_preview.rb diff --git a/spec/mailers/previews/user_report_mailer_preview.rb b/spec/mailers/previews/user_report_mailer_preview.rb new file mode 100644 index 00000000..e037e21d --- /dev/null +++ b/spec/mailers/previews/user_report_mailer_preview.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# Preview all emails at http://localhost:3000/rails/mailers/user_report_mailer +class UserReportMailerPreview < ActionMailer::Preview + def weekly_report_mailer + UserReportMailer.with(user_id: 340).weekly_report_mailer + end +end