Skip to content

Commit 4054c79

Browse files
Parse course status from dbh in grades (#3070)
1 parent 3d371ed commit 4054c79

File tree

1 file changed

+54
-2
lines changed

1 file changed

+54
-2
lines changed

apps/grades-backend/src/sync/dbh/dbh-service.ts

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@ import * as z from "zod"
22
import { filterSchema, institutionFilter, taskFilter } from "./filters"
33
import { schemas } from "@dotkomonline/grades-db/schemas"
44

5+
/*
6+
API documentation can be found at:
7+
https://dbh.hkdir.no/static/files/dokumenter/api/api_dokumentasjon.pdf
8+
9+
Or table documentation found at:
10+
https://dbh.hkdir.no/datainnhold/tabell-dokumentasjon
11+
*/
12+
513
const BASE_URL = "https://dbh.hkdir.no"
614
const TABLE_URL = `${BASE_URL}/api/Tabeller/hentJSONTabellData`
715

@@ -13,6 +21,7 @@ const DECIMAL_SEPERATOR = "."
1321
const Semesters = schemas.SemesterSchema.enum
1422
const StudyLevels = schemas.StudyLevelSchema.enum
1523
const TeachingLanguages = schemas.TeachingLanguageSchema.enum
24+
const CourseStatus = z.enum(["ACTIVE", "NEW", "DISCONTINUED"])
1625

1726
const parseSemester = (semester: number) => {
1827
switch (semester) {
@@ -53,12 +62,35 @@ const parseTeachingLanguage = (language: string) => {
5362
}
5463
}
5564

65+
const parseStatus = (status: number) => {
66+
switch (status) {
67+
case 1:
68+
return CourseStatus.Enum.ACTIVE
69+
case 2:
70+
return CourseStatus.Enum.NEW
71+
case 3:
72+
case 4:
73+
return CourseStatus.Enum.DISCONTINUED
74+
default:
75+
return null
76+
}
77+
}
78+
79+
// Table field information avaiable at
80+
// https://dbh.hkdir.no/datainnhold/tabell-dokumentasjon/308
5681
const ApiGradeSchema = z.object({
82+
Instutisjonskode: z.coerce.number(),
83+
Instutisjonsnavn: z.coerce.string(),
5784
Emnekode: z.coerce.string(),
58-
Årstall: z.coerce.number(),
5985
Karakter: z.coerce.string(),
86+
Årstall: z.coerce.number(),
6087
Semester: z.coerce.number(),
88+
Semesternavn: z.coerce.string(),
89+
Avdelingskode: z.coerce.number(),
90+
Avdelingsnavn: z.coerce.string(),
6191
"Antall kandidater totalt": z.coerce.number(),
92+
"Antall kandidater kvinner": z.coerce.number(),
93+
"Antall kandidater menn": z.coerce.number(),
6294
})
6395
const ParsedGradeSchema = ApiGradeSchema.transform((input) => {
6496
return {
@@ -70,13 +102,32 @@ const ParsedGradeSchema = ApiGradeSchema.transform((input) => {
70102
}
71103
})
72104

105+
// Table field information avaiable at
106+
// https://dbh.hkdir.no/datainnhold/tabell-dokumentasjon/208
73107
const ApiCourseSchema = z.object({
108+
Instutisjonskode: z.coerce.number(),
109+
Instutisjonsnavn: z.coerce.string(),
110+
Avdelingskode: z.coerce.number(),
111+
Avdelingsnavn: z.coerce.string(),
112+
Avdelingskode_SSB: z.coerce.number().nullable(),
74113
Årstall: z.coerce.number(),
75114
Semester: z.coerce.number(),
115+
Semesternavn: z.coerce.string(),
116+
Studieprogramkode: z.coerce.string(),
117+
Studieprogramnavn: z.coerce.string(),
76118
Emnekode: z.coerce.string(),
77119
Emnenavn: z.coerce.string(),
78-
Nivåkode: z.coerce.string(),
120+
Nivåkode: z.coerce.string(), // Is sometimes a number for old timey courses where level is null
121+
Nivånavn: z.coerce.string().nullable(),
122+
Studiepoeng: z.coerce.number(),
123+
"NUS-kode": z.coerce.number(),
124+
Status: z.coerce.number(),
125+
Statusnavn: z.coerce.string(),
79126
"Underv.språk": z.coerce.string(),
127+
Navn: z.coerce.string(), // wtf is the difference between emnenavn and just navn????
128+
Fagkode: z.coerce.number().nullable(), // wtf is the difference between emnekode and fagkode
129+
Fagnavn: z.coerce.string().nullable(), // oh great, another name
130+
"Oppgave (ny fra h2012)": z.coerce.number(), // Always 0 with the taskFilter
80131
})
81132
const ParsedCourseSchema = ApiCourseSchema.transform((input) => {
82133
return {
@@ -86,6 +137,7 @@ const ParsedCourseSchema = ApiCourseSchema.transform((input) => {
86137
norwegianName: input.Emnenavn,
87138
studyLevel: parseStudyLevel(input.Nivåkode),
88139
teachingLanguges: parseTeachingLanguage(input["Underv.språk"]),
140+
status: parseStatus(input.Status),
89141
}
90142
})
91143

0 commit comments

Comments
 (0)