githubHelpers.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import axios from "axios";
  2. const id = "b2226ece2b6fce3bb116";
  3. const sec = "be0525b65ff757d7e70e19589655fe5a41d4e2aa";
  4. const param = `?client_id=${id}&client_secret=${sec}`;
  5. function getUserInfo(username) {
  6. return axios.get(`https://api.github.com/users/${username}${param}`);
  7. }
  8. /**
  9. * Fetch repos for username.
  10. *
  11. * @param username
  12. */
  13. function getRepos(username) {
  14. return axios.get(`https://api.github.com/users/${username}/repos${param}&per_page=100`);
  15. }
  16. /**
  17. * Calculate all the stars that the user has.
  18. *
  19. * @param repos
  20. */
  21. function getTotalStars(repos) {
  22. console.log("getTotalStars, repos", repos);
  23. return repos.data.reduce((accu, repo) => {
  24. return accu + repo.stargazers_count;
  25. }, 0);
  26. }
  27. /**
  28. * Get repos, get total stars, return object with these data.
  29. *
  30. * @param player
  31. */
  32. function getPlayersData(player) {
  33. return getRepos(player.login)
  34. .then(getTotalStars)
  35. .then((totalStars) => {
  36. return {
  37. followers: player.followers,
  38. totalStars
  39. };
  40. });
  41. }
  42. /**
  43. * Return an array after doing some fancy calculation to determine a winner.
  44. *
  45. * @param players
  46. */
  47. function calculateScores(players) {
  48. return [
  49. players[0].followers * 3 + players[0].totalStars,
  50. players[1].followers * 3 + players[1].totalStars
  51. ];
  52. }
  53. const helpers = {
  54. battle(players) {
  55. const playerOneData = getPlayersData(players[0]);
  56. const playerTwoData = getPlayersData(players[1]);
  57. return axios.all([playerOneData, playerTwoData])
  58. .then(calculateScores)
  59. .catch((err) => {
  60. console.warn("Battle getPlayersData error", err);
  61. });
  62. },
  63. getPlayersInfo(players) {
  64. // fetch some data from Github
  65. return axios.all(players.map((username) => {
  66. return getUserInfo(username);
  67. })).then((info) => {
  68. return info.map((item) => {
  69. return item.data;
  70. });
  71. }).catch((err) => {
  72. console.warn("Error in getPlayerInfo", err);
  73. });
  74. }
  75. };
  76. export default helpers;