feat: fetch week data
This commit is contained in:
parent
f1c622ef60
commit
ef5e5601c2
|
@ -29,7 +29,12 @@ import { DateTime, FixedOffsetZone } from 'luxon'
|
|||
import * as html from 'node-html-parser'
|
||||
import { fakeFetcher } from './fake/fakeFetcher'
|
||||
import { checkStatus, DummyStatusChecker } from './loginStatus'
|
||||
import { extractMvghostRequestBody, parseCalendarItem } from './parse/parsers'
|
||||
import {
|
||||
extractMvghostRequestBody,
|
||||
parseTimetableData,
|
||||
parseScheduleEventData,
|
||||
parseBreaksData,
|
||||
} from './parse/parsers'
|
||||
import {
|
||||
bankIdInitUrl,
|
||||
bankIdCheckUrl,
|
||||
|
@ -204,7 +209,7 @@ export class ApiAdmentum extends EventEmitter implements Api {
|
|||
const now = DateTime.local()
|
||||
const [year, week] = now.toISOWeekDate().split('-')
|
||||
const isoWeek = week.replace('W', '')
|
||||
|
||||
|
||||
const fetchUrl = apiUrls.overview(
|
||||
'get-week-data',
|
||||
year.toString(),
|
||||
|
@ -216,94 +221,25 @@ export class ApiAdmentum extends EventEmitter implements Api {
|
|||
'x-requested-with': 'XMLHttpRequest',
|
||||
},
|
||||
})
|
||||
const calendarItems: CalendarItem[] = []
|
||||
|
||||
const overviewJson = await overviewResponse.json()
|
||||
console.log('get-week-data response', overviewJson)
|
||||
const schedule_events = (await overviewJson)?.data?.schedule_events // .breaks: [] | .assignments: []
|
||||
if (!schedule_events) {
|
||||
return Promise.resolve([])
|
||||
}
|
||||
/*
|
||||
"url": "https://skola.admentum.se/api/v1/schedule_event_instances/2990834/",
|
||||
"id": 2990834,
|
||||
"school_id": 824,
|
||||
"start_date": "2023-08-07",
|
||||
"end_date": "2023-08-07",
|
||||
"schedule_event": {
|
||||
"url": "https://skola.admentum.se/api/v1/schedule_events/148722/",
|
||||
"id": 148722,
|
||||
"eid": null,
|
||||
"schedule_id": 4385,
|
||||
"name": "Engelska",
|
||||
"start_time": "08:00:00",
|
||||
"end_time": "09:30:00",
|
||||
"rooms": [
|
||||
{
|
||||
"url": "https://skola.admentum.se/api/v1/rooms/7200/",
|
||||
"id": 7200
|
||||
}
|
||||
],
|
||||
"teachers": [
|
||||
{
|
||||
"url": "https://skola.admentum.se/api/v1/users/437302/",
|
||||
"id": 437302
|
||||
}
|
||||
],
|
||||
"schedule_groups": [],
|
||||
"primary_groups": [
|
||||
{
|
||||
"url": "https://skola.admentum.se/api/v1/primary_groups/36874/",
|
||||
"id": 36874
|
||||
}
|
||||
],
|
||||
"weekly_interval": ""
|
||||
}
|
||||
*/
|
||||
return Promise.resolve([])
|
||||
|
||||
const scheduleEventJson = (await overviewJson)?.data?.schedule_events // .breaks: [] | .assignments: []
|
||||
const schedule_events = parseScheduleEventData(scheduleEventJson)
|
||||
calendarItems.push(...schedule_events)
|
||||
|
||||
const breaks = (await overviewJson)?.data?.breaks
|
||||
const break_events = parseBreaksData(breaks);
|
||||
calendarItems.push(...break_events)
|
||||
|
||||
return calendarItems
|
||||
} catch (e) {
|
||||
console.error('Error fetching overview', e)
|
||||
return Promise.resolve([])
|
||||
}
|
||||
}
|
||||
|
||||
async getScheduledEvents(child: EtjanstChild): Promise<CalendarItem[]> {
|
||||
if (!this.isLoggedIn) {
|
||||
throw new Error('Not logged in...')
|
||||
}
|
||||
console.log('get calendar')
|
||||
const fetchUrl = apiUrls.schedule_events
|
||||
console.log('fetching calendar', fetchUrl)
|
||||
const eventsResponse = await this.fetch('scheduled-events', fetchUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Accept: 'application/json, text/plain, */*',
|
||||
},
|
||||
})
|
||||
|
||||
if (eventsResponse.status === 403) {
|
||||
console.error('Not allwed. Error headers', eventsResponse.headers)
|
||||
return []
|
||||
}
|
||||
if (eventsResponse.status !== 200) {
|
||||
console.error('Error headers', eventsResponse.headers)
|
||||
throw new Error(
|
||||
'Could not fetch children. Response code: ' + eventsResponse.status
|
||||
)
|
||||
}
|
||||
|
||||
const eventsResponseJson = await eventsResponse.json()
|
||||
console.log('eventsResponseJson', eventsResponseJson)
|
||||
return []
|
||||
// const fetchUrl = apiUrls.schedule_events
|
||||
// const events = await this.fetch('scheduled-events', fetchUrl, {
|
||||
// method: 'GET',
|
||||
// headers: {
|
||||
// 'Accept': 'application/json, text/plain, */*',
|
||||
// },
|
||||
// }).then(res => res.json()).then(json => json.results)
|
||||
|
||||
// return events.map(parseScheduleEvent)*/
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
getClassmates(_child: EtjanstChild): Promise<Classmate[]> {
|
||||
// TODO: We could get this from the events a child is associated with...
|
||||
|
@ -463,7 +399,7 @@ export class ApiAdmentum extends EventEmitter implements Api {
|
|||
console.log('fetching timetable', fetchUrl)
|
||||
const calendarResponse = await this.fetch('get-calendar', fetchUrl)
|
||||
const calendarResponseJson = await calendarResponse.json()
|
||||
const timetableEntries = parseCalendarItem(calendarResponseJson)
|
||||
const timetableEntries = parseTimetableData(calendarResponseJson)
|
||||
return timetableEntries
|
||||
}
|
||||
|
||||
|
|
|
@ -71,6 +71,69 @@ export const parseScheduleEvent = (({
|
|||
allDay?: start_time === '00:00:00' && end_time === '23:59:00'
|
||||
})
|
||||
*/
|
||||
/* OVERVIEW:
|
||||
"status": 200,
|
||||
"data": {
|
||||
"year": 2023,
|
||||
"week": 38,
|
||||
"assignments": [],
|
||||
"breaks": [
|
||||
{
|
||||
"id": 11031,
|
||||
"break_type": 1,
|
||||
"break_period": 1,
|
||||
"name": "Studiedag",
|
||||
"date": "2023-09-21",
|
||||
"week": null,
|
||||
"start_date": null,
|
||||
"end_date": null
|
||||
}
|
||||
],
|
||||
"schedule_events": [
|
||||
{
|
||||
"id": 3110610,
|
||||
"name": "Utvecklingssamtal",
|
||||
"formatted_time": "Heldag",
|
||||
"formatted_date": "2023-09-22"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
*/
|
||||
export const parseBreaksData = (jsonData: any): CalendarItem[] => {
|
||||
const breakItems: CalendarItem[] = []
|
||||
if (jsonData) {
|
||||
jsonData.forEach((event: { id: any; name: any; date: any, start_date: any; end_date: any }) => {
|
||||
breakItems.push({
|
||||
id: event.id,
|
||||
title: event.name,
|
||||
startDate: event.start_date || event.date,
|
||||
endDate: event.end_date || event.date,
|
||||
} as CalendarItem)
|
||||
});
|
||||
} else {
|
||||
console.error("Failed to parse breaks, no breaks found in json data.")
|
||||
}
|
||||
return breakItems;
|
||||
}
|
||||
|
||||
export const parseScheduleEventData = (jsonData: any): CalendarItem[] => {
|
||||
const calendarItems: CalendarItem[] = []
|
||||
if (jsonData) {
|
||||
jsonData.forEach((event: { id: any; name: any; formatted_date: any; formatted_time: any }) => {
|
||||
calendarItems.push({
|
||||
id: event.id,
|
||||
title: event.name,
|
||||
startDate: event.formatted_date,
|
||||
endDate: event.formatted_date,
|
||||
allDay: event.formatted_time === 'Heldag',
|
||||
} as CalendarItem)
|
||||
});
|
||||
} else {
|
||||
console.error("Failed to parse schedule events, no schedule events found in json data.")
|
||||
}
|
||||
return calendarItems;
|
||||
}
|
||||
|
||||
enum DayOfWeek {
|
||||
'Måndag'= 1,
|
||||
|
@ -82,7 +145,7 @@ enum DayOfWeek {
|
|||
'Söndag'= 7,
|
||||
}
|
||||
|
||||
export const parseCalendarItem = (jsonData: any): any => {
|
||||
export const parseTimetableData = (jsonData: any): any => {
|
||||
const timetableEntries: TimetableEntry[] = []
|
||||
if (jsonData && jsonData.days && Array.isArray(jsonData.days) && jsonData.days.length > 0) {
|
||||
jsonData.days.forEach((day: { name: string, lessons: any[] }) => {
|
||||
|
@ -100,7 +163,7 @@ export const parseCalendarItem = (jsonData: any): any => {
|
|||
});
|
||||
})
|
||||
} else {
|
||||
console.error("Failed to parse calendar item, no days found in json data.")
|
||||
console.error("Failed to parse timetable, no days found in json data.")
|
||||
}
|
||||
return timetableEntries;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue