Files
api-spec/daisy/schema.md
2026-04-13 10:43:42 +02:00

7.0 KiB

Specifikation för att hämta kurser och scheman i Daisys nya API

Hämta lista på kurser

Förfrågan

> GET /v1/me/courses?status=ongoing,unfinished,upcoming,finished,credited,aborted
> Authorization: Bearer <oauth 2 token>
> Accept: application/json

Ger mig (identifierad av oauth 2 token) alla mina kurser med delkurstillfällen jag är registrerad/deltagare på.

Svar

< 200 OK
< Content-Type: application/json
[
    {
        "code": "PROLED",
        "name": "Praktisk Projektledning",
        "ects": 7.5,
        "program": null,
        "status": "enum string", // ongoing, unfinished, upcoming, finished, credited, aborted
        "occasions": [
            {
                "id": "123456",
                "semester": "VT2025",
                "start": "2025-01-03",
                "end": "2025-06-03",
                "teachers": [{ "principal": "teacher1@su" }, { "principal": "teacher2@su" }]
            },
            {
                "id": "1234567",
                "semester": "HT2025",
                "start": "2025-09-03",
                "end": "2026-01-03",
                "teachers": [{ "principal": "teacher1@su" }, { "principal": "teacher2@su" }]
            }
        ]
    },
    {
        "code": "PROTO2",
        "name": "Prototyper inom interaktionsdesign II",
        "ects": 7.5,
        "program": { "code": "SIADK", "name": "Kandidatprogram i interaktionsdesign" },
        "status": "enum string", // ongoing, unfinished, upcoming
        "occasions": [
            {
                "id": "123456",
                "semester": "HT2025",
                "start": "2025-09-03",
                "end": "2026-01-03",
                "teachers": [{ "principal": "teacher3@su" }, { "principal": "teacher4@su" }]
            }
        ]
    }
]

Hämta kursinformation

Förfrågan

> Authorization: Bearer <oauth 2 token>
> Accept-Language: sv
> Accept: application/json

Svar

< Content-Type: application/json
< Content-Language: sv
{
    "code": "PROLED",
    "name": "Praktisk Projektledning",
    "description": "En kurs i praktisk projektledning där du får lära dig att planera, genomföra och utvärdera projekt inom IT-området.",
    "ects": 7.5,
    "id": "1234567",
    "semester": "HT2025",
    "start": "2025-09-03",
    "end": "2026-01-03",
    "teachers": [{ "principal": "teacher1@su" }, { "principal": "teacher2@su" }],
    "examinations": [
        {
            "name": "Tentamen",
            "code": "PROLED-TENTA-HT25",
            "result": { // senaste resultatet för den här tentan
                "grade": "A",
                "date": "2025-12-15"
            }
        }
    ]
}

Hämta kursschema

Förfrågan

> GET /v1/courses/:courseId/schedule
> Authorization: Bearer <oauth 2 token>
> Accept: application/json

type (string, enum):

Value Description
teaching Undervisning
exam Tenta
deadline Deadline
[
    {
        "type": "teaching",
        "name": "Föreläsning 1",
        "shortName": "F1",
        "startTime": "2025-01-03T10:00:00Z",
        "endTime": "2025-01-03T12:00:00Z",
        "location": [{ "name": "L30" }],
        "description": "Lecture on API Design",
        "participants": [
            { "principal": "teacher1@su", "role": "teacher" },
            { "principal": "teacher2@su", "role": "teacher" }
        ]
    },
    {
        "type": "teaching",
        "name": "Workshop 1",
        "shortName": "W1",
        "group": "1",
        "startTime": "2025-01-03T10:00:00Z",
        "endTime": "2025-01-03T12:00:00Z",
        "location": [{ "name": "L50" }],
        "description": "Workshop on Microservices",
        "participants": [
            { "principal": "teacher1@su", "role": "teacher" },
            { "principal": "teacher2@su", "role": "teacher" }
        ]
    }
]

Hämta personligt schema

Förfrågan

> GET /v1/users/me/schedule?&startTime=ISO-timestamp&endTime=ISO-timestamp
> Authorization: Bearer <oauth 2 token>
> Accept: application/json

Identifierare bör vara så stabil som möjligt och unik för varje system. Ska vara prefixad med systemets namn (ex. daisy-prog2-ht25-ordinarie-tenta).

Stanardschema för event:

{
    "title": "string",
    "description": "string", //optional
    "identifier": "string",
    "eventType": "enum string",
    "startTime": "ISO-timestamp",
    "endTime": "ISO-timestamp", // optional
    "details": {
        // beroende på eventType
        // courseEventType
        // bookingEventType
        // etc
    }
}

EventType (string, enum):

Value Description
teaching Undervisning
room booking Bokningar av rum
deadline Deadline, sista datum för kursregistrering, tentaanmälan, kursutvärdering

Details-objekt beroende på eventType:

{
    "courseEventType": {
        "locations": [{ "roomName": "string" }],
        "courseCode": "string",
        "occasionId": "string",
        "semester": "string",
        "type": "enum string", // teaching, exam, deadline etc
        "shortName": "string",
        "teachers": [{ "principal": "string" }]
    },
    "bookingEventType": {
        "locations": [{ "roomName": "string" }],
        "bookedBy": { "principal": "string" },
        "participants": [{ "principal": "string" }]
    },
    "deadlineEventType": {},
}

Exempel

[
    {
        "title": "Föreläsning 1",
        "description": "Lecture on API Design",
        "identifier": "daisy-proled-vt25-fl1",
        "eventType": "teaching",
        "startTime": "2025-01-03T10:00:00Z",
        "endTime": "2025-01-03T12:00:00Z",
        "details": {
            "locations": [{ "room": "L30" }],
            "courseCode": "PROLED",
            "occasionId": 123456,
            "semester": "VT2025",
            "type": "Undervisning",
            "shortname": "F1",
            "teachers": [{ "principal": "teacher1@su" }, { "principal": "teacher2@su" }]
        }
    },
    {
        "title": "Gruppmöte",
        "description": "Group Meeting",
        "identifier": "daisy-booking-12345",
        "eventType": "room booking",
        "startTime": "2025-01-03T09:00:00Z",
        "endTime": "2025-01-03T10:00:00Z",
        "details": {
            "locations": [{ "room": "G10:3" }],
            "bookedBy": { "principal": "student1@su" },
            "participants": [{ "principal": "student1@su" }, { "principal": "student2@su" }]
        }
    },
    {
        "description": "Tentaplugg - Don't forget the snacks",
        "title": "Tentaplugg",
        "identifier": "daisy-booking-123456",
        "eventType": "room booking",
        "startTime": "2025-01-03T09:00:00Z",
        "endTime": "2025-01-03T10:00:00Z",
        "details": {
            "participants": [{ "principal": "student1@su" }, { "principal": "student2@su" }]
        }
    }
]