7.0 KiB
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" }]
}
}
]