Source: logic/feature/GetStats.js

import { Stat } from "../model/Stat.js";
import { STAT_TYPE } from "../refs/stat-type.js";
import { limitArrBy, query, sortByTot } from "../utils/utils.js";

/** 
* Hämtar statistik från Mittuniversitetets kurs- och program-URL:en.
*/

export class GetStats {

  /**
  * @constructor
  */
  constructor() {

    /** 
    * Kurslista
    * @private
    * @type {Stat[]} 
    */
    this._courses = [];

    /** Programlista
    * @private
    * @type {Stat[]} 
    */
    this._programs = [];
  }

  /**
  * @async
  * @function 
  * @param {string} url - Förfrågan skickas till denna URL
  */
  init = async (url) => {
    const result = await query(url);
    result.filter(data => {
      const { type, name, 
        applicantsTotal } = data;
      const stat = new Stat(
        name, Number(
          applicantsTotal));
      if(type === 'Kurs')
        this._courses.push(stat);
      else this._programs.push(stat);
    });
  }

  /** 
  * Hämtar mest sökta kurser eller program
  * @function
  * @param {string} statType - typ av statistik som efterfrågas
  * @param {number} limit - antalet mest sökta kurser/program som ska hämtas
  * @example limit=10 betyder att bara först 10 mest sökta kurser/program ska hämtas
  */
  popular = (statType, limit) => {
    const popular = 
      statType === STAT_TYPE.COURSE 
      ? sortByTot(this._courses)
      : sortByTot(this._programs)
    return limitArrBy(
      popular, limit);
  }
}