

  TODO
========


#### BEFORE RELEASE

 - migrate old data

 - in my script: use `srvname` for sendername
 
 - switch send script everywhere (we can use the new server, but we need to send correct channels)

 - app-store link in HTML

 - deploy
 - deploy apache conf directly

 - backups (no longer container in my db_backup, perhaps extend it to sqlite?)

 - ios purchase verification

#### 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

#### 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)

 - /send endpoint should be compatible with the [ webhook ] notifier of uptime-kuma
   (or add another /kuma endpoint)
   -> https://webhook.site/

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

 - weblogin, webapp, ...

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

 - Use only single struct for DB|Model|JSON
     * needs sq.Converter implementation
     * needs to handle joined data
     * rfctime.Time...

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

#### FUTURE

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