2018-06-10 15:32:25 +02:00
# Featurecreep
* Listen erstellen, ändern, löschen
* Todopunkte zu Listen hinzufügen, bearbeiten, löschen
* Listen teilen (Email/Benutzername angeben, oder öffentlicher link (+einstellbar ob mit registrierung oder nicht, oder passwortgeschützt)
* Rechtemanagement
### Todopunkte
* ID
* Text
* Description
2018-06-10 15:55:56 +02:00
* Status (done, not done)
2018-06-10 15:32:25 +02:00
* Fälligkeitsdatum
* Erinnerungsdatum (und zeit)
* Zuständig (später, mit teilen)
* Liste wo der Punkt drauf ist
* Timestamps
### Websockets
Das ganze soll als Websocket zur verfg gestellt werden, der dann automatisch bescheidsagt wenn sich was ändert. Benachrichtigungen machen clients.
## API-Roadmap
Ab v0.3 können wir mit clients anfangen.
#### v0.1
2018-06-12 18:17:52 +02:00
* [x] Listen erstellen/bearbeiten/löschen
2018-08-29 08:02:12 +02:00
* [x] Ansehen
* [x] Übersicht
* [x] Einzelne liste mit allen todopunkten
* [x] Erstellen
* [x] Bearbeiten
* [x] Löschen
2018-06-12 19:44:47 +02:00
* [x] Todopunkte hinzufügen/abhaken/löschen
2018-08-29 08:02:12 +02:00
* [x] Erstellen
* [x] Bearbeiten (abhaken)
* [x] Löschen
2018-06-10 15:32:25 +02:00
2018-06-12 19:44:47 +02:00
* [x] Überall nochmal überprüfen dass der Nutzer auch das Recht hat die Liste zu löschen
2018-08-29 08:02:12 +02:00
2018-06-13 13:49:19 +02:00
* [x] Swaggerdocs !!!!
2018-08-29 08:02:12 +02:00
2018-06-14 14:58:00 +02:00
Neues Konzept: _Namespaces_
Ein Namespace kann Listen haben, es gibt mindestens einen Besiter pro Namespace. Wenn ein neuer Nutzer angelegt wird,
wird automatisch einer für den Nutzer erstellt.
Es gibt Lese- und Schreibrechte pro Namespace und Nutzer.
Namespace:
2018-08-29 08:02:12 +02:00
* ID
* Name
* OwnerID
* Timestamps
2018-06-14 14:58:00 +02:00
Teams:
2018-08-29 08:02:12 +02:00
* ID
* Name
* Description
* Rights (Selbsthochzählende Konstanten als json-array abspeichern)
* CreatedByUser
* Timestamps
2018-06-14 14:58:00 +02:00
TeamMembers:
2018-08-29 08:02:12 +02:00
* ID
* TeamID
* MemberID
* Timestamps
2018-06-14 14:58:00 +02:00
TeamNamespaces:
2018-08-29 08:02:12 +02:00
* ID
* TeamID
* NamespaceID
* Timestamps
2018-06-14 14:58:00 +02:00
TeamLists:
2018-08-29 08:02:12 +02:00
* ID
* TeamID
* ListID
* Timestamps
2018-06-14 14:58:00 +02:00
(+Check ob das Team schon Zugriff auf den Namespace hat und dafür sorgen dass das sich nicht überschneidet)
Bsp: wenn ein Namespace-Team Schreibrechte hat, soll es nicht möglich sein dieses Team mit Schreibrechten
zur Liste hinzuzufügen. Wenn das Team im Namespace aber nur Leserechte Hat soll es möglich sein dieses Team
als Schreibend zur Liste hinzuzufügen.
Oder noch Besser: Man kann globale Rechte pro Namespace vergeben, die man dann wieder feinjustieren kann pro Liste.
Es soll aber nicht mgl. sein, ein Team zu einer Liste hinzuzufügen was nicht im Namespace ist.
Es muss also möglich sein, Teams zum Namespace hinzuzufügen die keinerlei Rechte haben (damit man
denen dann wieder pro Liste welche geben kann)
Rechte:
Erstmal nur 3: Lesen, Schreiben, Admin. Admins dürfen auch Namen ändern, Teams verwalten, neue Listen anlegen, etc.
2018-06-14 16:14:49 +02:00
Owner haben immer Adminrechte. Später sollte es auch möglich sein, den ownership an andere zur übertragen.s
2018-08-29 08:02:12 +02:00
2018-06-14 14:58:00 +02:00
Teams sind global, d.h. Ein Team kann mehrere Namespaces verwalten.
#### Neues Todo
2018-07-16 22:17:35 +02:00
* [x] Teams
2018-08-29 08:02:12 +02:00
* [x] Erstellen
* [x] Ansehen
* [x] Bearbeiten
* [x] Löschen
~~Ein zu lösendes Problem: Wie regelt man die Berechtigungen um Teams zu verwalten?~~
2018-07-21 15:28:09 +02:00
* [x] Namespaces
2018-08-29 08:02:12 +02:00
* [x] Erstellen
* [x] Ansehen
* [x] Bearbeiten
* [x] Löschen
* [x] Teams hinzufügen. Der Nutzer kriegt nur Teams angezeigt die er erstellt hat.
* [x] Alle Listen eines Namespaces anzeigen
2018-07-05 08:55:34 +02:00
* [x] Listen
2018-08-29 08:02:12 +02:00
* [x] Listen zu einem Namespace hinzufügen
2018-06-12 18:17:21 +02:00
2018-06-10 15:32:25 +02:00
#### v0.2
2018-07-25 00:40:24 +02:00
* [x] Listen teilbar
2018-09-06 19:01:13 +02:00
* [x] Mit anderen Nutzern
* [x Namespaces
2018-08-29 08:02:12 +02:00
* [x] Teams
* [ ] Mit Link
2018-08-29 14:33:04 +02:00
* [ ] Offen
* [ ] Passwortgeschützt
2018-08-30 19:18:36 +02:00
2018-07-25 00:51:23 +02:00
* [x] Rechtemanagement (Und damit Unterscheidung zwischen Ownern und Mitgleidern)
2018-07-27 15:57:47 +02:00
* [x] Mange Team members
2018-08-29 08:02:12 +02:00
* [x] Hinzufügen
* [x] Löschen
2018-06-10 15:32:25 +02:00
2018-07-17 08:16:04 +02:00
*Routen*
2018-07-24 17:29:13 +02:00
* [x] `namespaces/:id/teams`
2018-08-29 08:02:12 +02:00
* [x] Create
* [x] ReadAll
* [x] Delete
2018-07-24 17:47:08 +02:00
* [x] `lists/:id/teams`
2018-08-29 08:02:12 +02:00
* [x] Create
* [x] ReadAll
* [x] Delete
2018-07-17 08:16:04 +02:00
2018-09-17 07:30:23 +02:00
* [x] /namespaces soll zumindest auch die namen (+id) der dazugehörigen Listen rausgeben
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
## Clients
2018-06-12 19:57:48 +02:00
* [ ] Webapp (vue.js) + Bulma
2018-07-16 22:17:35 +02:00
* [ ] "Native" Clients (auf dem Rechner installiert (mit elektron oder so? Oder native mit qt oder so?)
2018-06-12 19:57:48 +02:00
* [ ] Android (Flutter)
* [ ] iOS (mit Framework???? (Ging das nich auch mit Flutter?))
## 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
2018-07-17 23:10:54 +02:00
* [x] Namen finden
2018-07-25 21:47:26 +02:00
* [x] Alle Packages umziehen
2018-06-14 14:58:00 +02:00
* [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
2018-09-13 20:07:11 +02:00
* [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)
2018-11-09 18:33:06 +01:00
* [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
2018-11-19 12:37:59 +01:00
* [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-11-17 00:20:48 +01:00
* [ ] Methode einbauen, um mit einem gültigen token ein neues gültiges zu kriegen
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
2018-10-27 15:14:55 +02:00
* [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-11-03 16:05:45 +01:00
2018-10-21 22:21:37 +02:00
2018-09-12 22:59:45 +02:00
### Later/Nice to have
2018-12-12 16:25:39 +01:00
* [x] Deps nach mod umziehen
2018-12-04 23:32:35 +01:00
* [ ] Websockets
2018-12-12 16:25:39 +01:00
* Nur lesend? (-> Updates wie bisher)
2018-12-04 23:32:35 +01:00
* sollen den geupdaten Kram an alle anderen user schicken
* Ein Channel in dem socket pro liste ... oder pro user?
* Erst an die anderen Schicken wenn der write in die Datenbank erfolgeich war
* Ein Nutzer authentifiziert sich mit jwt und bekommt dann zugriff auf alle rooms mit listen auf die er Zugriff hat
* Unterscheidung nach lesen und Schreiben
2018-07-02 08:40:24 +02:00
* [ ] Globale Limits für anlegbare Listen + Namespaces
2018-07-04 08:56:52 +02:00
* [ ] Mgl., dass die Instanz geschlossen ist, also sich keiner registrieren kann, und man sich einloggen muss
2018-06-12 19:57:48 +02:00
* [ ] mgl. zum Emailmaskieren haben (in den Nutzereinstellungen, wenn man seine Email nicht an alle Welt rausposaunen will)
2018-08-29 14:33:04 +02:00
* [ ] 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-12 16:25:39 +01:00
* [ ] IMAP-Integration -> Man schickt eine email an Vikunja und es macht daraus dann nen task -> Achtung missbrauchsmöglichkeiten
2018-11-06 23:28:56 +01:00
* [ ] In und Out webhooks, mit Templates vom Payload
2018-12-12 16:25:39 +01:00
* [ ] Start/Enddatum für Tasks
* [ ] Timeline/Calendar view -> Dazu tasks die in einem Bestimmten Bereich due sind, macht dann das Frontend
* [ ] "Smart Lists", Listen nach bestimmten Kriterien gefiltert -> nur UI?
* [ ] "Performance-Statistik" -> Wie viele Tasks man in bestimmten Zeiträumen so geschafft hat etc
* [ ] Activity Feed, so à la "der und der hat das und das gemacht etc"
* [ ] Assignees
* [ ] Attachments
* [ ] Labels
* [ ] Tasks innerhalb eines definierbarem Bereich, sollte aber trotzdem der server machen, so à la "Gib mir alles für diesen Monat"