Hexlet / hexlet-friends

https://friends.hexlet.io/
GNU Affero General Public License v3.0
68 stars 101 forks source link

Fix data synchronization with Github #213

Open acidmaksim opened 1 year ago

acidmaksim commented 1 year ago

Ожидаемое поведение

We need to synchronize data with Github for students who were already registered in the service and for new people

Текущее поведение

Now if you look at the statistics of users, not everyone pulls up all the information

Tragoedie commented 1 year ago

Попробую разобраться

BoCXoD-man commented 1 year ago

Ну и я попробую разобраться =)

fey commented 1 year ago

Здесь нужно Добавить пользователю интерфейс, чтобы он мог нажать кнопку и загрузить данные о себе. Т.е. например щас у меня нет свежих данных за июнь, июлю. Я должен где-то нажать кнопку и загрузить свою статистику.

BoCXoD-man commented 1 year ago

Стало более понятней, но пока взял задачу полегче, от этой откажусь.

DmGorokhov commented 8 months ago

@fey Привет! Я все присматриваюсь к этой и похожей смежной задачей. Концептуально не пойму, по какому принципу идет наполнение БД? Получается, что с момента моей регистрации в friends статистика не обновляется. Получается пока что нет никакого механизма(сигналы или очереди задач по расписанию) обновления данных по проектам? Допустим мы добавим кнопку "Обновить мою статистику". Тогда я смогу обновлять свой профиль вручную- параллельно пускай это в БД летит. Но если пользователи не заходят и не обновляют свои профили, то общая статистика по-сути будет всегда устаревшей.

fey commented 8 months ago

@DmGorokhov да, сейчас только автоматом происходит и только по добавленным репозиториям. Я не знаю, как щас в точности логика работает, но раньше все строилось вокруг репозиториев. Если репо есть в нашем списке (базе), то инфа от него будет забираться по крону через апи. А есть еще юзеры. которые давно регались и не всех их вклады были учтены - тк изначально базу вели по проектам Хекслета. Поэтому нужен какой-то хук следить за активностью юзера. Либо хотя бы обновить список реп, в которых он участвовал

DmGorokhov commented 8 months ago

Тогда может начать с простого: 1.) Добавляем кнопку юзеру, он ее жмакает- и стягивает свои же данные со своего GH в табличку. Тут хотел уточнить- мы же на friends стягиваем все доступное по юзеру? Т.е. все мои репозитории (не только по Хекслету) пускай подтягиваются? Не будет ли тут дублирования задачи с этим #323 ишью? Человек вроде еще делает.

2.) После п.1 можно добавить сигнальчик или что-то подобное- чтобы еще и в базу улетело. Но тогда база будет уже не по Хекслету, по-сути, а по всем юзерам с их данными.

3.) После пп.1 и 2 можно подумать как хук добавить по действиям пользователей.

fey commented 8 months ago

1) Да, для начала идеально кнопкой подтягивать данные. Точне енажимаем - и у нас запускается джоба где-то на фоне. Да, все публичные данные по пользователю. Задумка такая, что hexlet-friends будет служить витриной достижений. Я не думаю, что там бвдет дублироваться. Учитывая, что задачу взяли в ноябре и не сделали пулл реквеста (скорее всего уже не работают над задачей). 2) Да, любой юзер может у нас во френдс зарегаться и его активность будет к нам улетать.

Задачу можно итеративно делать. Сперва ручной режим, потом автоматический.

DmGorokhov commented 8 months ago

Хотел еще пару деталей уточнить: 1.) Не совсем понял, что вы под джобой имеете ввиду? Сохранение в БД? Нам ведь все равно придется перерендерить шаблон после обновления. Можем просто имеено в базу идти после рендера фоновой задачей (допустим через Celery). Но меня смущает тогда, что если ошибка базы будет, то в след. раз пользователь увидит старые данные все равно. Т.е. не будет unit of work

2.) Кнопку делаем обещдоступной, верно? Любой же может запросить обновление, тут секретов нет

3.) Предлагаю попробовать начать использовать библиотеку PyGithub для общения с апи гитхаба. Это даст слой абстракции, сама либа релизиться регулярно, тесты 93%, звезд тоже хватает.

fey commented 8 months ago

Подобные задачи, типа синхронизации данных редко выполняются реалтайм. Обычно их запускают где-то на фоне в очереди и она выполняются. У каждого пользователя своя кнопка. Он синхронизирует свои данные.

3) Ничего не имею против =) Но кажется щас уже что-то есть для общения с гитхабом.

DmGorokhov commented 8 months ago

Ок, я поразбираюсь, как лучше сделать.

DmGorokhov commented 8 months ago

после праздников продолжу заниматься этой задачей

fey commented 6 months ago

Так ну синхронизация все еще не работает толком :(

DmGorokhov commented 6 months ago

ну я пока и не сделал( Нашел наконец первую работу и пока не хватает времени вернуться к этой задаче. Задача интересная сама по себе и я про нее помню! Если найдутся желающие- welcome.