148 lines
No EOL
7.7 KiB
Markdown
148 lines
No EOL
7.7 KiB
Markdown
# Featurecreep
|
|
|
|
This is the place where I write down ideas to work on at some point.
|
|
Sorry for some of them being in German, I'll tranlate them at some point.
|
|
|
|
## Feature-Ideen
|
|
|
|
* [x] Priorities
|
|
* [x] Repeating tasks
|
|
* [x] Tagesübersicht ("Was ist heute/diese Woche due?") -> Machen letztenendes die Clients, wir brauchen nur nen endpoint, der alle tasks auskotzt, der Client macht dann die Sortierung.
|
|
* [x] Subtasks
|
|
|
|
## Anderes
|
|
|
|
* [x] Refactor!!!! Alle Funktionen raus, die nicht mehr grbaucht werden + Funktionen vereinfachen/zusammenführen.
|
|
Wenn ein Objekt 5x hin und hergereicht wird, und jedesmal nur geringfügig was dran geändert wird sollte das
|
|
doch auch in einer Funktion machbar sein.
|
|
* [x] ganz viel in eigene neue Dateien + Packages auslagern, am besten eine package pro model mit allen methoden etc.
|
|
* [x] Alle alten dinger die nicht mehr gebraucht werden, weg.
|
|
* [x] Die alten handlerfunktionen alle in eine datei packen und erstmal "lagern", erstmal brauchen wir die noch für swagger.
|
|
* [x] Drone aufsetzen
|
|
* [x] Tests schreiben
|
|
* [x] Namen finden
|
|
* [x] Alle Packages umziehen
|
|
* [x] Swagger UI aufsetzen
|
|
+ [x] CORS fixen
|
|
* [x] Überall echo.NewHTTPError statt c.JSON(Message{}) benutzen
|
|
* [x] Bessere Fehlermeldungen wenn das Model was ankommt falsch ist und nicht geparst werden kann
|
|
* [x] Fehlerhandling irgendwie besser machen. Zb mit "World error messages"? Sprich, die Methode ruft einfach auf obs die entsprechende Fehlermeldung gibt und zeigt sonst 500 an.
|
|
* [x] Viper für config einbauen und ini rauswerfen
|
|
* [x] Docs für installationsanleitung
|
|
* [x] Tests für Rechtekram
|
|
* [x] "Apiformat" Methoden, damit in der Ausgabe zb kein Passwort drin ist..., oder created/updated von Nutzern... oder ownerID nicht drin ist sondern nur das ownerobject
|
|
* [x] Rechte überprüfen:
|
|
* [x] Listen erstellen
|
|
* [x] Listen bearbeiten (nur eigene im Moment)
|
|
* [x] Listenpunkte hinzufügen
|
|
* [x] Listenpunkte bearbeiten
|
|
* [x] Der -1 namespace sollte auch seperat angesprochen werden können, gibt sonst probleme mit der app.
|
|
|
|
### Short Term
|
|
|
|
* [x] Cacher konfigurierbar
|
|
* [x] Wenn die ID bei irgendeiner GetByID... Methode < 1 ist soll ein error not exist geworfen werden
|
|
* [x] /users sollte die Rechte mit ausgeben
|
|
* [x] Nen endpoint um /teams/members /list/users etc die Rechte updazudaten ohne erst zu löschen und dann neu einzufügen
|
|
* [x] namespaces & listen updaten geht nicht, gibt nen 500er zurück
|
|
* [x] Logging für alle Fehler irgendwohin, da gibts bestimmt ne coole library für
|
|
* [x] Ne extra funktion für list exists machen, damit die nicht immer über GetListByID gehen, um sql-abfragen zu sparen
|
|
* [x] Rausfinden warum xorm teilweise beim einfügen IDs mit einfügen will -> Das schlägt dann wegen duplicate fehl
|
|
* [x] Bei den Structs "AfterLoad" raus, das verbraucht bei Gruppenabfragen zu viele SQL-Abfragen -> Die sollen einfach die entsprechenden Read()-Methoden verwenden (Krassestes bsp. ist GET /namespaces mit so ca 50 Abfragen)
|
|
* [x] General search endpoints
|
|
* [x] Validation der ankommenden structs, am besten mit https://github.com/go-validator/validator oder mit dem Ding von echo
|
|
* [x] Pagination
|
|
* Sollte in der Config definierbar sein, wie viel pro Seite angezeigt werden soll, die CRUD-Methoden übergeben dann ein "gibt mir die Seite sowieso" an die CRUDable-Funktionenen, die müssen das dann Auswerten. Geht leider nicht anders, wenn man erst 2342352 Einträge hohlt und die dann nachträglich auf 200 begrenzt ist das ne massive Ressourcenverschwendung.
|
|
* [x] Testen, ob man über die Routen methode von echo irgendwie ein swagger spec generieren könnte -> Andere Swagger library
|
|
* [ ] CalDAV
|
|
* [x] Basics
|
|
* [x] Reminders
|
|
* [ ] Discovery, stichwort PROPFIND
|
|
* [x] Wir brauchen noch ne gute idee, wie man die listen kriegt, auf die man nur so Zugriff hat (ohne namespace)
|
|
* Dazu am Besten nen pseudonamespace anlegen (id -1 oder so), der hat das dann alles
|
|
* [x] Testing mit locust: https://locust.io/
|
|
|
|
#### Userstuff
|
|
|
|
* [x] Userstuff aufräumen
|
|
-> Soweit es geht und Sinnvoll ist auf den neuen Handler umziehen
|
|
-> Login/Register/Password-reset geht natürlich nicht
|
|
-> Bleibt noch Profile abrufen und Einstellungen -> Macht also keinen Sinn das auf den neuen Handler umzuziehen
|
|
* [x] Email-Verifizierung beim Registrieren
|
|
* [x] Password Reset -> Link via email oder so
|
|
* [ ] Settings
|
|
* [ ] Password update
|
|
* [ ] Email update
|
|
* [ ] Ob man über email oder Benutzernamen gefunden werden darf
|
|
|
|
### Bugfixes
|
|
|
|
* [x] Panic wenn mailer nicht erreichbar -> Als workaround mailer deaktivierbar machen, bzw keine mails verschicken
|
|
* [x] "unexpected EOF"
|
|
* [x] Beim Login & Password reset gibt die API zurück dass der Nutzer nicht existiert
|
|
|
|
### Docs
|
|
|
|
* [ ] Bauanleitung in die Readme/docs
|
|
* [x] Auch noch nen "link" zum Featurecreep
|
|
* [x] Redocs
|
|
* [x] Swaggerdocs verbessern
|
|
* [x] Descriptions in structs
|
|
* [x] Maxlength specify etc. (see swaggo docs)
|
|
* [x] Rights
|
|
* [x] API
|
|
* [ ] Anleitung zum Makefile
|
|
* [ ] Struktur erklären
|
|
* [ ] Deploy in die docs
|
|
* [ ] Docker
|
|
* [ ] Native (systemd + nginx/apache)
|
|
* [ ] Backups
|
|
* [ ] Docs aufsetzen
|
|
|
|
### Tasks
|
|
|
|
* [x] Start/Enddatum für Tasks
|
|
* [x] Timeline/Calendar view -> Dazu tasks die in einem Bestimmten Bereich due sind, macht dann das Frontend
|
|
* [x] Tasks innerhalb eines definierbarem Bereich, sollte aber trotzdem der server machen, so à la "Gib mir alles für diesen Monat"
|
|
* [x] Bulk-edit -> Transactions
|
|
* [x] Assignees
|
|
* [ ] Wegen Performance auf eigene endpoints umziehen, wie labels
|
|
* [x] Labels
|
|
* [ ] Attachments
|
|
* [ ] Task-Templates innerhalb namespaces und Listen (-> Mehrere, die auswählbar sind)
|
|
* [ ] Ein Task muss von mehreren Assignees abgehakt werden bis er als done markiert wird
|
|
* [ ] Besseres Rechtesystem, damit man so fine-graded sachen machen kann wie "Der da darf aber nur Tasks hinzufügen, aber keine abhaken"
|
|
|
|
### General features
|
|
|
|
* [x] Deps nach mod umziehen
|
|
* [ ] Performance bei rechtchecks verbessern
|
|
* User & Teamright sollte sich für n rechte in einer Funktion testen lassen
|
|
* [ ] Globale Limits für anlegbare Listen + Namespaces
|
|
* [ ] "Smart Lists", Listen nach bestimmten Kriterien gefiltert -> nur UI?
|
|
* [ ] "Performance-Statistik" -> Wie viele Tasks man in bestimmten Zeiträumen so geschafft hat etc
|
|
* [ ] IMAP-Integration -> Man schickt eine email an Vikunja und es macht daraus dann nen task -> Achtung missbrauchsmöglichkeiten
|
|
* [ ] In und Out webhooks, mit Templates vom Payload
|
|
* [ ] Reminders via mail
|
|
* [ ] Activity Feed, so à la "der und der hat das und das gemacht etc"
|
|
* [ ] ~~Websockets~~ SSE https://github.com/kljensen/golang-html5-sse-example
|
|
* User authenticates (with jwt)
|
|
* When updating/creating/etc an event struct is sent to the broker
|
|
* The broker has a list of subscribed users
|
|
* It then checks who is allowed to the see the event it recieved and sends it
|
|
* [ ] Mgl., dass die Instanz geschlossen ist, also sich keiner registrieren kann, und man sich einloggen muss
|
|
* [ ] mgl. zum Emailmaskieren haben (in den Nutzereinstellungen, wenn man seine Email nicht an alle Welt rausposaunen will)
|
|
* [ ] Mgl. zum Accountlöschen haben (so richtig krass mit emailverifiezierung und dass alle Privaten Listen gelöscht werden und man alle geteilten entweder wem übertragen muss oder auf privat stellen)
|
|
* [ ] /info endpoint, in dem dann zb die limits und version etc steht
|
|
* [ ] Deprecate /namespaces/{id}/lists in favour of namespace.ReadOne() <-- should also return the lists
|
|
* [ ] Description of web.HTTPError
|
|
* [ ] Rights methods should return errors
|
|
* [ ] Re-check all `{List|Namespace}{User|Team}` if really all parameters need to be exposed via json or are overwritten via param anyway.
|
|
|
|
### Linters
|
|
|
|
* [x] goconst
|
|
* [ ] Gosimple -> waiting for mod
|
|
* [ ] Staticcheck -> waiting for mod
|
|
* [ ] unused -> waiting for mod
|
|
* [ ] gosec -> waiting for mod |