mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 00:33:14 +00:00
single, stateless endpoint for item list
This commit is contained in:
parent
7f8225b351
commit
babb98d870
@ -259,26 +259,6 @@ func FeedHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func findItems(db *storage.Storage, filter storage.ItemFilter) []storage.Item {
|
||||
statusFilter := db.GetSettingsValue("filter")
|
||||
if statusFilter != nil && len(statusFilter.(string)) != 0 {
|
||||
status := storage.StatusValues[statusFilter.(string)]
|
||||
filter.Status = &status
|
||||
}
|
||||
return db.ListItems(filter)
|
||||
}
|
||||
|
||||
func FeedItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
id, err := strconv.ParseInt(Vars(req)["id"], 10, 64)
|
||||
if err != nil {
|
||||
rw.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
rw.WriteHeader(http.StatusOK)
|
||||
items := findItems(db(req), storage.ItemFilter{FeedID: &id})
|
||||
writeJSON(rw, items)
|
||||
}
|
||||
|
||||
type UpdateItem struct {
|
||||
Status *storage.ItemStatus `json:"status,omitempty"`
|
||||
}
|
||||
@ -305,23 +285,21 @@ func ItemHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func FolderItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
if req.Method == "GET" {
|
||||
id, err := strconv.ParseInt(Vars(req)["id"], 10, 64)
|
||||
if err != nil {
|
||||
rw.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
items := findItems(db(req), storage.ItemFilter{FolderID: &id})
|
||||
writeJSON(rw, items)
|
||||
} else {
|
||||
rw.WriteHeader(http.StatusMethodNotAllowed)
|
||||
}
|
||||
}
|
||||
|
||||
func ItemListHandler(rw http.ResponseWriter, req *http.Request) {
|
||||
if req.Method == "GET" {
|
||||
items := findItems(db(req), storage.ItemFilter{})
|
||||
query := req.URL.Query()
|
||||
filter := storage.ItemFilter{}
|
||||
if folderID, err := strconv.ParseInt(query.Get("folder_id"), 10, 64); err == nil {
|
||||
filter.FolderID = &folderID
|
||||
}
|
||||
if feedID, err := strconv.ParseInt(query.Get("feed_id"), 10, 64); err == nil {
|
||||
filter.FeedID = &feedID
|
||||
}
|
||||
if status := query.Get("status"); len(status) != 0 {
|
||||
statusValue := storage.StatusValues[status]
|
||||
filter.Status = &statusValue
|
||||
}
|
||||
items := db(req).ListItems(filter)
|
||||
writeJSON(rw, items)
|
||||
} else {
|
||||
rw.WriteHeader(http.StatusMethodNotAllowed)
|
||||
|
@ -73,10 +73,8 @@ var routes []Route = []Route{
|
||||
p("/api/status", StatusHandler),
|
||||
p("/api/folders", FolderListHandler),
|
||||
p("/api/folders/:id", FolderHandler),
|
||||
p("/api/folders/:id/items", FolderItemsHandler),
|
||||
p("/api/feeds", FeedListHandler),
|
||||
p("/api/feeds/:id", FeedHandler),
|
||||
p("/api/feeds/:id/items", FeedItemsHandler),
|
||||
p("/api/feeds/find", FeedHandler),
|
||||
p("/api/items", ItemListHandler),
|
||||
p("/api/items/:id", ItemHandler),
|
||||
|
@ -63,10 +63,12 @@ func New() (*Storage, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
/*
|
||||
_, err = db.Exec(initQuery)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
*/
|
||||
logger := log.New(os.Stdout, "storage: ", log.Ldate | log.Ltime | log.Lshortfile)
|
||||
return &Storage{db: db, log: logger}, nil
|
||||
}
|
||||
|
@ -13,6 +13,13 @@
|
||||
return res.json()
|
||||
}
|
||||
|
||||
var param = function(query) {
|
||||
if (!query) return ''
|
||||
return '?' + Object.keys(query).map(function(key) {
|
||||
return encodeURIComponent(key) + '=' + encodeURIComponent(query[key])
|
||||
}).join('&')
|
||||
}
|
||||
|
||||
window.api = {
|
||||
feeds: {
|
||||
list: function() {
|
||||
@ -49,8 +56,8 @@
|
||||
}
|
||||
},
|
||||
items: {
|
||||
list: function() {
|
||||
return api('get', '/api/items').then(json)
|
||||
list: function(query) {
|
||||
return api('get', '/api/items' + param(query)).then(json)
|
||||
},
|
||||
update: function(id, data) {
|
||||
return api('put', '/api/items/' + id, data)
|
||||
|
@ -77,19 +77,21 @@ var vm = new Vue({
|
||||
},
|
||||
refreshItems: function() {
|
||||
var promise = null
|
||||
if (!this.feedSelected) {
|
||||
promise = api.items.list()
|
||||
} else {
|
||||
var query = {}
|
||||
if (this.feedSelected) {
|
||||
var parts = this.feedSelected.split(':', 2)
|
||||
var type = parts[0]
|
||||
var guid = parts[1]
|
||||
if (type === 'feed') {
|
||||
promise = api.feeds.list_items(guid)
|
||||
if (type == 'feed') {
|
||||
query.feed_id = guid
|
||||
} else if (type == 'folder') {
|
||||
promise = api.folders.list_items(guid)
|
||||
query.folder_id = guid
|
||||
}
|
||||
}
|
||||
promise.then(function(items) {
|
||||
if (this.filterSelected) {
|
||||
query.status = this.filterSelected
|
||||
}
|
||||
api.items.list(query).then(function(items) {
|
||||
vm.items = items
|
||||
})
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user