EtherToDo

EtherToDo will be a todo list in the style of etherpad (WIP)

Published on 15 Jan, 2021


This article will constantly be updated.

When I used etherpad the first time, I was really amazed of this tool and the websocket technology.
I like to organise me with boards and todo lists, so I saw a benefit in a todo list in the style of ehterpad.

Backend git repository: ether_todo_service
Frontend git repository: ether_todo_webui

Goals

  • Everyone can create todo lists with out a registration or login.
  • Everyone on the url can read and edit the todo list. (Maybe later there will be a readonly mode)
  • It is possible to chat with other people on the given url.
  • If a todo list was not edited in a given time it will be deleted.
  • If someone create a new todo list with the same name like an existance, the existance todo list will be overriden.
  • Written text will be like etherpad marked with the color of user.
  • Todo tasks are colored in the color of the responsible user.

Status

Current status of the project:

Creation of the list in possible in backend and frontend.
Currently I am at the implementing on the todo list description, my first usage with websocket, so it needs a bit more time.
After the todo list description is working, I will implement the creation of todo tasks.

Technology

I wanted to try out a few technologies, mainly golang and websockets.
The most time, I used for trying out golang libraries and tools.
Also I wanted to implemented an application with the onion architecture, so I decide to use this architecture for the service.
My knowledge about web application development was are a bit outdated, so I want to use one of the three big web frameworks. (I decide to use vuejs).
Furthermore, I want to use CSS flexbox and maybe I will find some other interesting stuff.

Backend

As I said, the backend is already implemented in golang, after try out a lot of web frameworks and libraries, I decide to use echo.
Echo has a few very good features like centralized error handling, auto tls, logger middleware and of course websocket support.
I found httpexpect to write integration tests which use the rest API, so my integration tests are implemented with httpexpect.

I like and use daily dependency injection, so I was looking for a solution in go.
First I found fx, since uber has published many go libraries and has a good style guide I would definitely try it out.
However, I also wanted to try wire.
I was so amazed from the usage and that there are no runtime operations that I decide to use it.

To save my data I am usual using an ORM, so I was looking for an orm for go and found gorm.
Since I was not so convinced I have searched for alternatives, I tried a lot of libraries and standard functionalities.
In my opinon sqlc is very interesting, but I dont want to write queries for simple CRUD.
Thats why I decided to use gorm after all, maybe I will replace gorm with another solution.
The components of my application are loosely coupled, so the replacing of components does not require so much work.

Web application

The web frontend is a single page application implemented in vuejs.
I use typescript instead of javascript, however the frontend do not more actually except a few rest calls, so I am not using the full potential of typescript. As CSS framework bootstrap is used.
Next I will use an input validation for vue, there a few existence libraries.