Open pingvin1308 opened 11 months ago
Раз в X часов BackgroundService выполняет:
Downloader.UpdateRepository();
List
QuizFilesSynchronizer.Synchronize(List
===============================================
QuizFilesSynchronizer.Synchronize(List
List
List
updatedQuizsList.Select(QuizService.UpdateQuiz);
deletedQuizsList.Select(QuizService.DeleteQuiz);
List
UpdateQuizFileMatchHashesAndId();
DataBase.SaveChanges();
===============================================
Обновлять(Удалять, Загружать) вопросы темы
Варианты:
Использовать индекс в списке как id вопроса
Проблема: Сложно удалить конкретный вопрос (Нужно хранить мета данные) Добавлять новые вопросы необходимо в конец списка
После внесения изменений в вопросы - подтянуть файл и проставить в нем id (Синхронизировать с базой)
Проблема: На время синхронизации вопрсоов с базой необходимо блокировать внесение изменений в репозиторий
Использовать как id текст вопроса
Проблема: При редактировании появится новый вопрос. (Например, если используется какой-то трекер отвеченных вопросов на пользователя)
Добавить id в схему и присваивать его сразу при создаении вопроса
Проблема: Необходимо генерировать id при создании вопроса в ручную
Способ получать файлы из github
Варианты:
Качать в виде архива
Минусы: Каждый раз репозиторий загружается целиком
Использовать git pull
Минусы: Возможны конфликты (Пр.: rebase) Необходимо межпроцессное взаимодействие для использование git (Отлавливать успешное/не успешное завершение операции)
====================
Триггер для начала операции получения файлов
Подписаться на событие push, получить список коммитов, проверить, запулить, парсить
Минусы: Может быть множество источников изменений (Пуш, мердж) Может быть rebase Ивент содержит 20 последних коммитов, но не всегда
Парсинг по расписанию
Минусы: Задержка при обновлении вопросов
По итогу мы будем обновлять весь файл теста целиком, даже если там поменялся всего 1 вопрос.
Сервис статистики при этом не удаляет вопросы, а просто хранит их все.
Простестировать возможность качать файлы в гитхабе https://docs.github.com/en/rest/repos/contents?apiVersion=2022-11-28
Вопросы будут храниться в директории quiz на гитхаб сервере.
формат вопросов будет таким:
Логику получения можно реализовать один из двух путей: 1) pull based - сделать сервис, который будет раз в сутки обращаться в репозиторий и проверять не поменялись ли вопросы. 2) push based - сделать сервис/апи точка, которая будет триггериться на обновления файлов в директории quiz. Такой вариант обработки можно сделать за счет webhook-ов