vikunja-api/Featurecreep.md

208 lines
9.9 KiB
Markdown
Raw Normal View History

2018-06-10 15:32:25 +02:00
# Featurecreep
2018-12-25 21:29:16 +01:00
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.
2018-09-07 08:24:15 +02:00
2018-09-12 22:59:45 +02:00
## Feature-Ideen
2018-06-10 15:32:25 +02:00
2018-12-02 01:49:30 +01:00
* [x] Priorities
2018-11-26 21:24:00 +01:00
* [x] Repeating tasks
2018-11-06 23:09:54 +01:00
* [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.
2018-12-02 01:49:30 +01:00
* [x] Subtasks
2018-06-10 15:32:25 +02:00
2018-06-12 19:57:48 +02:00
## Anderes
2018-11-06 23:09:54 +01:00
* [x] Refactor!!!! Alle Funktionen raus, die nicht mehr grbaucht werden + Funktionen vereinfachen/zusammenführen.
2018-08-29 08:02:12 +02:00
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.
2018-11-06 23:09:54 +01:00
* [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.
2018-07-25 21:47:26 +02:00
* [x] Drone aufsetzen
2018-09-06 19:01:13 +02:00
* [x] Tests schreiben
* [x] Namen finden
2018-07-25 21:47:26 +02:00
* [x] Alle Packages umziehen
* [x] Swagger UI aufsetzen
2018-09-07 22:49:16 +02:00
+ [x] CORS fixen
2018-07-12 23:47:50 +02:00
* [x] Überall echo.NewHTTPError statt c.JSON(Message{}) benutzen
2018-07-25 16:24:46 +02:00
* [x] Bessere Fehlermeldungen wenn das Model was ankommt falsch ist und nicht geparst werden kann
2018-10-06 15:08:38 +02:00
* [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.
2018-09-12 22:59:45 +02:00
* [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
2018-07-12 23:47:50 +02:00
* [x] Rechte überprüfen:
2018-08-29 08:02:12 +02:00
* [x] Listen erstellen
* [x] Listen bearbeiten (nur eigene im Moment)
* [x] Listenpunkte hinzufügen
* [x] Listenpunkte bearbeiten
2018-12-04 23:32:35 +01:00
* [x] Der -1 namespace sollte auch seperat angesprochen werden können, gibt sonst probleme mit der app.
2018-09-12 22:59:45 +02:00
### Short Term
2018-09-13 19:53:03 +02:00
* [x] Cacher konfigurierbar
* [x] Wenn die ID bei irgendeiner GetByID... Methode < 1 ist soll ein error not exist geworfen werden
2018-09-17 19:45:52 +02:00
* [x] /users sollte die Rechte mit ausgeben
2018-09-19 08:25:24 +02:00
* [x] Nen endpoint um /teams/members /list/users etc die Rechte updazudaten ohne erst zu löschen und dann neu einzufügen
2018-09-19 08:45:45 +02:00
* [x] namespaces & listen updaten geht nicht, gibt nen 500er zurück
2018-09-19 08:35:53 +02:00
* [x] Logging für alle Fehler irgendwohin, da gibts bestimmt ne coole library für
2018-10-06 15:08:38 +02:00
* [x] Ne extra funktion für list exists machen, damit die nicht immer über GetListByID gehen, um sql-abfragen zu sparen
2018-10-21 22:19:51 +02:00
* [x] Rausfinden warum xorm teilweise beim einfügen IDs mit einfügen will -> Das schlägt dann wegen duplicate fehl
2018-10-05 19:16:31 +02:00
* [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
2018-11-17 00:17:37 +01:00
* [x] Validation der ankommenden structs, am besten mit https://github.com/go-validator/validator oder mit dem Ding von echo
2018-11-09 11:30:17 +01:00
* [x] Pagination
2018-10-21 22:19:51 +02:00
* 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.
2018-11-17 00:17:37 +01:00
* [x] Testen, ob man über die Routen methode von echo irgendwie ein swagger spec generieren könnte -> Andere Swagger library
2018-11-06 23:09:54 +01:00
* [ ] 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)
2018-11-17 00:20:48 +01:00
* Dazu am Besten nen pseudonamespace anlegen (id -1 oder so), der hat das dann alles
2018-12-12 16:25:39 +01:00
* [x] Testing mit locust: https://locust.io/
2018-09-12 22:59:45 +02:00
2018-10-21 22:21:37 +02:00
#### Userstuff
2018-11-17 00:20:48 +01:00
* [x] Userstuff aufräumen
2018-10-21 22:21:37 +02:00
-> 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
2018-10-27 15:12:15 +02:00
* [x] Password Reset -> Link via email oder so
2018-10-22 22:20:45 +02:00
* [ ] Settings
2018-12-27 23:37:25 +01:00
* [ ] Password update
* [ ] Email update
* [ ] Ob man über email oder Benutzernamen gefunden werden darf
2018-11-03 16:05:45 +01:00
2018-12-14 17:45:31 +01:00
### Bugfixes
2018-12-19 22:05:25 +01:00
* [x] Panic wenn mailer nicht erreichbar -> Als workaround mailer deaktivierbar machen, bzw keine mails verschicken
* [x] "unexpected EOF"
2018-12-19 22:05:25 +01:00
* [x] Beim Login & Password reset gibt die API zurück dass der Nutzer nicht existiert
2018-12-14 17:45:31 +01:00
2018-12-12 23:56:00 +01:00
### Docs
2019-01-03 23:31:29 +01:00
* [ ] Readme
2018-12-27 23:37:25 +01:00
* [x] Auch noch nen "link" zum Featurecreep
2019-01-03 23:31:29 +01:00
* [ ] ToC
* [ ] Logo
* [ ] How to build -> Docs
* [ ] How to use -> Docs
* [ ] How to dev -> Docs
* [ ] License
* [ ] Contributing
2019-01-03 23:22:06 +01:00
* [x] Redocs
* [x] Swaggerdocs verbessern
* [x] Descriptions in structs
* [x] Maxlength specify etc. (see swaggo docs)
* [x] Rights
* [x] API
2018-12-12 23:56:00 +01:00
* [ ] Anleitung zum Makefile
* [ ] Struktur erklären
2019-01-03 23:31:29 +01:00
* [ ] How to build from source
* [ ] Dev instructions (tests, makefile, mod, structure, etc.)
2018-12-12 23:56:00 +01:00
* [ ] Deploy in die docs
* [ ] Docker
2018-12-27 23:37:25 +01:00
* [ ] Native (systemd + nginx/apache)
2019-01-03 23:22:06 +01:00
* [ ] Backups
2018-12-12 23:56:00 +01:00
* [ ] Docs aufsetzen
2018-10-21 22:21:37 +02:00
2018-12-27 23:37:25 +01:00
### Tasks
2018-09-12 22:59:45 +02:00
2018-12-22 19:06:14 +01:00
* [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"
2018-12-28 22:49:46 +01:00
* [x] Bulk-edit -> Transactions
2018-12-29 15:29:50 +01:00
* [x] Assignees
2019-01-08 20:13:07 +01:00
* [x] Check if something changed at all before running everything
* [x] Don't use `list.ReadOne()`, gets too much unnessecary shit
* [x] Wegen Performance auf eigene endpoints umziehen, wie labels
* [x] "One endpoint to rule them all" -> Array-addable
2018-12-31 02:18:41 +01:00
* [x] Labels
2019-01-10 00:08:12 +01:00
* [x] Check if something changed at all before running everything
* [x] Editable via task edit, like assignees
* [x] "One endpoint to rule them all" -> Array-addable
2018-12-12 16:25:39 +01:00
* [ ] Attachments
2018-12-18 15:35:20 +01:00
* [ ] Task-Templates innerhalb namespaces und Listen (-> Mehrere, die auswählbar sind)
2018-12-25 21:29:16 +01:00
* [ ] Ein Task muss von mehreren Assignees abgehakt werden bis er als done markiert wird
2018-12-27 23:37:25 +01:00
* [ ] 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
2018-12-31 02:18:41 +01:00
* [ ] Performance bei rechtchecks verbessern
* User & Teamright sollte sich für n rechte in einer Funktion testen lassen
2018-12-27 23:37:25 +01:00
* [ ] "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"
* [ ] Per list
* [ ] For the current user
2018-12-27 23:37:25 +01:00
* [ ] ~~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. 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)
2018-12-28 23:38:43 +01:00
* [ ] /info endpoint, in dem dann zb die limits und version etc steht
2019-01-03 23:22:06 +01:00
* [ ] Deprecate /namespaces/{id}/lists in favour of namespace.ReadOne() <-- should also return the lists
2018-12-28 23:15:05 +01:00
2019-01-10 00:08:12 +01:00
### Refactor
2019-01-14 22:49:50 +01:00
* [x] ListTaskRights, sollte überall gleich funktionieren, gibt ja mittlerweile auch eine Methode um liste von nem Task aus zu kriegen oder so
* [x] Re-check all `{List|Namespace}{User|Team}` if really all parameters need to be exposed via json or are overwritten via param anyway.
2019-01-14 22:51:25 +01:00
2018-12-28 23:15:05 +01:00
### Linters
* [x] goconst
* [ ] Gosimple -> waiting for mod
* [ ] Staticcheck -> waiting for mod
* [ ] unused -> waiting for mod
* [ ] gosec -> waiting for mod
2019-01-20 00:56:36 +01:00
### More server settings
* [ ] Caldav disable/enable
* [ ] Assignees disable/enable
* [ ] List/Namespace limits
* [ ] Attachements disable/enable
* [ ] Attachements size
* [ ] Templates disable/enable
* [ ] Stats disable/enable
* [ ] Activity notifications disable/enable
* [ ] IMAP integration disable/enable
* [ ] Reminders via mail disable/enable
### Later
* [ ] Plugins
* [ ] Rename Namespaces?
* [ ] Namespaces to collections and n-n (one list can be in multiple collections)?
* [ ] Per-User limits of lists/namespaces
* [ ] Admin-Interface to do stuff like settings and user management
* [ ] Enable/Disable users
* [ ] Better rights, fine-graded
* [ ] Enable/disable allowing user adding to lists/namespaces for specific lists or namespaces
* [ ] Admins should be able to see and mange all the boards
* [ ] Limit registration to users with a defined email domain
* [ ] Close the instance, either no registration or only one with defined email
* [ ] 2fa
* [ ] Custom fields for tasks
* [ ] Sorting lists by members, tasks, teams, last modified, etc
* [ ] "Favourite lists" -> A user can favourize boards which will then show up in a pseudonamespace
* [ ] Public lists
* [ ] Internal lists -> Only registered users can see the list
* [ ] Rights management for both public and internal lists
* [ ] Add new users via to a list which don't have an account yet, they'd get a link to sign up for vikunja.
* [ ] Respect registration email domain limits
* [ ] Export all data from Vikunja to json
2019-01-20 00:56:36 +01:00
* [ ] Watch a (n internal) list -> Will get notification for everything
* [ ] Archive a task instead of deleting
* [ ] Task dependencies
* [ ] Time tracking (possible plugin)
* [ ] IFTTT