GSoC 2022 CircuitVerse | Отчет по неделям 7 и 8


Описание

На этой неделе я работал над завершением интеграции Noticed в CircuitVerse, это была одна из самых сложных и самых продуктивных недель, поскольку я получил новые знания:

  • Эффективное использование консоли Rails.
  • ActiveRecords .
  • Миграция.
  • Контроллеры.
  • Представления rails.

На последней встрече я показал менторам демонстрацию функциональности уведомлений, и они сказали, что есть небольшие изменения в UI и миграция старых данных Activity Notification.

Я выполнил задание по вспомогательным методам, UI и некоторой очистке. Но самой сложной задачей для меня была миграция данных из одной таблицы в другую таблицу с различными конфигурациями. Aboobacker поделился файлом миграции, который содержит SQL запрос для миграции, но это было сравнительно проще, чем то, что мне нужно было сделать в этой задаче!

Поэтому я придумал множество решений для отображения старых уведомлений:

  1. Я подумал, что мы можем просто добавить фильтр before_action с методом load_old_notifications для user. Поэтому я создаю новый столбец в таблице old_notification под названием migrated со значением по умолчанию false, поэтому всякий раз, когда пользователь входит в систему, load_old_notifications будет запускаться и проверять в old_notification, если поле migrated равно false, он создаст новые данные для таблицы notification и пометит migrated как true в таблице old_notification.

  2. Но я нахожу это очень сложным, так как мы думаем удалить ActivityNotification gem и при миграции есть метод модели, необходимый для получения пути к уведомлению, поэтому я отбрасываю это решение и перехожу к следующему и следующему, я потерпел неудачу и, наконец, пришел к решению использовать ActiveRecords в migration (это сработало, но не предпочтительно), вот как выглядит мой файл миграции:

class PopulateNotificationData < ActiveRecord::Migration[7.0]
  include ActivityNotification
  def change
    Notification.find_each do |data|
      newnotification = NoticedNotification.first_or_initialize(
        :recipient_type => data.target_type,
        :recipient_id => data.target_id,
        :type => "PreviousNotification",
        :params => {
          user_id: data.notifier_id,
          path: data.notifiable_path,
          message: data.notifiable.printable_notifiable_name(data.target),
          type: data.notifiable_type
        },
        :read_at => data.opened_at
      )
      newnotification.save!
    end
  end
end
Вход в полноэкранный режим Выйти из полноэкранного режима

Мне нужно изменить это в SQL запросе.

Это заняло у меня около 4 дней, но оно того стоило, я многому научился на ошибках.

За эти 2 недели я также :

  • Сдал промежуточную аттестацию
  • Опубликовал свой первый блог на CircuitVerse/Blog о первом этапе GSoC.
  • Посетил свой первый оффлайн хакатон и познакомился с удивительными людьми.

План на следующую неделю:

  • Завершить тестовые примеры спецификаций
  • Завершить миграцию
  • Начать работу над push notification в мобильном приложении.

Оцените статью
devanswers.ru
Добавить комментарий