Skip to content
This repository has been archived by the owner on Sep 12, 2024. It is now read-only.

Commit

Permalink
Added /sfi route.
Browse files Browse the repository at this point in the history
  • Loading branch information
themaxsandelin committed Nov 9, 2018
1 parent 76a89ba commit 09e53fd
Show file tree
Hide file tree
Showing 5 changed files with 379 additions and 5 deletions.
8 changes: 4 additions & 4 deletions src/controllers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ router.get('/', (req, res) => {
'<a href="/gymsar">/gymsar</a><br><br>' +

'Kommunal vuxenutbildning grundläggande<br>' +
'<a href="/vuxgru">/vuxgru</a><br><br><br>' +
'<a href="/vuxgru">/vuxgru</a><br><br>' +

'Komvux sfi<br>' +
'<a href="/sfi">/sfi</a><br><br><br>' +

'<b>Work-in-progress routes:</b><br><br>' +

'Särvux grundläggande (WIP)<br>' +
'<a href="/sarvuxgru">/sarvuxgru</a><br><br>' +

'Komvux sfi (WIP)<br>' +
'<a href="/sfi">/sfi</a><br><br><br>' +

'<b>Built and facilitated by <a href="https://github.com/themaxsandelin" target="_blank">Max Sandelin</a></b><br><br>' +
'This API is completely open source, and you can find the <a href="https://github.com/themaxsandelin/skolverket-api" target="_blank">repository here.</a>' +
'</p>'
Expand Down
70 changes: 70 additions & 0 deletions src/controllers/sfi/courses.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// Route manager for /sfi/courses
// Data folder: sfi

// Dependencies
const router = require('express').Router()
const path = require('path')
const fs = require('fs')
const { parseString } = require('xml2js')

// Helpers
const formatter = require('../../helpers/sfi/formatter')
const latinize = require('../../helpers/latinize')

const rootPath = path.resolve(__dirname + '/../../../files/sfi')

router.get('/', (req, res) => {
const file = rootPath + '/subjectsAndCourses/amnen_och_kurser.xml'

parseString(fs.readFileSync(file).toString(), (err, result) => {
const courses = []

result.SubjectsAndCourses.subject.forEach(subject => {
if (subject.courses) {
subject.courses.forEach(course => {
courses.push({
name: course.name[0],
code: course.code[0]
})
})
}
})

res.json(courses)
})
})

router.get('/:code', (req, res) => {
const code = req.params.code.toLowerCase()
const file = rootPath + '/subjectsAndCourses/amnen_och_kurser.xml'

parseString(fs.readFileSync(file).toString(), (err, result) => {
let validCode = false
result.SubjectsAndCourses.subject.forEach(subject => {
if (subject.courses) {
subject.courses.forEach(course => {
if (course.code[0].toLowerCase() === code) {
validCode = true

let file = rootPath + '/subject/' + latinize(subject.name[0]) + '.xml'
while (file.indexOf('–') > -1) {
file = file.replace('–', '-')
}

parseString(fs.readFileSync(file), (err, result) => {
result.subject.courses.forEach(courseData => {
if (courseData.code[0].toLowerCase() === code) {
res.json(formatter.formatCourseData(courseData))
}
})
})
}
})
}
})

if (!validCode) res.status(404).send('Not found.')
})
})

module.exports = router
7 changes: 6 additions & 1 deletion src/controllers/sfi/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
// Route manager for /sfi.
// Data folder: sfi
const router = require('express').Router()

// Sub routes
router.use('/subjects', require('./subjects'))
router.use('/courses', require('./courses'))

router.get('/', (req, res) => {
res.json({
level: 'Komvux sfi',
routes: [ ]
routes: [ '/subjects', '/subjects/[code]', '/courses', '/courses/[code]' ]
})
})

Expand Down
50 changes: 50 additions & 0 deletions src/controllers/sfi/subjects.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Route manager for /sfi/subjects
// Data folder: sfi

// Dependencies
const router = require('express').Router()
const path = require('path')
const fs = require('fs')
const { parseString } = require('xml2js')

// Helpers
const formatter = require('../../helpers/sfi/formatter')
const latinize = require('../../helpers/latinize')

const rootPath = path.resolve(__dirname + '/../../../files/sfi')

router.get('/', (req, res) => {
const file = rootPath + '/subjectsAndCourses/amnen_och_kurser.xml'

parseString(fs.readFileSync(file).toString(), (err, result) => {
res.json(formatter.formatSubjects(result.SubjectsAndCourses.subject))
})
})

router.get('/:code', (req, res) => {
const code = req.params.code.toLowerCase()
const file = rootPath + '/subjectsAndCourses/amnen_och_kurser.xml'

parseString(fs.readFileSync(file).toString(), (err, result) => {
let validCode = false

result.SubjectsAndCourses.subject.forEach(subject => {
if (subject.code[0].toLowerCase() === code) {
validCode = true

let file = rootPath + '/subject/' + latinize(subject.name[0]) + '.xml'
while (file.indexOf('–') > -1) {
file = file.replace('–', '-')
}

parseString(fs.readFileSync(file), (err, result) => {
res.json(formatter.formatSubjectData(result.subject))
})
}
})

if (!validCode) res.status(404).send('Not found.')
})
})

module.exports = router
Loading

0 comments on commit 09e53fd

Please sign in to comment.