Thema:
Hab das schonmal angefangen ^^ flat
Autor: mat
Datum:09.02.22 17:48
Antwort auf:Zur Zukunft des Forums und eine Bitte von Rocco

Ist eines dieser weiter unten genannten Privatprojekte, die aller Wahrscheinlichkeit nach niemals fertig werden. ^^
Zudem bin ich Frontendler, und ich wollte mit dem Projekt mal meine Backend-Kenntnisse erweitern bzw überhaupt erst gründen, da ich bisher nur ein bisschen PHP gemacht hab. Deswegen übernehme ich fürs Backend nur eingeschränkt Verantwortung, bzw ist das eine oder andere etwas hemdsärmelig oder gar gänzlich bescheuert gelöst.
Und vom Frontend gibt es noch nicht superviel, habe mich da aufs Anzeigen der nackten Daten beschränkt und noch nichts auf Style/Design gegeben.

@Rocco, du kannst dich selbstverständlich gerne an Code/Struktur/Technologieauswahl bedienen. Hab schon mitgekriegt, dass dein geplanter Technologiestack nicht besonders deckungsgleich mit dem in meinem Projekt ist, aber vielleicht ist das ja doch irgendwo nützlich.

Aktuellster Stand findet sich hier: [https://github.com/mehtmehtsen/maniacforum2/tree/passportjs]

Kurze Beschreibung:

Die Readme ist natürlich alles andere als aktuell (alles unter "State"), aber die Anleitungen, die ich größtenteils für mein zukünftiges Ich geschrieben habe, sollten so funktionieren wie beschrieben.

Was schon geht
- Anzeigen von Boards, Freds, Nachrichtenbäumen und Nachrichten aus der DB in einem Barebone-FE
- Registrierung inkl. Versenden von Mail zur Adressen-Verifizierung

Was noch nicht geht (unvollständig)
- Login/Authentifizierung
- Posten und Editieren
- Profil ausfüllen
- alles andere

Ops
Hab für das Projekt das erste Mal selbst eine docker-compose.yml aufgesetzt. Es werden Container mit Frontend (Angular), Backend (Node mit expressjs), Datenbank (Postgres) und PGAdmin gestartet.

Datenbank
Die aktuelle Datenbank-Struktur ist in maniacforum2-stitch-no-threads.pgerd beschrieben. Aus der pgerd kriege ich auch direkt das SQL für die Tabellen erzeugt. Wäre schön, wenn die Tabellen mal automatisch aufgesetzt würden, aktuell muss man dafür z.B. in pgadmin das SQL in initial_db_setup.sql (nackte Tabellen) und dann initial_db_setup_ltree_and_mock.sql (installiert die ltree-Erweiterung, erstellt Mock-Boards/-Threads/-Nachrichten und noch ein paar Spalten in bestehenden Tabellen) ausführen.
Die Nachrichten in der Postgres-DB haben alle einen ltree-Pfad ([https://www.postgresql.org/docs/9.1/ltree.html]). Ich hatte mir vorgestellt, dass damit das Umhängen von Nachrichten inkl der Antworten supereinfach wäre und man sogar problemlos einzelne Äste oder Unteräste isoliert anzeigen könnte, falls das Feature jemanden juckt.
Threads sind bei mir btw ganz normale Nachrichten, deren Parent 'Null' ist.

Backend
Im Backend läuft ein express-Server, der OpenAPI-Endpoints bereitstellt, die wiederum anhand von tsoa ([https://github.com/lukeautry/tsoa]) geschrieben sind. Das bedeutet, dass automatisch eine API-Definition (swagger.json) generiert wird, aus der ich in meinem Angular-FE ohne weiteres einen API-Service generieren kann. Obendrein wird eine Swagger-UI zur Dokumentation und zum Testen der Endpoints zur Verfügung gestellt.
Mit der Datenbank rede ich mit handelsüblichen SQL-Anfragen. Das wäre mit ORM eventuell schöner und einfacher, ich wollte aber zumindest auch mal etwas meine SQL-Kenntnisse auffrischen, bevor ich das wegabstrahiere.
Bin gerade im Begriff, die Registrierung zu implementieren: Das Backend kriegt Benutzernamen, PW und Email-Adresse vom FE, speichert den inaktiven User in einer und ein Token für die Email-Verifizierung zusammen mit der User-ID in einer anderen Tabelle und schickt eine URL mit dem Token als URL-Parameter an die eingegebene Email-Adresse. Klickt der Nutzer den Link in der Mail, wird sein Account aktiviert. Nächster Schritt soll die Authentifizierung per passportjs sein, da gibt es aber noch nix.

Frontend
Angular. Es gibt einen per ng-openapi-gen aus der swagger.json generierten API-Service, mit dem ich die Boards, Freds und Nachrichten anzeigen kann. Unter /register kann man seine Registrierungs-Kredenzialien ans BE schicken. Zuletzt saß ich an der  Implementierung einer (Barebone, wie immer) VerifyComponent, die das Token aus der URL nimmt und damit beim BE den Account aktiviert. Dann käm wie gesagt der Login und das Auth, und dann Posten und Editieren.


Freue mich grundsätzlich über Feedback nicht nur von Rocco, falls hier mal jemand (besonders mit BE-Kenntnissen) über den mutmaßlich hanebüchenen Code schauen will. ^^

Davon ab gilt der obligatorische Dank natürlich Rocco, dass er die Zeit für die Neu-Implementierung aufbringen will. Ich bin alles andere als ein Full-Stack-Entwickler, deswegen zählt meine Meinung besonders in BE-Dingen wenig, aber durch dieses Spaßprojekt hab ich einen ungefähren Eindruck davon, was da auf ihn zukommt.

Ich helfe prinzipiell gerne (besonders im FE) bei allem, was anfällt. Das sklavische Nachbauen eines Skins mit Vorlage "Originales Maniac-Forum" stelle ich mir schon sehr spaßig vor. Brutalismus ist ja auch bei Webseiten voll in. :D
Man kann mir jedenfalls gerne PMs schicken, wenn ich was tun kann.

Natürlich würde ich mich auch freuen, fürs neue Forum zumindest ein Frontend beizusteuern. Mein Maniac-"Skin" ([https://maniac.komeht.de]) hat ja schon den augenzwinkernden Hintergedanken, dass weniger bewanderte Arbeitgeber und Kollegen erst auf den zweiten Blick sehen, dass das Forum auf dem Bildschirm gar kein Code-Editor ist - und sollte dereinst mal eine frische API mit frischem Unterbau stehen, wird es definitiv Zeit für ein maniac2.komeht.de. Dann auch mit einer IDE als grafisches Vorbild, die ich heute noch benutze (damals war das halt Sublime Text, heute VS Code). ^^


< antworten >