scinote-web/app/jobs/repository_item_date_reminder_job.rb

43 lines
1.8 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class RepositoryItemDateReminderJob < ApplicationJob
queue_as :default
def perform
process_repository_values(RepositoryDateTimeValue, DateTime.current)
process_repository_values(RepositoryDateValue, Date.current)
end
private
def process_repository_values(model, comparison_value)
model
.joins(repository_cell: [:repository_row, { repository_column: :repository }])
.where(
notification_sent: false,
repositories: { type: 'Repository', archived: false },
repository_rows: { archived: false }
).where('repository_date_time_values.updated_at >= ?', 2.days.ago)
.where( # date(time) values that are within the reminder range
"data <= " \
"(?::timestamp + CAST(((repository_columns.metadata->>'reminder_unit')::int * " \
"(repository_columns.metadata->>'reminder_value')::int) || ' seconds' AS Interval))",
comparison_value
).find_each do |value|
repository_row = RepositoryRow.find(value.repository_cell.repository_row_id)
repository_column = RepositoryColumn.find(value.repository_cell.repository_column_id)
RepositoryItemDateNotification
.send_notifications({
"#{value.class.name.underscore}_id": value.id,
repository_row_id: repository_row.id,
repository_row_name: repository_row.name,
repository_column_id: repository_column.id,
repository_column_name: repository_column.name,
reminder_unit: repository_column.metadata['reminder_unit'],
reminder_value: repository_column.metadata['reminder_value']
})
end
end
end