add old files

This commit is contained in:
Lukas Weger 2025-08-01 17:37:41 +02:00
parent 53e4346d55
commit 19a40483aa
59 changed files with 20831 additions and 0 deletions

220
API_DOCUMENTATION.md Normal file
View file

@ -0,0 +1,220 @@
# SERENA API
## Authentication
This system uses JWT-like tokens generated automatically during key actions:
- **Creating a radio station** generates an **owner token**.
- **Joining a radio station** generates a **client token**.
All subsequent requests require this token in the `Authorization` header:
```
Authorization: Bearer <token>
```
### Token Generation Endpoints
#### Create Radio Station → Owner Token
- **POST** `/api/radio-stations`
- **No authentication required**
- **Body**:
```json
{
"name": "My Radio Station",
"description": "A cool radio station"
}
```
**Response:**
```json
{
"success": true,
"message": "Radio station created successfully",
"data": {
"station": {
/* station object */
},
"ownerToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
```
#### Connect to Radio Station → Client Token
- **POST** `/api/clients/connect`
- **No authentication required**
- **Body Options**:
- With Station ID + Join Code
```json
{
"username": "john_doe",
"radioStationId": "station123",
"joinCode": "ABC123"
}
```
- With Join Code only
```json
{ "username": "john_doe", "joinCode": "ABC123" }
```
**Response:**
```json
{
"success": true,
"message": "Successfully connected to radio station",
"data": {
"client": {
/* client object */
},
"clientToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
```
---
## API Endpoints
### Radio Station Management
- **Create Station** `POST /api/radio-stations` (No auth; returns owner token)
- **Get All Stations** `GET /api/radio-stations` (Auth: owner or client)
- Optional query param: `activeOnly=true`
- **Get by ID** `GET /api/radio-stations/{stationId}` (Auth required)
- **Get by Join Code** `GET /api/radio-stations/join/{joinCode}` (Public)
- **Update Station** `PUT /api/radio-stations/{stationId}` (Owner only)
- **Delete Station** `DELETE /api/radio-stations/{stationId}` (Owner only)
### Client Management
- **Connect Client** `POST /api/clients/connect` (No auth; returns client token)
- **Disconnect Client** `DELETE /api/clients/{clientId}/disconnect` (Owner only)
- **Get Client Info** `GET /api/clients/{clientId}` (Auth required)
- **Get Station Clients** `GET /api/clients/station/{radioStationId}` (Auth required)
### Song Management
> All endpoints require a valid **owner** or **client** token unless specified.
- **Add Song** `POST /api/radio-stations/{stationId}/songs`
- **Get Queue** `GET /api/radio-stations/{stationId}/songs/queue`
- **Get Current Song** `GET /api/radio-stations/{stationId}/songs/current`
- **Play Next Song** `POST /api/radio-stations/{stationId}/songs/next` (Owner only)
- **Vote on Song** `POST /api/radio-stations/{stationId}/songs/{songId}/vote`
```json
{ "voteType": "UPVOTE" }
```
`voteType` can be `"UPVOTE"` or `"DOWNVOTE"`.
- **Remove Vote** `DELETE /api/radio-stations/{stationId}/songs/{songId}/vote`
---
## Models
### RadioStation
- `id`, `name`, `description`, `ownerId`, `joinCode`, `createdAt`, `isActive`, `connectedClients`, `songQueue`, `currentlyPlaying`
### Song
- `id`, `title`, `artist`, `album`, `duration`, `url`, `addedBy`, `addedAt`, `votes`, `upvotes`, `downvotes`
### Client
- `id`, `username`, `radioStationId`, `connectedAt`, `isActive`
---
## Authentication & Authorization
- **Public**: Join stations via join code, connect clients.
- **Authenticated User**: Add/vote on songs, view stations, connect to stations.
- **Station Owner**: Manage station (update/delete), control playback, disconnect clients.
---
## Features
- JWT-based authentication for most operations.
- Join codebased client connection.
- Owner-only management (updates, deletes, playback).
- Song queue sorted by votes.
- Full CORS support.
---
## Example Flow
1. User registers/logs in → gets JWT.
2. Owner creates station → gets join code + owner token.
3. Clients join via join code → get client token.
4. Authenticated users add/vote on songs.
5. Owner controls playback & manages station.
---
## Running the Application
```bash
cd backend
./gradlew bootRun
```
Server runs on port `8080`.
### Quick Auth Test
```bash
curl -X POST http://localhost:8080/api/auth/register -H "Content-Type: application/json" -d '{"username":"testuser","password":"password123","email":"test@example.com"}'
curl -X POST http://localhost:8080/api/auth/login -H "Content-Type: application/json" -d '{"username":"testuser","password":"password123"}'
curl -X GET http://localhost:8080/api/radio-stations -H "Authorization: Bearer <token>"
```
---
### **SERENA API Endpoint Table**
| Method | Endpoint | Description | Auth Required | Notes |
| ---------- | ------------------------------------- | ------------------------ | ------------- | -------------------------- |
| **POST** | `/api/radio-stations` | Create a radio station | ❌ | Returns **owner token** |
| **GET** | `/api/radio-stations` | Get all stations | ✅ | `activeOnly=true` optional |
| **GET** | `/api/radio-stations/{stationId}` | Get station by ID | ✅ | — |
| **GET** | `/api/radio-stations/join/{joinCode}` | Get station by join code | ❌ | Public lookup |
| **PUT** | `/api/radio-stations/{stationId}` | Update station | ✅ (Owner) | Owner only |
| **DELETE** | `/api/radio-stations/{stationId}` | Delete station | ✅ (Owner) | Owner only |
#### 👥 **Client Management**
| Method | Endpoint | Description | Auth Required | Notes |
| ---------- | --------------------------------------- | -------------------------- | ------------- | ------------------------ |
| **POST** | `/api/clients/connect` | Connect to station | ❌ | Returns **client token** |
| **DELETE** | `/api/clients/{clientId}/disconnect` | Disconnect client | ✅ (Owner) | Owner only |
| **GET** | `/api/clients/{clientId}` | Get client info | ✅ | — |
| **GET** | `/api/clients/station/{radioStationId}` | Get all clients in station | ✅ | — |
#### 🎵 **Song Management**
| Method | Endpoint | Description | Auth Required | Notes |
| ---------- | ----------------------------------------------------- | -------------------------- | ------------- | --------------------------- |
| **POST** | `/api/radio-stations/{stationId}/songs` | Add song to queue | ✅ | Client or Owner |
| **GET** | `/api/radio-stations/{stationId}/songs/queue` | Get song queue | ✅ | Sorted by votes |
| **GET** | `/api/radio-stations/{stationId}/songs/current` | Get currently playing song | ✅ | — |
| **POST** | `/api/radio-stations/{stationId}/songs/next` | Play next song | ✅ (Owner) | Moves top song to “current” |
| **POST** | `/api/radio-stations/{stationId}/songs/{songId}/vote` | Vote on song | ✅ | `voteType`: UPVOTE/DOWNVOTE |
| **DELETE** | `/api/radio-stations/{stationId}/songs/{songId}/vote` | Remove vote | ✅ | Removes users vote |
---