Specifikation för grupprumsbokning i Daisys nya API
Se även Generella krav för samtliga APIer
Hämta komplett kontext för att genomföra en bokning
Returnerar all information om de grupprum den autentiserade användaren kan boka, inklusive alla bokningar inom det bokningsbara intervallet.
Inkluderar relevant metadata som behövs för att uppfylla reglerna för bokning.
Det finns filter för att begränsa svaret till rum med en viss kapacitet.
Specifikation
Förfrågan
- HTTP-verb:
GET - Autentiserad: ja
- Endpoint:
/booking/group-rooms - Argument:
minsize:number
Frivilligt argument. Inkludera endast rum med minst det angivna antalet platser.maxsize:number
Frivilligt argument. Inkludera endast rum med max det angivna antalet platser.
Svar
{
"rooms": [
{
"id": string,
"name": string,
"capacity": number,
"bookings": [
{
"start": string,
"end": string
}
]
}
],
"max_bookable_length": string,
"earliest_booking_time": string,
"latest_booking_time": string,
"minimum_participants": number,
"furthest_bookable_date": string
}
Svarsobjektets nycklar:
-
rooms:list
En lista med rumsobjekt. -
max_bookable_length:string
Maximal tillåten längd på en bokning, formaterat som ett ISO-tidsintervall. -
earliest_booking_time:string
Tidigaste tillåtna tid på dagen som en bokning får börja, formaterat som en ISO-tid. -
latest_booking_time:string
Senaste tillåtna tid på dagen som en bokning får sluta, formaterat som en ISO-tid. -
minimum_participants:number
Minsta antal deltagare på en bokning för att den ska accepteras. -
furthest_bookable_date:string
Sista datum då användaren får lägga en bokning vid tidpunkten då svaret skickas, formaterat som ett ISO-datum.
Rumsobjektens nycklar:
-
id:string
En arbiträr sträng som unikt identifierar ett rum. -
name:string
Rummets namn. -
capacity:number
Antalet platser i rummet. -
bookings:list
En lista med bokningsobjekt.
Bokningsojektens nycklar:
-
start:string
Datum och tid då bokningen börjar, formaterat som ett ISO-datum+tid. -
end:string
Datum och tid då bokningen slutar, formaterat som ett ISO-datum+tid.
Exempel
Dagens datum är i exemplet 2024-11-01 och det bokningsbara intervallet är 14 dagar.
> GET /v1/booking/group-rooms?maxsize=5
> Authorization: Bearer <oauth 2 token>
> Accept: application/json
< 200 OK
< Content-Type: application/json
{
"rooms": [
{
"id": "1",
"name": "Small Room 1",
"capacity": 5,
"bookings": [
{
"start": "2024-11-03T10:00:00",
"end": "2024-11-03T12:00:00"
},
{
"start": "2024-11-03T12:30:00",
"end": "2024-11-03T14:00:00"
}
]
},
{
"id": "abcd-uuid8v3-blaj-blaj",
"name": "Small Room 2",
"capacity": 5,
"bookings": [
{
"start": "2024-11-10T14:00:00",
"end": "2024-11-10T18:00:00"
}
]
}
],
"max_bookable_length": "PT4H",
"earliest_booking_time": "08:00:00",
"latest_booking_time": "20:00:00",
"minimum_participants": 2,
"furthest_bookable_date": "2024-11-15"
}
Hämta mina bokningar
Returnerar en lista med grupprumsbokningar som invloverar den autentiserade användaren.
Bokningsojekten innehåller all information som krävs för att kunna presentera bokningarna för användaren.
Det framgår ur bokningen om användaren kan redigera den.
Användaren kan alltid ta bort sig själv som deltagare på en bokning, se Ta bort en bokning för detaljer.
Specifikation
Förfrågan
- HTTP-verb:
GET - Autentiserad: ja
- Endpoint:
/booking/group-rooms/mine
Svar
[
{
"booking_id": string,
"booking_name": string,
"room_id": string,
"room_name": string,
"start": string,
"end": string,
"editable": boolean,
"participants": [
string
]
}
]
Svaret är en json-lista med bokningsobjekt.
Bokningsobjektens nycklar:
-
booking_id:string
En arbiträr sträng som unikt identifierar en bokning. -
booking_name:string
Bokningens namn. -
room_id:string
En arbiträr sträng som unikt identifierar ett rum. -
room_name:string
Det bokade rummets namn. -
start:string
Datum och tid då bokningen börjar, formaterat som ett ISO-datum+tid. -
end:string
Datum och tid då bokningen slutar, formaterat som ett ISO-datum+tid. -
editable:boolean
trueom användaren kan redigera bokningen. Användaren ska alltid kunna ta bort sig själv frånadditional_participants. -
participants:list
Lista på samtliga SU-användarnamn som deltar i bokningen, inklusive bokaren.
Exempel
> GET /v1/booking/group-rooms/mine
> Authorization: Bearer <oauth 2 token>
> Accept: application/json
< 200 OK
< Content-Type: application/json
[
{
"booking_id": "leif43253240",
"booking_name": "Team standup",
"room_name": "G5:7",
"start": "2024-11-20T08:00",
"end": "2024-11-20T10:00",
"editable": false,
"participants": [
"me@su.se",
"kaan8888@su.se",
"joan7777@su.se"
]
}
]
Skapa en bokning
Skapar en bokning för den autentiserade användaren, givet att bokningen uppfyller systemets regler. Det returnerade svaret innehåller all information som behövs för att kunna presentera en tydlig bokningsbekräftelse för användaren.
Specifikation
Förfrågan
- HTTP-verb:
POST - Autentiserad: ja
- Endpoint:
/booking/group-rooms/bookings - Body:
{ "room_id": string, "name": string, "start": string, "end": string, "additional_participants": [ string ] }
Body-objektets nycklar:
-
room_id:string
En arbiträr sträng som unikt identifierar ett rum. -
name:string
Bokningens namn. -
start:string
Datum och tid då bokningen börjar, formaterat som ett ISO-datum+tid. -
end:string
Datum och tid då bokningen slutar, formaterat som ett ISO-datum+tid. -
additional_participants:list
Lista över SU-användarnamn som deltar i bokningen utöver den bokande användaren.
Svar
{
"booking_id": string,
"name": string,
"room_id": string,
"room_name": string,
"start": string,
"end": string,
"participants": [
string
]
}
Svarsobjektets nycklar:
-
booking_id:string
En arbiträr sträng som unikt identifierar en bokning. -
name:string
Bokningens namn. -
room_id:string
En arbiträr sträng som unikt identifierar ett rum. -
room_name:string
Det bokade rummets namn. -
start:string
Datum och tid då bokningen börjar, formaterat som ett ISO-datum+tid. -
end:string
Datum och tid då bokningen slutar, formaterat som ett ISO-datum+tid. -
participants:list
Lista på samtliga SU-användarnamn som deltar i bokningen, inklusive bokaren.
Exempel
> POST /v1/booking/group-rooms/bookings
> Authorization: Bearer <oauth 2 token>
> Accept: application/json
{
"room_id": "123462abc",
"name": "Min bokning för tentaplugg 😃<script>alert('hej')</script>",
"start": "2024-11-08T12:00:00",
"end": "2024-11-08T13:00:00",
"additional_participants": [
"stud1234@su.se",
"komp153n@su.se"
]
}
< 200 OK
< Content-Type: application/json
{
"booking_id": "leif43253240",
"name": "Min bokning för tentaplugg 😃<script>alert('hej')</script>",
"room_id": "foobar65323",
"room_name": "G5:7",
"start": "2024-11-08T12:00:00",
"end": "2024-11-08T13:00:00",
"participants": [
"me@su.se",
"stud1234@su.se",
"komp153n@su.se"
]
}
Uppdatera en bokning
Ändrar innehållet i en grupprumsbokning, givet att den autentiserade användaren har rätt att redigera bokningen.
Förfrågan innehåller alla fält, även såna som inte ska ändras.
Det är tillåtet men inte obligatoriskt att inkludera sig
själv i additional_participants.
Specifikation
Förfrågan
- HTTP-verb:
PUT - Autentiserad: ja
- Endpoint:
/booking/group-rooms/bookings/{booking_id} - Body:
{ "booking_id": string, "booking_name": string, "room_id": string, "start": string, "end": string, "additional_participants": [ string ] }
Body-objektets nycklar:
-
booking_id:string
En arbiträr sträng som unikt identifierar en bokning. -
booking_name:string
Bokningens namn. -
room_id:string
En arbiträr sträng som unikt identifierar ett rum. -
start:string
Datum och tid då bokningen börjar, formaterat som ett ISO-datum+tid. -
end:string
Datum och tid då bokningen slutar, formaterat som ett ISO-datum+tid. -
additional_participants:list
Lista över SU-användarnamn som deltar i bokningen utöver den bokande användaren.
Svar
Se samma svar som för att skapa bokning.
Exempel
> PUT /v1/booking/group-rooms/bookings/{booking_id}
> Authorization: Bearer <oauth 2 token>
> Accept: application/json
> Content-Type: application/json
{
"booking_id": "leif43253240",
"name": "Min bokning för tentaplugg 😃",
"start": "2024-11-08T12:00:00",
"end": "2024-11-08T13:00:00",
"additional_participants": [
"stud1234@su.se",
"komp153n@su.se"
]
}
< 200 OK
< Content-Type: application/json
{
"booking_id": "leif43253240",
"name": "Min bokning för tentaplugg 😃",
"room_name": "G5:7",
"start": "2024-11-08T12:00:00",
"end": "2024-11-08T13:00:00",
"participants": [
"me@su.se",
"stud1234@su.se",
"komp153n@su.se"
]
}
Ta bort en bokning
Raderar en bokning, givet att den autentiserade användaren har rätt att redigera bokningen.
Om användaren inte har rätt att redigera men är deltagare i bokningen raderas användaren istället ur deltagarlistan.
Faller antalet deltagare under reglernas krav så är det upp till APIet att avgöra vad som händer. Det framgår ur svaret huruvida bokningen finns kvar eller ej.
Specifikation
Förfrågan
- HTTP-verb:
DELETE - Autentiserad: ja
- Endpoint:
/booking/group-rooms/bookings/{booking_id}
Svar
Ett boknings-objekt i samma format som svaret när en bokning skapas, eller ett tomt objekt om bokningen raderats helt.
Exempel
> DELETE /v1/booking/group-rooms/bookings/{booking_id}
> Authorization: Bearer <oauth 2 token>
Bokningen raderades helt (användaren som gjorde förfrågan ägde bokningen):
< 200 OK
< Content-Type: application/json
{
"result": "deleted"
}
Bokningen finns kvar men den förfrågande användaren togs bort:
< 200 OK
< Content-Type: application/json
{
"result": "removed_participation"
}
Leta upp potentiella deltagare i en bokning
Returnerar upp till 5 förslag på bokningsdeltagare, givet en söksträng och datumet då den tilltänkta bokningen ska börja.
Söksträngen matchas mot alla ord i personers DisplayName (DN i SUKAT).
Datumet används som hint till sökningen för att möjliggöra mest relevanta resultat.
Förslagen baseras på en heuristisk sökning som försöker ge så relevanta förslag som möjligt. En möjlighet är att börja med att leta bland befintliga bokningar den autentiserade användaren deltar på, vidga till användarens pågående kurser, vidga till användarens historiska kurser och till slut kolla bland alla användare. Den exakta implementationen av den heuristiska sökalgoritmen är upp till API-implementatören.
Specifikation
Förfrågan
- HTTP-verb:
GET - Autentiserad: ja
- Endpoint:
/booking/group-rooms/people - Argument:
search:string
Obligatoriskt argument. Söksträngen måste vara minst ett tecken lång.date:string
Frivilligt argument. Datumet då bokningen ska börja, formaterat som ett ISO-datum. Utelämnas det här argumentet så används dagens datum.
Svar
[
string
]
Svaret är en json-lista med SU-användarnamn.
Exempel
> POST /v1/booking/group-rooms/people?search=Ka&date=2024-09-11
> Authorization: Bearer <oauth 2 token>
> Accept: application/json
< 200 OK
< Content-Type: application/json
[
"kaka1234@su.se",
"joka6432@su.se",
"karv4525@su.se",
"sfka6745@su.se",
"kalle@su.se"
]