Hub/Gateway (und Plain UI Frontend)
Der Hub besteht aus mehreren Komponenten welche für unterschiedliche Funktionen gedacht sind
- Backoffice: Erfassung und Verwaltung von Informationen inkl. Bearbeitung von Reports
- PlainUI: Es handelt sich um eine Darstellung der Konferenz-Inhalte als simples Frontend ohne viel Schnick-Schnack.
- Produktiv-Instanz: https://events.ccc.de/congress/2024/hub/
- Test-Instanz: https://plainui.staging.hub.c3events.de/
- Core: Beinhaltet die Datenmodelle und Funktionen, die sowohl im Backoffice als auch in der PlainUI verwendet werden.
- Metanav/Navbar (not published yet): Bietet eine von allen Seiten gemeinsam einbindbare Navigationsleiste im jeweiligen Congress-Design.
Datenmodell
als PDF: Grobes Datenmodell und automatisch exportiertes ER-Diagramm (kann Spuren von Unübersichtlichkeit enthalten)
PlainUi Structure
- jinja2/plainui
- components
- tbd.
- styles
- components: components styles, die in
hub.scss
eingebunden werden - utils: settings, die selbst keinen output generieren (z.B. Variablen, Mixins), damit sie in unterschiedlichen files verwendet werden können
-
hub.scss
: Hauptdatei, welche anschließend in CSS konvertiert wird
- components: components styles, die in
- static/plainui
- img: statische Bilder
- fonts: importierte Schriften
- das generierte CSS
REST API
Grundsätzlich sind alle hier aufgeführten Endpoints per GET abrufbar (Restriktionen bei nicht-öffentlichen Events, etc. sind möglich). Manche Endpunkte sind zusätzlich "schreibbar" und können zur Anlage bzw. Bearbeitung der jeweiligen Daten genutzt werden.
Testinstanz: https://hub.test.c3voc.de/api/ / https://staging.hub.c3events.de/api/
Prodinstanz: https://api.events.ccc.de/congress/2024/
Kategorie | Endpunkt | GET | POST | PUT | DEL | Beschreibung |
---|---|---|---|---|---|---|
Auth | /auth/get-token |
x | Ausstellen eines API-Tokens | |||
Persönlich | /me |
x | x | eigenes Profil / Settings | ||
Persönlich | /me/badges |
x | Liste aller Badges/Achievements | |||
Persönlich | /me/events |
x | Favorisierte Events | |||
Persönlich | /me/events/<uuid>/ |
x | x | Events (ent-)favorisieren | ||
Persönlich | /me/friends |
x | x | x | Liste der Buddies | |
Persönlich | /me/received-messages/ |
x | Übersicht empfangener PN | |||
Persönlich | /me/received-messages/<uuid> |
x | Details einer empfangenen PN | |||
Persönlich | /me/send-message |
x | Send a new PN | |||
Persönlich | /me/sent-messages/ |
x | Übersicht gesendeter PN | |||
Persönlich | /me/sent-messages/<uuid> |
x | Details einer gesendeten PN | |||
Persönlich | /me/delete-message/<uuid> |
x | PN löschen | |||
Konferenz | / |
x | Metadaten des Konferenz | |||
Konferenz | /tags |
x | Liste aller Tags auf der Konferenz | |||
Konferenz | /tracks |
x | x | Liste der Tracks | ||
Konferenz | /track/<slug>/ |
x | x | x | Details des Tracks | |
Konferenz | /assemblies |
x | x | Liste der Assemblies | ||
Konferenz | /assembly/<slug>/ |
x | x | x | Details der Assembly | |
Konferenz | /assembly/<slug>/events |
x | x | Liste der Events der Assembly | ||
Konferenz | /assembly/<slug>/rooms |
x | x | Liste der Räume der Assembly | ||
Konferenz | /rooms |
x | Liste aller Räume (über alle Assemblies). | |||
Konferenz | /room/<uuid>/ |
x | Details des Raums | |||
Konferenz | /events |
x | Liste aller Events | |||
Konferenz | /event/<uuid>/ |
x | x | x | Details des Events als Hub Event JSON | |
Konferenz | /event/<uuid>/schedule[.json] |
x | x | x | Details des Events als Schedule JSON | |
Konferenz | /event/<uuid>/attachments |
x | x | Anhänge | ||
Konferenz | /event/<uuid>/attachments/<id>/ |
x | x | x | Download der zugehörigen Datei | |
Konferenz | /schedule[.xml|.json] |
x | Liste aller Events als Schedule XML/JSON | |||
Konferenz | /assembly/<slug>/schedule[.xml|.json] |
x | Liste aller Events der Assembly als Schedule XML/JSON | |||
Konferenz | /room/<uuid>/schedule[.xml|.json] |
x | Liste aller Events des Raumes als Schedule XML/JSON |
Per POST werden neue Einträge angelegt, per PUT bestehende verändert. Details zu den einzelnen Endpunkten folgen in Kürze™.
API-Beispiel mit cURL
Zuerst einen Token generieren:
curl https://{API_URL}/api/auth/get-token -H "Content-Type: application/json" -X POST --data '{"username": "{USERNAME}", "passwort": "{PASSWORD}"}'
Mit diesem Token können dann Endpunkte aufgerufen werden die eine Authentifizierung erfordern:
curl https://{API_URL}/api/me -H "Content-Type: application/json" -H "Authorization: Token {API_TOKEN}"
Development
see Development.md