EtherToDo

EtherToDo ist eine ToDo-Liste im stil von etherpad (WIP)

Veröffentlicht am 15 Jan, 2021


Dieser Artikel wird dauerhaft geupdated.

Als ich das erste Mal etherpad benutzte, war ich ziemlich begeistert von dem Programm und der websocket Technologie.
Ich organisiere mich gerne mit Boards und ToDo-Liste, daher dachte ich, eine ToDo-Liste im Stile von ehterpad macht Sinn.

Backend git repository: ether_todo_service
Frontend git repository: ether_todo_webui

Ziele

  • Jede:r kann ToDo-Listen erstellen, ohne sich zu registrieren oder einzuloggen
  • Jede:r auf der ToDo-Liste kann lesen und bearbeiten. (Später wird vielleicht ein readonly modus hinzugefügt)
  • Es kann mit den anderen Personen auf der ToDo-Liste gechattet werden.
  • Wenn die ToDo-Liste in einer gegebenen Zeit nicht bearbeitet wird, wird sie gelöscht.
  • Wenn eine neue ToDo-Liste mit einem bestehenden Namen erstellt wird, wird die bestehende ToDo-Liste überschrieben und die Aufgaben gelöscht.
  • Aufgaben werden in der Farbe des Umsetzers gefärbt.

Status

Aktueller Stand des Projektes:

Erstellung von ToDo-Listen ist im Backend und Frontend möglich.
Zur Zeit arbeite ich an der Implementierung der Beschreibung von ToDo-Listen, ich benutze gerade zum ersten Mal Websockets, deshalb braucht es etwas mehr Zeit.
Nachdem ich die ToDo-Listen Beschreibung fertiggestellt habe, will ich die Erstellung von Aufgaben implementieren.

Technologien

Ich wollte einige neue Technologien ausprobieren, hauptsächlich golang und websockets.
Die meiste Zeit habe ich verwendet, um go und Bibliotheken von go auszuprobieren und damit rumzuspielen.
Des Weiteren wollte ich mal eine Anwendung in einer Onion-Architektur implementieren, deshalb entschied ich mich diese im Backend zu verwenden.
Mein Wissen über Webanwendungen ist etwas veraltet, aus diesem Grund wollte ich eines der drei großen Web Frameworks benutzen. Ich habe mich für vuejs entschieden.
Außerdem wollte ich CSS-Flexbox verwenden und vielleicht finde ich noch mehr interessante Bibliotheken.

Backend

Wie schon gesagt, ist das backend in go implementiert. Nachdem ich einige Bibliotheken ausprobiert habe, habe ich mich für echo entschieden.
Echo hat einige gute Features wie ein zentralisiertes error handling, automatisches tls, eine logger middleware und natürlich websocket support.
Ich habe httpexpect gefunden und implementiere meine Integrations Tests damit.

Ich mag und benutze täglich dependency injection, deshalb habe ich nach einer Bibliothek in go gesucht.
Als erstes habe ich fx gefunde, da uber eine Menge go Bibliotheken veröffentlicht hat und einen meiner Meinung nach einen guten style guide, wollte ich fx ausprobieren.
Jedoch wollte ich auch wire testen.
Ich bin sehr begeistert von der Benutzung und davon das nichts zur Laufzeit generiert wird, also habe ich mich entschieden wire zu benutzen.

Um Daten in der Datenbank zu speichern, benutze ich normalerweise ein ORM, also habe ich nach einem ORM für go gesucht und gorm gefunden.
Gorm hat mich nicht wirklich überzeugt also habe ich nach Alternativen gesucht. Ich habe einige Bibliotheken ausprobiert und die Standartfunktion.
Ich fand sqlc sehr interessant, aber habe ich nicht vor für CRUD operationen Queries zu schreiben, deshalb habe ich mich vorerst doch für Gorm entschieden, in Zukunft ersetze ich es vielleicht mit einer anderen Lösung.
Die Komponenten meiner Anwendung sind lose gekoppelt, deshalb kann ich sie ohne großen Aufwand ersetzen.

Web application

Die Webanwendung ist eine Single Page Application. Sie wird in vuejs implementiert.
Anstatt javascript benutze ich typescript, da aber im Frontend aktuell nicht mehr als ein paar Rest Aufrufe passieren, schöpfe ich nicht das volle Potenzial aus.
Als CSS Framework benutze ich bootstrap.