/ src / api / homepage.ts
homepage.ts
  1  import { RequestFN } from "~/core/request-function";
  2  import { encodePronoteDate } from "~/encoders/pronote-date";
  3  import { TabLocation, type SessionHandle } from "~/models";
  4  import { translateToWeekNumber } from "./helpers/week-number";
  5  import { decodeHomepage } from "~/decoders/homepage";
  6  import type { Homepage } from "~/models/homepage";
  7  import { apiProperties } from "./private/api-properties";
  8  
  9  /**
 10   * Retrieve data from the homepage for the given session.
 11   */
 12  export const homepage = async (session: SessionHandle, day = session.instance.nextBusinessDay): Promise<Homepage> => {
 13    const properties = apiProperties(session);
 14  
 15    const weekNumber = translateToWeekNumber(day, session.instance.firstMonday);
 16    const next = encodePronoteDate(day);
 17  
 18    const request = new RequestFN(session, "PageAccueil", {
 19      [properties.signature]: { onglet: TabLocation.Presence },
 20  
 21      [properties.data]: {
 22        avecConseilDeClasse: true,
 23  
 24        dateGrille: {
 25          _T: 7,
 26          V: next
 27        },
 28  
 29        numeroSemaine: weekNumber,
 30  
 31        coursNonAssures: {
 32          numeroSemaine: weekNumber
 33        },
 34  
 35        personnelsAbsents: {
 36          numeroSemaine: weekNumber
 37        },
 38  
 39        incidents: {
 40          numeroSemaine: weekNumber
 41        },
 42  
 43        exclusions: {
 44          numeroSemaine: weekNumber
 45        },
 46  
 47        donneesVS: {
 48          numeroSemaine: weekNumber
 49        },
 50  
 51        registreAppel: {
 52          date: {
 53            _T: 7,
 54            V: next
 55          }
 56        },
 57  
 58        previsionnelAbsServiceAnnexe: {
 59          date: {
 60            _T: 7,
 61            V: next
 62          }
 63        },
 64  
 65        donneesProfs: {
 66          numeroSemaine: weekNumber
 67        },
 68  
 69        EDT: {
 70          numeroSemaine: weekNumber
 71        },
 72  
 73        TAFARendre: {
 74          date: {
 75            _T: 7,
 76            V: next
 77          }
 78        },
 79  
 80        TAFEtActivites: {
 81          date: {
 82            _T: 7,
 83            V: next
 84          }
 85        },
 86  
 87        partenaireCDI: {
 88          CDI: {}
 89        },
 90  
 91        tableauDeBord: {
 92          date: {
 93            _T: 7,
 94            V: next
 95          }
 96        },
 97  
 98        modificationsEDT: {
 99          date: {
100            _T: 7,
101            V: next
102          }
103        }
104      }
105    });
106  
107    const response = await request.send();
108    return decodeHomepage(response.data[properties.data]);
109  };