@@ -2,6 +2,14 @@ import * as z from "zod"
22import { filterSchema , institutionFilter , taskFilter } from "./filters"
33import { 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+
513const BASE_URL = "https://dbh.hkdir.no"
614const TABLE_URL = `${ BASE_URL } /api/Tabeller/hentJSONTabellData`
715
@@ -13,6 +21,7 @@ const DECIMAL_SEPERATOR = "."
1321const Semesters = schemas . SemesterSchema . enum
1422const StudyLevels = schemas . StudyLevelSchema . enum
1523const TeachingLanguages = schemas . TeachingLanguageSchema . enum
24+ const CourseStatus = z . enum ( [ "ACTIVE" , "NEW" , "DISCONTINUED" ] )
1625
1726const 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
5681const 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} )
6395const 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
73107const 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} )
81132const 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