fintech-fab/fintech-fab.ru

Виджет группы стажировки с гит-хаба

Closed this issue · 13 comments

У гитхаба есть API (https://developer.github.com/v3/)
В Laravel есть консольные команды (http://laravel.com/docs/commands)
Нужно сделать такую вещь:

  • запускается консольная команда
  • подключается к api github-а
  • собирает информацию о репозиториях компании финтек-фаб и о группе стажировки
  • сохраняет ее в базу в структурированном виде (продумать самостоятельно)
  • в разделе на сайте выводит эту информацию.

Это будет похоже на "ленту новостей" с гит-хаба о деятельности стажеров - какие есть задачи, кто чем занимается, какие последние коммиты были, в каких репозиториях и т.п.

Сделано в тестовом варианте: несколько таблиц, загружаемых из GitHub’а посредством его API.

В командной строке:
$ php artisan command:testGitHubApi users --save
$ php artisan command:testGitHubApi issues --save
$ php artisan command:testGitHubApi comments --save
$ php artisan command:testGitHubApi issuesEvents –save
Загружаются данные в таблицы соответственно:
• пользователей;
• задач;
• комментарий пользователей к задачам;
• коммитов этих задач.

Запуск команды без опции «--save» выводит полученные данные на экран в сокращенном виде (то, что предполагается сохранять в БД). Например,
$ php artisan command:testGitHubApi issues

Есть еще параметры запуска:
• $ php artisan command:testGitHubApi commits
• $ php artisan command:testGitHubApi events

Список пользователей еще под вопросом (кого туда вносить и по каким запросам к GitHub API).

Комментарии по коду команды: 238f5d4

Добавлен маршрут и бланк страницы сайта.
Сделана рабочая команда, загружающая данные с GitHub’а. Но она ничего не загружает и не показывает: в ней нет «движка». Команда:

$ php artisan command: fintech-fabFromGitHub

Чтобы получить данные нужно запустить функцию «getFromGitHubApi($httpRequest)» по нужному адресу и сохранить полученные данные в нужную модель данных, функцией «saveInDB($inData, $classDB)»

Сделано в рабочем варианте загрузка данных для одной из таблиц БД:

В командной строке:
$ php artisan fintech-fab:git-hub comments

Загружаются все страницы, выдаваемые API GitHub'бом

Сделал ревью.
(Важное замечание - автоформат кода настрой обязательно. В инструкции на вики есть)

Сделана загрузка пользователей

В командной строке:
$ php artisan fintech-fab:git-hub users

Сделаны повторные запросы, дающие, при отсутствии новых данных, статус ответа 304

В принципе, основное закончено. Данные загружаются из GitHub’а, и отображаются на интернет странице.
Только вот один пункт не получилось сделать. Предполагалось загружать общие коммиты (главной ветки), но прямым запросом это не сделать (есть общая куча коммитов…).

На данный момент есть возможность использовать пароль пользователя GitHub’а (в файле app/config/github.php). Это даст лимит запросов 5000 в течение часа (без авторизации — 60 запросов).

На вкладке «Общее» отображаются события открытия/закрытия задач, но показываются только недавние события (старых не видно).

Задачу согласен назвать готовой :-)

Подведу итоги:

  1. Все работает - отлично.
  2. Без подсказки - учтено время обновления - лишние данные не обрабатываются - молодец.
  3. Постраничный сбор - прекрасно.
  4. При работе команды выводится подробная информация о процессе - 5 баллов.

Есть предложения по улучшению, но это уже больше эстетика, чем реальная необходимость. Это то, что я бы сделал, решая эту задачу. Если будешь согласен - поставлю отдельными задачами:

  1. Еще сильнее почистить команды - чтобы там были только аргументы и "запускатели". Почему так правильно? Например, можно сделать из веб-интерфейса, находясь в конкретной задаче, обновить коммиты по этой задаче. Тогда вынесенный из artisan-команды код пригодится. Вынесение по типу класса GitHubAPI (компонентом).

  2. Реализовать задачу в виде отдельного пакета для composer. Стоит сделать, если просто хочется научиться делать независимые пакеты к Laravel.

  3. Если делать пункт (1), то хотелось бы иметь не одну команду, а несколько. Также, как делают разработчики фреймворка, например queue:

  queue:failed                List all of the failed queue jobs
  queue:failed-table          Create a migration for the failed queue jobs database table
  queue:flush                 Flush all of the failed queue jobs
  1. Переделать/оптимизировать работу контроллера при отображении задач. Получились довольно сложные конструкции, можно сделать проще/легче. Пока без деталей - если интересно - поставлю задачу.

  2. Это обязательно - добавить в справку команды инфу по последовательности запуска команд. А то я запутался. Наловил эксепшенов с ключами. Но позапускав с разными параметрами, в итоге все получилось.

где скачать приложение?

Приложения нет :) а задача почти закрыта уже.

Не понятно почему нет приложения ((

По п.1 сделаны запускатели (public). По п.5 добавлено в справку, что сначала нужно загружать пользователей «users», затем задачи «issues» (однако по логике, сейчас сбоев не должно быть: если задачи не загружены, то связанные с ними данными просто не должны отображаться на странице; а пользователи каждый раз принудительно проверяются).

По п.4 я предполагаю лишь такой способ: сделать несколько представлений (view) и модели для них. И в контроллере получать данные через эти модели. Но всё это и прочее, лучше как отдельные задачи.