This document describes all API endpoints of the Team RoboGo project, including authentication, slide management, score management, and screen control functionalities.
- Base URL:
http://localhost:8081 - API Version: v1.0.0
- Authentication: JWT Bearer Token
- Content Type:
application/json
- Endpoint:
POST /auth/login - Description: Validates user credentials and returns JWT token
- Request Body:
{ "username": "admin", "password": "admin" } - Response:
{ "success": true, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": 1, "username": "admin" } }
- Endpoint:
GET /auth/session - Description: Validates JWT token and returns current user session information
- Headers:
Authorization: Bearer <token> - Response:
{ "valid": true, "user": { "id": 1, "username": "admin" } }
- Endpoint:
POST /auth/logout - Description: User logout operation
- Response:
{ "success": true }
- Endpoint:
GET /slidedecks - Description: Returns all slide decks in the system
- Authentication: Requires JWT token
- Response:
[ { "id": 1, "name": "Main Screen Slides", "transitionTime": 5000, "version": 1, "competitionId": 1, "slides": [...], "lastUpdate": "2024-01-01T10:00:00.000" } ]
- Endpoint:
GET /slidedecks/{deckId} - Description: Gets detailed information of slide deck by ID
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Response: Same as above for single slide deck object
- Endpoint:
POST /slidedecks - Description: Creates a new slide deck
- Authentication: Requires JWT token
- Request Body:
{ "name": "New Slide Deck", "transitionTime": 3000, "competitionId": 1 }
- Endpoint:
PUT /slidedecks/{deckId} - Description: Updates information of specified slide deck
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Endpoint:
DELETE /slidedecks/{deckId} - Description: Deletes specified slide deck
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Endpoint:
POST /slidedecks/{deckId}/slides - Description: Adds new slide to specified slide deck
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Request Body:
{ "name": "Image Slide", "index": 0, "type": "IMAGE", "imageMeta": { "id": 1, "name": "example.jpg", "contentType": "image/jpeg" } }
- Endpoint:
POST /slidedecks/{deckId}/slides/reorder - Description: Reorders slides in slide deck
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Request Body:
[1, 3, 2, 4]
- Endpoint:
DELETE /slidedecks/{deckId}/slides/{slideId} - Description: Removes specified slide from slide deck
- Parameters:
deckId- Slide deck IDslideId- Slide ID
- Authentication: Requires JWT token
- Endpoint:
GET /slidedecks/{deckId}/slides/{slideId} - Description: Gets detailed information of specified slide in deck
- Parameters:
deckId- Slide deck IDslideId- Slide ID
- Authentication: Requires JWT token
- Endpoint:
PUT /slidedecks/{deckId}/speed - Description: Updates slide deck transition time
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Request Body:
{ "transitionTime": 4000 }
- Endpoint:
GET /slidedecks/{deckId}/sync - Description: Gets current synchronization status of slide deck
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Response:
{ "slideDeck": {...}, "hasChanges": false }
- Endpoint:
POST /slidedecks/{deckId}/sync - Description: Updates synchronization status of slide deck
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Request Body:
{ "slideDeckId": 1, "version": 2 }
- Endpoint:
POST /slidedecks/{deckId}/sync/force - Description: Forces synchronization status update (used when content changes)
- Parameters:
deckId- Slide deck ID - Authentication: Requires JWT token
- Endpoint:
GET /scores/category/{categoryId} - Description: Gets scores of all teams in specified category, including ranking and highlight information
- Parameters:
categoryId- Category ID - Authentication: Requires JWT token
- Response:
[ { "id": 1, "points": 100.0, "time": 120, "team": { "id": 1, "name": "Team A" }, "highlight": true } ]
- Endpoint:
POST /scores - Description: Adds new score record for specified team
- Authentication: Requires JWT token
- Request Body:
{ "points": 95.5, "time": 180, "team": { "id": 1 } }
- Endpoint:
PUT /scores/{id} - Description: Updates specified score record
- Parameters:
id- Score record ID - Authentication: Requires JWT token
- Endpoint:
DELETE /scores/{id} - Description: Deletes specified score record
- Parameters:
id- Score record ID - Authentication: Requires JWT token
- Endpoint:
POST /scores/slide - Description: Creates new score slide
- Authentication: Requires JWT token
- Request Body:
{ "name": "Score Display", "index": 0, "type": "SCORE", "category": { "id": 1, "name": "Junior Division" } }
- Endpoint:
GET /screens - Description: Returns all display screens in the system
- Authentication: Requires JWT token
- Response:
[ { "id": 1, "name": "Main Screen", "status": "ACTIVE", "slideDeck": { "id": 1, "name": "Main Screen Slides" } } ]
- Endpoint:
GET /screens/{id} - Description: Gets detailed information of specified screen
- Parameters:
id- Screen ID - Authentication: Requires JWT token
- Endpoint:
POST /screens - Description: Creates new display screen
- Authentication: Requires JWT token
- Request Body:
{ "name": "New Screen", "status": "ACTIVE" }
- Endpoint:
PUT /screens/{id} - Description: Updates information of specified screen
- Parameters:
id- Screen ID - Authentication: Requires JWT token
- Endpoint:
DELETE /screens/{id} - Description: Deletes specified screen
- Parameters:
id- Screen ID - Authentication: Requires JWT token
- Endpoint:
POST /screens/{id}/assign-slide-deck/{slideDeckId} - Description: Assigns specified slide deck to screen
- Parameters:
id- Screen IDslideDeckId- Slide deck ID
- Authentication: Requires JWT token
- Endpoint:
GET /screens/{id}/content - Description: Gets current content of specified screen
- Parameters:
id- Screen ID - Authentication: Requires JWT token
- Endpoint:
PUT /screens/{id}/status - Description: Updates status of specified screen
- Parameters:
id- Screen IDstatus- Screen status (ACTIVE, INACTIVE, ERROR)
- Authentication: Requires JWT token
- Endpoint:
GET /categories - Description: Returns all categories in the system
- Authentication: Requires JWT token
- Endpoint:
GET /categories/{id} - Description: Gets detailed information of specified category
- Parameters:
id- Category ID - Authentication: Requires JWT token
- Endpoint:
POST /categories - Description: Creates new category
- Authentication: Requires JWT token
- Endpoint:
PUT /categories/{id} - Description: Updates information of specified category
- Parameters:
id- Category ID - Authentication: Requires JWT token
- Endpoint:
DELETE /categories/{id} - Description: Deletes specified category
- Parameters:
id- Category ID - Authentication: Requires JWT token
- Endpoint:
GET /teams - Description: Returns all teams in the system
- Authentication: Requires JWT token
- Endpoint:
GET /teams/{id} - Description: Gets detailed information of specified team
- Parameters:
id- Team ID - Authentication: Requires JWT token
- Endpoint:
POST /teams - Description: Creates new team
- Authentication: Requires JWT token
- Endpoint:
PUT /teams/{id} - Description: Updates information of specified team
- Parameters:
id- Team ID - Authentication: Requires JWT token
- Endpoint:
DELETE /teams/{id} - Description: Deletes specified team
- Parameters:
id- Team ID - Authentication: Requires JWT token
- Endpoint:
POST /slideimages - Description: Uploads new image file
- Authentication: Requires JWT token
- Content Type:
multipart/form-data
- Endpoint:
GET /slideimages/{id} - Description: Gets content of specified image
- Parameters:
id- Image ID - Authentication: Requires JWT token
- Endpoint:
GET /slideimages/{id}/meta - Description: Gets metadata information of specified image
- Parameters:
id- Image ID - Authentication: Requires JWT token
- Endpoint:
DELETE /slideimages/{id} - Description: Deletes specified image
- Parameters:
id- Image ID - Authentication: Requires JWT token
All API endpoints may return the following error responses:
{
"error": "Bad Request",
"message": "Detailed error message"
}{
"error": "Authentication Failed",
"message": "Invalid JWT token"
}{
"error": "Resource Not Found",
"message": "Requested resource not found"
}{
"error": "Internal Server Error",
"message": "Server error occurred while processing request"
}curl -X POST http://localhost:8081/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin"}'curl -X GET http://localhost:8081/slidedecks \
-H "Authorization: Bearer <your-jwt-token>"curl -X POST http://localhost:8081/slidedecks \
-H "Authorization: Bearer <your-jwt-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Main Screen Slides",
"transitionTime": 5000,
"competitionId": 1
}'curl -X POST http://localhost:8081/scores \
-H "Authorization: Bearer <your-jwt-token>" \
-H "Content-Type: application/json" \
-d '{
"points": 95.5,
"time": 180,
"team": {"id": 1}
}'- Authentication: All endpoints except login and session validation require valid JWT tokens
- Version Control: Slide decks use version numbers for synchronization, clients should check version changes
- File Upload: Image upload supports files up to 100MB
- Concurrency Control: System supports multi-client concurrent access through version control mechanism
- Error Handling: All errors return standardized error response format