2026-01-05 16:03:44 +01:00

219 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# REST API Übersicht (aus Client-Calls im Projekt abgeleitet)
- **Base URL**: `VITE_WEBHOOK_URL` (siehe `src/lib/config.ts -> getWebhookUrl()`)
- **Auth**:
- Cookies werden standardmäßig mitgesendet (`credentials: 'include'`)
- Falls vorhanden wird `Authorization: Bearer <token>` gesetzt (siehe `apiFetch`)
- Bei `401` wird automatisch Refresh versucht über `/auth/rnjwt`
## Auth
- **POST /auth_login**
- Headers: `Content-Type: application/json`
- Body:
```json
{ "email": "string", "password": "string" }
```
- Response:
```json
{ "token": "string", "user": { ... } }
```
- **GET /auth/rnjwt**
- Zweck: JWT Refresh
- Response:
```json
{ "token": "string" }
```
## Events
- **POST /event/new_manual**
- Headers: `Content-Type: application/json`
- Body:
```json
{
"name": "string",
"description": "string?",
"location": "string?",
"url": "string?",
"image": "string?",
"manager_name": "string?",
"manager_email": "string?",
"begin_date": "YYYY-MM-DD?",
"end_date": "YYYY-MM-DD?"
}
```
- Response: beliebiges Event-Objekt
- **GET /events/get_current**
- Response: `Event[]` oder ein einzelnes Event-Objekt
- **GET /events**
- Response: `Event[]` oder ein einzelnes Event-Objekt
- **POST /event/new_fromurl**
- Headers: `Content-Type: application/json`
- Body:
```json
{ "url": "string", "command": "eventmodus_extract_from_url" }
```
- Response: `data.message_from_ai` oder Roh-Response
## Blog
- **GET /blog/new_blog**
- Response:
```json
{ "id": "string" } // oder { "blog_id": "string" }
```
- **POST /blog/publish**
- Headers: `Content-Type: application/json`
- Body:
```json
{
"blog_id": "string",
"publish_date": "YYYY-MM-DD",
"publish_socialmedia": true,
"socialmedia_channels": ["string"],
"socialmedia_languages": ["string"]
}
```
- Response: beliebige Publikations-Infos
- **POST /blog/update**
- Headers: `Content-Type: application/json`
- Body:
```json
{
"blog_id": "string",
"content": { ... }
}
```
- Response: Update-Ergebnis
- **POST /blog/generate**
- Headers: `Content-Type: application/json`
- Body:
```json
{
"blog_Id": "string",
"topic": "string",
"tonality": "string",
"languages": ["string"]
}
```
- Response: generierter Blog-Content
- **GET /blog/topic_suggestion**
- Response:
```json
{ "topics": ["string", ...] } | ["string", ...]
```
## Dateien & Medien
- **POST /file_upload_blog**
- Body (FormData):
- `file`: File
- `blog_id`: string
- Response:
```json
{ "url": "string", ... }
```
- **POST /file_upload_event**
- Body (FormData):
- `file`: File
- `event_id`: string
- Response:
```json
{ "url": "string", ... }
```
- **POST /upload_tmp**
- Body (FormData):
- `file`: File
- Response:
```json
{ "url": "string", ... }
```
- **POST /media/image_generator**
- Headers: `Content-Type: application/json`
- Body:
```json
{ "blog_id": "string", "title": "string" }
```
- Response:
```json
{ "url": "string" } // oder { "imageUrl": "string" }
```
- Hinweis: `generateAIImage` ruft aktuell
- **POST /file_upload**
- Headers: `Content-Type: application/json`
- Body:
```json
{ "prompt": "string" }
```
- Response:
```json
{ "imageUrl": "string", ... }
```
- Anmerkung: Endpoint-Name wirkt untypisch für Image-Generation.
## Tools
- **POST /tools/speech2text**
- Body (FormData):
- `file`: Audio-Datei
- Response:
```json
{ "transcription": "string" } // oder "text", "result"
```
## Social Media
- **POST /socialmedia/post2event**
- Headers: `Content-Type: application/json`
- Body: frei, je nach Nutzungsfall (Payload für Generierung)
- Response: generierte Posts
- **POST /socialmedia/publish_post**
- Headers: `Content-Type: application/json`
- Body:
```json
{
"postId": "string",
"posts": { ... },
"images": { ... },
"scheduledTime": "string"
}
```
- Response: Veröffentlichungs-Ergebnis
## Gemeinsame Aspekte
- **Headers**
- `Content-Type: application/json` bei JSON-Requests
- FormData-Uploads ohne explizites `Content-Type` (Browser setzt MultiPart)
- **Auth**
- Cookies via `credentials: 'include'`
- Optionaler Bearer-Token via `Authorization`
- Auto-Refresh bei 401 über `/auth/rnjwt`, danach Retry
- **Statuscodes**
- Client erwartet `response.ok === true` bei Erfolg, sonst Fehlerwurf
- **Variabilität**
- Einige Responses sind polymorph (Array oder Objekt). Umgang entsprechend im Client.
# Beispiel: apiFetch Verhalten
- Sendet automatisch Cookies
- Fügt `Authorization: Bearer <token>` hinzu, wenn verfügbar
- Bei 401:
- versucht `GET /auth/rnjwt`
- wiederholt Request mit neuem Token
- bei erneutem 401: Logout und Fehlermeldung