Часть приложения для недвижимости, которое я пишу, позволит пользователю подписаться на местоположение, и если новое свойство станет доступным в этом месте, то пользователь получит электронное письмо с уведомлением об этом.
Я планирую запускать фоновый процесс один раз в несколько часов для обработки соответствия.
Прямо сейчас у меня есть модель с названием location, и планируется добавить другую модель под названием Notification. Модель местоположения имеет широту и долготу, как и модель уведомления.
Что-то вроде:
create_table "locations", :force => true do |t|
t.decimal "lat", :precision => 15, :scale => 10
t.decimal "lng", :precision => 15, :scale => 10
end
create_table "notifications", :force => true do |t|
t.decimal "lat", :precision => 15, :scale => 10
t.decimal "lng", :precision => 15, :scale => 10
t.string "user_name"
t.string "user_email"
end
Очевидная вещь, которую нужно сделать, - перебрать список местоположений, и если кто-то совпадает с этим в уведомлении, тогда отправьте письмо на user_email, определенный в модели уведомлений.
Чего я пытаюсь избежать, так это отправка одного и того же электронного письма о местоположении одному и тому же пользователю более одного раза. Что с процессом, запущенным каждые несколько часов.
Я подумал о добавлении еще одного поля в модель уведомлений под названием has_been_mailed, которое будет иметь значение true после отправки письма, но это означает, что в будущем не будет добавлено никаких обновлений других местоположений.
У кого-нибудь есть какие-либо предложения относительно наилучшего способа реализации этого?