mirror of
https://github.com/SrIzan10/hc-harbor.git
synced 2026-05-01 10:45:21 +00:00
Switch to instant mail queue for 7-day streak letter (#454)
This commit is contained in:
@@ -14,6 +14,10 @@ class PhysicalMail < ApplicationRecord
|
||||
first_time_7_streak: 1
|
||||
}
|
||||
|
||||
def self.instant_mission_types
|
||||
%w[first_time_7_streak]
|
||||
end
|
||||
|
||||
scope :pending_delivery, -> {
|
||||
where(status: :pending)
|
||||
.joins(:user)
|
||||
@@ -36,6 +40,11 @@ class PhysicalMail < ApplicationRecord
|
||||
return if status == :sent || theseus_id.present?
|
||||
|
||||
slug = "hackatime-#{mission_type.to_s.gsub("_", "-")}"
|
||||
endpoint = if self.class.instant_mission_types.include?(mission_type)
|
||||
"https://mail.hackclub.com/api/v1/letter_queues/instant/#{slug}-instant"
|
||||
else
|
||||
"https://mail.hackclub.com/api/v1/letter_queues/#{slug}"
|
||||
end
|
||||
|
||||
flavors = FlavorText.compliment
|
||||
flavors.concat(FlavorText.rare_compliment) if rand(10) == 0
|
||||
@@ -43,7 +52,7 @@ class PhysicalMail < ApplicationRecord
|
||||
return nil unless user.mailing_address.present?
|
||||
|
||||
# authorization: Bearer <token>
|
||||
response = HTTP.auth("Bearer #{ENV["MAIL_HACKCLUB_TOKEN"]}").post("https://mail.hackclub.com/api/v1/letter_queues/#{slug}", json: {
|
||||
response = HTTP.auth("Bearer #{ENV["MAIL_HACKCLUB_TOKEN"]}").post(endpoint, json: {
|
||||
recipient_email: user.email_addresses.first.email,
|
||||
address: {
|
||||
first_name: user.mailing_address.first_name,
|
||||
@@ -70,6 +79,9 @@ class PhysicalMail < ApplicationRecord
|
||||
update(status: :failed)
|
||||
raise "Failed to deliver physical mail: #{response.body}"
|
||||
end
|
||||
rescue OpenSSL::SSL::SSLError => e
|
||||
Rails.logger.warn "SSL error during mail delivery (request likely succeeded): #{e.message}"
|
||||
update(status: :sent)
|
||||
rescue => e
|
||||
update(status: :failed)
|
||||
raise e
|
||||
|
||||
@@ -124,10 +124,10 @@ Rails.application.configure do
|
||||
cron: "0 * * * *", # Run before AttemptToDeliverPhysicalMailJob
|
||||
class: "CheckStreakPhysicalMailJob"
|
||||
},
|
||||
# attempt_to_deliver_physical_mail: {
|
||||
# cron: "5 * * * *", # Run after physical mail is created
|
||||
# class: "AttemptToDeliverPhysicalMailJob"
|
||||
# },
|
||||
attempt_to_deliver_physical_mail: {
|
||||
cron: "5 * * * *", # Run after physical mail is created
|
||||
class: "AttemptToDeliverPhysicalMailJob"
|
||||
},
|
||||
sync_neighborhood_from_airtable: {
|
||||
cron: "*/15 * * * *",
|
||||
class: "Neighborhood::SyncFromAirtableJob"
|
||||
|
||||
Reference in New Issue
Block a user