TODO
========


#### DO DO DO

 - app-store link in HTML

 - ios purchase verification

 - exerr.New | exerr.Wrap

#### UNSURE

 - (?) default-priority for channels

 - (?) "login" on website and list/search/filter messages

 - (?) make channels deleteable (soft-delete) (what do with messages in channel?)

 - (?) desktop client for notifications

 - (?) add querylog (similar to requestlog/errorlog) - only for main-db

 - (?) specify 'type' of message (debug, info, warn, error, fatal)  ->  distinct from priority 

#### LATER

 - do i need bool2db()? it seems to work for keytokens without them?

 - We no longer have a route to reshuffle all keys (previously in updateUser), add a /user/:uid/keys/reset ?
   Would delete all existing keys and create 3 new ones?

 - error logging as goroutine, gets all errors via channel,
   (channel buffered - nonblocking send, second channel that gets a message when sender failed )
   (then all errors end up in _second_ sqlite table)
   due to message channel etc everything is non blocking and cant fail in main
 
 - => implement proper error logging in goext, kinda combines zerolog and wrapped-errors
   copy basic code from bringman, but remove all bm specific stuff and make it abstract
   Register(ErrType) methods, errtypes then as structs
   log.xxx package with same interface as zerolog

 - jobs to clear error-db to only keep X entries... (requests-db already exists)

 - route to re-check all pro-token (for me)

 - endpoint to list all servernames of user (distinct select)

 - weblogin, webapp, ...

 - Pagination for ListChannels / ListSubscriptions / ListClients / ListChannelSubscriptions / ListUserSubscriptions

 - use job superclass (copy from isi/bnet/?), reduce duplicate code

 - admin panel (especially errors and requests)

 - cli app (?)

#### FUTURE

 - Remove compat, especially do not create compat id for every new message...