api/Featurecreep.md

310 lines
14 KiB
Markdown
Raw Permalink Normal View History

2018-06-10 13:32:25 +00:00
# Featurecreep
2018-12-25 20:29:16 +00: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 06:24:15 +00:00
2019-02-17 19:53:04 +00:00
## Feature Ideas
2018-06-10 13:32:25 +00:00
2018-12-02 00:49:30 +00:00
* [x] Priorities
2018-11-26 20:24:00 +00:00
* [x] Repeating tasks
2019-02-17 19:53:04 +00:00
* [x] Get all tasks which are due between two given dates
2018-12-02 00:49:30 +00:00
* [x] Subtasks
2018-06-10 13:32:25 +00:00
2018-06-12 17:57:48 +00:00
## Anderes
2019-02-17 19:53:04 +00:00
* [x] Refactor!!!! Delete everything not being used anymore, simplify.
* [x] Drone
* [x] Tests
* [x] Find a nme
* [x] Move packages to a better structure
* [x] Swagger UI
+ [x] Fix CORS
* [x] Use echo.NewHTTPError instead of c.JSON(Message{})
* [x] Better error messages when the model which is sent to the server is wrong
* [x] Better error handling to show useful error messages and status codes
* [x] Viper for config instead of ini
* [x] Docs for installing
* [x] Tests for rights managemnt
* [x] Rights checks:
* [x] Create lists
* [x] Edit lists
* [x] Add tasks
* [x] Edit tasks
* [x] The -1 namespace should also be accessible seperately
2018-09-12 20:59:45 +00:00
### Short Term
2019-02-17 19:53:04 +00:00
* [x] Cacher configurable
* [x] Should throw an error when an id < 1
* [x] /users should also return the rights
* [x] Extra endpoint /teams/members /list/users to update rights without needing to remove and re-add them
* [x] namespaces & listen update does not work, returns 500
* [x] Logging for all errors somewhere
2018-10-06 13:08:38 +00: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 20:19:51 +00:00
* [x] Rausfinden warum xorm teilweise beim einfügen IDs mit einfügen will -> Das schlägt dann wegen duplicate fehl
2018-10-05 17:16:31 +00: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-16 23:17:37 +00:00
* [x] Validation der ankommenden structs, am besten mit https://github.com/go-validator/validator oder mit dem Ding von echo
2018-11-09 10:30:17 +00:00
* [x] Pagination
2018-10-21 20:19:51 +00: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-16 23:17:37 +00:00
* [x] Testen, ob man über die Routen methode von echo irgendwie ein swagger spec generieren könnte -> Andere Swagger library
2019-05-22 17:48:48 +00:00
* [x] CalDAV
2018-11-06 22:09:54 +00:00
* [x] Basics
* [x] Reminders
2019-05-22 17:48:48 +00:00
* [x] 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-16 23:20:48 +00:00
* Dazu am Besten nen pseudonamespace anlegen (id -1 oder so), der hat das dann alles
2018-12-12 15:25:39 +00:00
* [x] Testing mit locust: https://locust.io/
2019-03-03 16:43:25 +00:00
* [ ] Endpoint to get all users who have access to a list - regardless of via team, user share or via namespace
2018-09-12 20:59:45 +00:00
2018-10-21 20:21:37 +00:00
#### Userstuff
2018-11-16 23:20:48 +00:00
* [x] Userstuff aufräumen
2018-10-21 20:21:37 +00: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
2019-04-28 21:50:38 +00:00
* [x] Password Reset
* [ ] New field in user model which holds a url of an avatar image - for now just Gravatar, later more
2018-10-22 20:20:45 +00:00
* [ ] Settings
2018-12-27 22:37:25 +00:00
* [ ] Password update
* [ ] Email update
* [ ] Ob man über email oder Benutzernamen gefunden werden darf
2018-11-03 15:05:45 +00:00
2018-12-14 16:45:31 +00:00
### Bugfixes
2018-12-19 21:05:25 +00:00
* [x] Panic wenn mailer nicht erreichbar -> Als workaround mailer deaktivierbar machen, bzw keine mails verschicken
* [x] "unexpected EOF"
2018-12-19 21:05:25 +00:00
* [x] Beim Login & Password reset gibt die API zurück dass der Nutzer nicht existiert
2019-04-01 19:48:48 +00:00
* [x] Re-check rights checks to see if all information which is compared against is properly read from the db and not only based on user input
* [x] Lists
* [x] List users
* [x] List Teams
* [x] Labels
* [x] Tasks
* [x] Namespaces
* [x] Namespace users
* [x] Namespace teams
* [x] Teams
* [x] Team member handling
* [x] Also check `ReadOne()` for unnessecary database operations since the inital query is already done in `CanRead()`
2019-04-01 18:19:55 +00:00
* [x] Add a `User.AfterLoad()` which obfuscates the email address
* [x] Fix priority not updating to 0
2018-12-14 16:45:31 +00:00
2018-12-12 22:56:00 +00:00
### Docs
2019-02-17 19:53:04 +00:00
* [x] Readme
2018-12-27 22:37:25 +00:00
* [x] Auch noch nen "link" zum Featurecreep
2019-02-17 19:53:04 +00:00
* [x] ToC
* [x] Logo
* [x] How to build -> Docs
* [x] How to dev -> Docs
* [x] License
* [x] Contributing
2019-01-03 22:22:06 +00:00
* [x] Redocs
* [x] Swaggerdocs verbessern
* [x] Descriptions in structs
* [x] Maxlength specify etc. (see swaggo docs)
* [x] Rights
* [x] API
2019-02-17 19:53:04 +00:00
* [x] Anleitung zum Makefile
* [x] How to build from source
* [x] Struktur erklären
* [x] Deploy in die docs
* [x] Docker
* [x] Native (systemd + nginx/apache)
* [x] Backups
* [x] Docs aufsetzen
2018-10-21 20:21:37 +00:00
2018-12-27 22:37:25 +00:00
### Tasks
2018-09-12 20:59:45 +00:00
2018-12-22 18:06:14 +00: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 21:49:46 +00:00
* [x] Bulk-edit -> Transactions
2018-12-29 14:29:50 +00:00
* [x] Assignees
2019-01-08 19:13:07 +00: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 01:18:41 +00:00
* [x] Labels
2019-01-09 23:08:12 +00: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 15:25:39 +00:00
* [ ] Attachments
2018-12-18 14:35:20 +00:00
* [ ] Task-Templates innerhalb namespaces und Listen (-> Mehrere, die auswählbar sind)
2018-12-25 20:29:16 +00:00
* [ ] Ein Task muss von mehreren Assignees abgehakt werden bis er als done markiert wird
2018-12-27 22:37:25 +00:00
* [ ] Besseres Rechtesystem, damit man so fine-graded sachen machen kann wie "Der da darf aber nur Tasks hinzufügen, aber keine abhaken"
2019-02-17 19:53:04 +00:00
* [ ] Roles which enable or disable chaning certain fields of a task -> includes custm fields
* [ ] Custom fields: Templates at List > Namespace > Global level, overwriting each other
* [ ] Related tasks -> settable with a "kind" of relation like blocked, or just related or so
* [ ] Description should be longtext
2019-04-28 21:47:25 +00:00
* [ ] Pecent done - For now just a float, may later depend on how many sub tasks are done or so
2018-12-27 22:37:25 +00:00
### General features
* [x] Deps nach mod umziehen
* [x] Performance bei rechtchecks verbessern
2018-12-31 01:18:41 +00:00
* User & Teamright sollte sich für n rechte in einer Funktion testen lassen
* [ ] Endpoint um die Rechte mit Beschreibung und code zu kriegen
2019-02-17 19:53:04 +00:00
* [ ] "Smart Lists", Listen nach bestimmten Kriterien gefiltert -> speichern und im pseudonamespace
2018-12-27 22:37:25 +00:00
* [ ] "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 22:37:25 +00:00
* [ ] ~~Websockets~~ SSE https://github.com/kljensen/golang-html5-sse-example
2019-02-17 19:53:04 +00:00
* 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
* [ ] Being able to define filters for notifications or turn them silent completely -> Probably frontend only
2018-12-27 22:37:25 +00:00
* [ ] 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 22:38:43 +00:00
* [ ] /info endpoint, in dem dann zb die limits und version etc steht
2019-01-03 22:22:06 +00:00
* [ ] Deprecate /namespaces/{id}/lists in favour of namespace.ReadOne() <-- should also return the lists
2019-02-17 19:53:04 +00:00
* [ ] Bindata for templates
* [ ] `GetUserByID` and the likes should return pointers
* [ ] Colors for lists and namespaces -> Up to the frontend to implement these
* [ ] Some kind of milestones for tasks
* [ ] Create tasks from a text/markdown file (probably frontend only)
* [ ] Label-view: Get a bunch of tasks by label
* [ ] Debian package should have a service file
* [ ] Downloads should be served via nginx (with theme?), minio should only be used for pushing artifacts.
2019-03-03 17:18:47 +00:00
* [ ] User struct should have a field for the avatar url (-> gravatar md5 calculated by the backend)
2019-03-31 20:33:28 +00:00
* [ ] All `ReadAll` methods should return the number of items per page, the number of items on this page, the total pages and the items
-> Check if there's a way to do that efficently. Maybe only implementing it in the web handler.
2019-04-28 21:49:13 +00:00
* [ ] List stats to see how many tasks are done, how many are there in total, how many people have acces to a list etc
* [ ] Colors for tasks
2019-05-22 17:48:48 +00:00
* [ ] Better caldav support
* [x] VTODO
* [x] Fix organizer prop
* [x] Depricate the events thing for now
* [x] PROPFIND/OPTIONS : caldav discovery
* [x] Create new tasks
* [x] Save uid from the client
* [x] Update tasks
* [x] Marking as done
* [x] Fix OPTIONS Requests to the rest of the api being broken
* [x] Parse all props defined in rfc5545
* [x] COMPLETED -> Need to actually save the time the task was completed
* [x] Whenever a task ist created/updated, update the `updated` prop on the list so the etag changes and clients get notified
* [x] Fix not all tasks being displayed (My guess: Something about that f*cking etag)
* [x] Delete tasks
* [x] Last modified
* [x] Content Size
* [x] Modify the caldav lib as proposed in the pr
* [x] Improve login performance, each request taking > 1.5 sec is just too much, maybe just use the default value for hash iterations in the login/register function
* [x] Only show priority when we have one
* [x] Show a proper calendar title
* [x] Fix home principal propfind stuff
* [x] Docs
* [x] Setting to disable caldav completely
* [ ] Make it work with the app
* [ ] Cleanup the whole mess I made with the handlers and storage providers etc -> Probably a good idea to create a seperate storage provider etc for lists and tasks
* [ ] Tests
* [ ] Check if only needed things are queried from the db when accessing dav (for ex. no need to get all tasks when we act
2018-12-28 22:15:05 +00:00
2019-01-09 23:08:12 +00:00
### Refactor
2019-01-14 21:49:50 +00: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.
* [x] Things like list/task order should use queries and not url params
2019-02-18 19:32:41 +00:00
* [x] Fix lint errors
* [x] Add settings for max open/idle connections and max connection lifetime
2019-05-25 07:33:57 +00:00
* [x] Reminders should use an extra table so we can make reverse lookups aka "give me all tasks with reminders in this period" which we'll need for things like email reminders notifications
2019-05-25 08:31:12 +00:00
* [x] Teams and users should also have uuids (for users these can be the username)
2019-02-24 17:35:25 +00:00
* [ ] When giving a team or user access to a list/namespace, they should be reffered to by uuid, not numeric id
* [ ] Adding users to a team should also use uuid
2019-02-24 21:18:20 +00:00
* [ ] Check if the team/user really exist before updating them on lists/namespaces
2019-03-03 17:18:47 +00:00
* [ ] Check if the email is properly obfuscated everywhere -> alter GetUser() and add a new method GetUserWithEmail
2019-03-03 16:43:25 +00:00
2018-12-28 22:15:05 +00:00
### Linters
* [x] goconst
2019-03-31 20:31:03 +00:00
* [x] Staticcheck
2019-02-18 19:32:41 +00:00
* [x] gocyclo-check
* [ ] gosec-check -> waiting for mod
2019-03-31 20:31:03 +00:00
* [x] goconst-check
* [ ] golangci -> docker in drone, will probably make all other linters obsolete
2019-01-19 23:56:36 +00:00
### More server settings
2019-05-25 08:09:47 +00:00
* [x] Caldav disable/enable
2019-01-19 23:56:36 +00:00
* [ ] 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
2019-05-22 17:48:48 +00:00
* [ ] Backgrounds for lists -> needs uploading and storing and so on
* [ ] Plugins
2019-05-25 08:09:47 +00:00
* [ ] Rename Namespaces to collections (or spaces?)
* [ ] Collections n-n (one list can be in multiple collections)?
* [ ] Rename lists to projects
* [ ] 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-19 23:56:36 +00:00
* [ ] Watch a (n internal) list -> Will get notification for everything
* [ ] Archive a task instead of deleting
* [ ] Task dependencies
* [ ] Time tracking (possible plugin)
* [ ] IFTTT
2019-02-17 19:53:04 +00:00
* [ ] More sharing features (all of these with the already existing permissions)
* [ ] Invite users per mail
* [ ] Share a link with/without password
* [ ] Comments on tasks
* [ ] @mention users in tasks or comments to get them notified
* [ ] Summary of tasks to do in a configurable interval (every day/week or so)
2019-05-25 08:09:47 +00:00
* [ ] Disable/enable task fields in a list
* [ ] With inheritence from namespaces
* [ ] Custom statuses for tasks, configurable in the list settings
* [ ] With inheritence from namespaces
* [ ] better filters
* [ ] by lables
* [ ] Due dates
* [ ] Start/End dates
* [ ] Assignees
* [ ] Priorities
2019-02-17 19:53:04 +00:00
* [ ] Importer (maybe frontend only)
* [ ] Trello
* [ ] Wunderlist
* [ ] Zenkit
* [ ] Asana
* [ ] Microsoft Todo
* [ ] Nozbe
* [ ] Lanes
* [ ] Nirvana
2019-05-22 17:48:48 +00:00
* [ ] Any.do
2019-02-17 19:53:04 +00:00
* [ ] Good ol' Caldav (Tasks)
2019-05-25 08:09:47 +00:00
* [ ] ClickUp
2019-02-17 19:53:04 +00:00
* [ ] More auth providers
* [ ] LDAP/AD
* [ ] Kerberos
* [ ] SAML (what?)
* [ ] smtp
* [ ] OpenID