mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-25 13:39:22 +00:00
settigs storage & api
This commit is contained in:
parent
eb0db50413
commit
0761da85e7
@ -314,3 +314,21 @@ func ItemListHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
rw.WriteHeader(http.StatusMethodNotAllowed)
|
rw.WriteHeader(http.StatusMethodNotAllowed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SettingsHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
|
if req.Method == "GET" {
|
||||||
|
rw.WriteHeader(http.StatusOK)
|
||||||
|
writeJSON(rw, db(req).GetSettings())
|
||||||
|
} else if req.Method == "PUT" {
|
||||||
|
settings := make(map[string]interface{})
|
||||||
|
if err := json.NewDecoder(req.Body).Decode(&settings); err != nil {
|
||||||
|
rw.WriteHeader(http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if db(req).UpdateSettings(settings) {
|
||||||
|
rw.WriteHeader(http.StatusOK)
|
||||||
|
} else {
|
||||||
|
rw.WriteHeader(http.StatusBadRequest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -80,6 +80,7 @@ var routes []Route = []Route{
|
|||||||
p("/api/feeds/find", FeedHandler),
|
p("/api/feeds/find", FeedHandler),
|
||||||
p("/api/items", ItemListHandler),
|
p("/api/items", ItemListHandler),
|
||||||
p("/api/items/:id", ItemHandler),
|
p("/api/items/:id", ItemHandler),
|
||||||
|
p("/api/settings", SettingsHandler),
|
||||||
}
|
}
|
||||||
|
|
||||||
func Vars(req *http.Request) map[string]string {
|
func Vars(req *http.Request) map[string]string {
|
||||||
|
57
storage/settings.go
Normal file
57
storage/settings.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import "encoding/json"
|
||||||
|
|
||||||
|
func settingsDefaults() map[string]interface{} {
|
||||||
|
return map[string]interface{}{
|
||||||
|
"filter": "all",
|
||||||
|
"feed_list_width": 300,
|
||||||
|
"item_list_width": 300,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Storage) GetSettings() map[string]interface{} {
|
||||||
|
result := settingsDefaults()
|
||||||
|
rows, err := s.db.Query(`select key, val from settings;`)
|
||||||
|
if err != nil {
|
||||||
|
s.log.Print(err)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
for rows.Next() {
|
||||||
|
var key string
|
||||||
|
var val []byte
|
||||||
|
var valDecoded interface{}
|
||||||
|
|
||||||
|
rows.Scan(&key, &val)
|
||||||
|
if err = json.Unmarshal([]byte(val), &valDecoded); err != nil {
|
||||||
|
s.log.Print(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
result[key] = valDecoded
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Storage) UpdateSettings(kv map[string]interface{}) bool {
|
||||||
|
defaults := settingsDefaults()
|
||||||
|
for key, val := range kv {
|
||||||
|
if defaults[key] == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
valEncoded, err := json.Marshal(val)
|
||||||
|
if err != nil {
|
||||||
|
s.log.Print(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_, err = s.db.Exec(`
|
||||||
|
insert into settings (key, val) values (?, ?)
|
||||||
|
on conflict (key) do update set val=?`,
|
||||||
|
key, valEncoded, valEncoded,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
s.log.Print(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
@ -45,6 +45,11 @@ create table if not exists items (
|
|||||||
create index if not exists idx_item_feed_id on items(feed_id);
|
create index if not exists idx_item_feed_id on items(feed_id);
|
||||||
create index if not exists idx_item_status on items(status);
|
create index if not exists idx_item_status on items(status);
|
||||||
create unique index if not exists idx_item_guid on items(guid);
|
create unique index if not exists idx_item_guid on items(guid);
|
||||||
|
|
||||||
|
create table if not exists settings (
|
||||||
|
key string primary key,
|
||||||
|
val blob
|
||||||
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
type Storage struct {
|
type Storage struct {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user