fabasoad/business-card

View on GitHub
src/scripts/services/GitHubService.ts

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
import { Octokit } from '@octokit/rest'
import State from '../../components/Stats/State'
import RemoteService from './RemoteService'
import fetch from 'cross-fetch'

export class GitHubService implements RemoteService<number> {
  private state: State = State.NOT_STARTED
  private starsAmount: number

  private static GITHUB_USERNAME = 'fabasoad'

  public constructor(starsAmount: number) {
    this.starsAmount = starsAmount
  }

  public async request(): Promise<number> {
    if (this.state == State.NOT_STARTED) {
      this.state = State.STARTED
      const octokit: Octokit = new Octokit({ request: { fetch } })
      try {
        const { data } = await octokit.rest.repos.listForUser({
          username: GitHubService.GITHUB_USERNAME
        })
        let sum: number = 0
        for (let i = 0; i < data.length; i++) {
          sum += data[i]['stargazers_count']
        }
        this.state = State.FINISHED
        this.starsAmount = sum
      } catch (err) {
        this.state = State.FAILED
      }
    }
    return this.starsAmount
  }
}