204 lines
4.9 KiB
Markdown
204 lines
4.9 KiB
Markdown
# Linux Distro Roguelite Promotion API
|
|
|
|
REST-API fuer eine Pre-Register-Page eines kostenlosen Games. Spieler registrieren sich mit Benutzername und E-Mail, waehlen Plattformen aus und schalten ueber Community-Meilensteine Belohnungen frei.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Start
|
|
|
|
```bash
|
|
ADMIN_KEY=secret npm start
|
|
```
|
|
|
|
Unter PowerShell:
|
|
|
|
```powershell
|
|
$env:ADMIN_KEY = "secret"
|
|
npm start
|
|
```
|
|
|
|
Der Server laeuft standardmaessig auf Port `3000`. Mit `PORT` kann der Port ueberschrieben werden.
|
|
|
|
```powershell
|
|
$env:PORT = "4000"
|
|
$env:ADMIN_KEY = "secret"
|
|
npm start
|
|
```
|
|
|
|
Beim ersten Start wird `database.sqlite` erstellt und automatisch mit diesen Daten befuellt:
|
|
|
|
- Plattformen: PC, PlayStation, Xbox, Nintendo Switch, Mobile
|
|
- Meilensteine: 1,000 und 5,000 Community-Registrierungen
|
|
- Je eine Beispiel-Belohnung pro Meilenstein
|
|
|
|
Alle Fehler haben das Format:
|
|
|
|
```json
|
|
{ "error": "beschreibende Meldung" }
|
|
```
|
|
|
|
## Endpunkte
|
|
|
|
### Health Check
|
|
|
|
```bash
|
|
curl http://localhost:3000/
|
|
```
|
|
|
|
### Benutzer
|
|
|
|
`POST /users` erstellt einen neuen vorregistrierten Nutzer.
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3000/users \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"username\":\"tuxrunner\",\"email\":\"tux@example.com\",\"newsletter_optin\":true}"
|
|
```
|
|
|
|
`GET /users/{id}` ruft ein Nutzerprofil ab.
|
|
|
|
```bash
|
|
curl http://localhost:3000/users/1
|
|
```
|
|
|
|
`PUT /users/{id}` aktualisiert beliebige Teilfelder.
|
|
|
|
```bash
|
|
curl -X PUT http://localhost:3000/users/1 \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"username\":\"tuxrunner2\",\"newsletter_optin\":false}"
|
|
```
|
|
|
|
`DELETE /users/{id}` loescht den Nutzer und dessen Plattform-Registrierungen.
|
|
|
|
```bash
|
|
curl -X DELETE http://localhost:3000/users/1
|
|
```
|
|
|
|
### Plattformen
|
|
|
|
`GET /platforms` ruft alle Plattformen ab.
|
|
|
|
```bash
|
|
curl http://localhost:3000/platforms
|
|
```
|
|
|
|
`GET /platforms/{id}` ruft eine einzelne Plattform ab.
|
|
|
|
```bash
|
|
curl http://localhost:3000/platforms/1
|
|
```
|
|
|
|
### Registrierungen
|
|
|
|
`POST /registrations` registriert einen Nutzer fuer eine Plattform. Nach jedem erfolgreichen Request werden erreichte Meilensteine automatisch aktualisiert.
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3000/registrations \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"user_id\":1,\"platform_id\":1}"
|
|
```
|
|
|
|
`GET /registrations/count` liefert die Gesamtzahl aller Plattform-Registrierungen.
|
|
|
|
```bash
|
|
curl http://localhost:3000/registrations/count
|
|
```
|
|
|
|
`GET /users/{id}/registrations` ruft alle Plattform-Registrierungen eines Nutzers inklusive Plattformname ab.
|
|
|
|
```bash
|
|
curl http://localhost:3000/users/1/registrations
|
|
```
|
|
|
|
`DELETE /registrations/{id}` loescht eine einzelne Plattform-Registrierung.
|
|
|
|
```bash
|
|
curl -X DELETE http://localhost:3000/registrations/1
|
|
```
|
|
|
|
### Meilensteine
|
|
|
|
`GET /milestones` ruft alle Meilensteine ab. Jeder Eintrag enthaelt `current_count` und `progress`, wobei `progress` bei 100 gedeckelt ist.
|
|
|
|
```bash
|
|
curl http://localhost:3000/milestones
|
|
```
|
|
|
|
`POST /milestones` erstellt einen Meilenstein. Admin-Key erforderlich.
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3000/milestones \
|
|
-H "Content-Type: application/json" \
|
|
-H "X-Admin-Key: secret" \
|
|
-d "{\"title\":\"10,000 community registrations\",\"target_count\":10000}"
|
|
```
|
|
|
|
`PUT /milestones/{id}` aktualisiert beliebige Teilfelder. Admin-Key erforderlich.
|
|
|
|
```bash
|
|
curl -X PUT http://localhost:3000/milestones/1 \
|
|
-H "Content-Type: application/json" \
|
|
-H "X-Admin-Key: secret" \
|
|
-d "{\"title\":\"1,000 pre-registrations\",\"reached\":false}"
|
|
```
|
|
|
|
`DELETE /milestones/{id}` loescht einen Meilenstein und dessen Belohnungen. Admin-Key erforderlich.
|
|
|
|
```bash
|
|
curl -X DELETE http://localhost:3000/milestones/1 \
|
|
-H "X-Admin-Key: secret"
|
|
```
|
|
|
|
### Belohnungen
|
|
|
|
`GET /rewards` ruft alle Belohnungen ab.
|
|
|
|
```bash
|
|
curl http://localhost:3000/rewards
|
|
```
|
|
|
|
`GET /milestones/{id}/rewards` ruft Belohnungen eines Meilensteins ab.
|
|
|
|
```bash
|
|
curl http://localhost:3000/milestones/1/rewards
|
|
```
|
|
|
|
`POST /rewards` erstellt eine Belohnung. Admin-Key erforderlich.
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3000/rewards \
|
|
-H "Content-Type: application/json" \
|
|
-H "X-Admin-Key: secret" \
|
|
-d "{\"milestone_id\":1,\"name\":\"Beta Hat\",\"description\":\"Cosmetic launch hat\",\"image_url\":\"https://example.com/rewards/beta-hat.png\"}"
|
|
```
|
|
|
|
`PUT /rewards/{id}` aktualisiert beliebige Teilfelder. Admin-Key erforderlich.
|
|
|
|
```bash
|
|
curl -X PUT http://localhost:3000/rewards/1 \
|
|
-H "Content-Type: application/json" \
|
|
-H "X-Admin-Key: secret" \
|
|
-d "{\"description\":\"Updated reward description\"}"
|
|
```
|
|
|
|
`DELETE /rewards/{id}` loescht eine Belohnung. Admin-Key erforderlich.
|
|
|
|
```bash
|
|
curl -X DELETE http://localhost:3000/rewards/1 \
|
|
-H "X-Admin-Key: secret"
|
|
```
|
|
|
|
## Statuscodes
|
|
|
|
- `200`: Erfolgreiche Abfrage, Aktualisierung oder Loeschung
|
|
- `201`: Ressource erstellt
|
|
- `400`: Ungueltige Eingaben oder nicht existierende Fremdschluessel
|
|
- `401`: Fehlender oder falscher Admin-Key
|
|
- `404`: Ressource oder Route nicht gefunden
|
|
- `409`: Konflikt, z. B. doppelte E-Mail, doppelter Benutzername oder doppelte Nutzer-Plattform-Kombination
|