mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 21:19:19 +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 {
|
type UpdateItem struct {
|
||||||
Status *storage.ItemStatus `json:"status,omitempty"`
|
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) {
|
func ItemListHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
if req.Method == "GET" {
|
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)
|
writeJSON(rw, items)
|
||||||
} else {
|
} else {
|
||||||
rw.WriteHeader(http.StatusMethodNotAllowed)
|
rw.WriteHeader(http.StatusMethodNotAllowed)
|
||||||
|
@ -73,10 +73,8 @@ var routes []Route = []Route{
|
|||||||
p("/api/status", StatusHandler),
|
p("/api/status", StatusHandler),
|
||||||
p("/api/folders", FolderListHandler),
|
p("/api/folders", FolderListHandler),
|
||||||
p("/api/folders/:id", FolderHandler),
|
p("/api/folders/:id", FolderHandler),
|
||||||
p("/api/folders/:id/items", FolderItemsHandler),
|
|
||||||
p("/api/feeds", FeedListHandler),
|
p("/api/feeds", FeedListHandler),
|
||||||
p("/api/feeds/:id", FeedHandler),
|
p("/api/feeds/:id", FeedHandler),
|
||||||
p("/api/feeds/:id/items", FeedItemsHandler),
|
|
||||||
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),
|
||||||
|
@ -63,10 +63,12 @@ func New() (*Storage, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
_, err = db.Exec(initQuery)
|
_, err = db.Exec(initQuery)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
logger := log.New(os.Stdout, "storage: ", log.Ldate | log.Ltime | log.Lshortfile)
|
logger := log.New(os.Stdout, "storage: ", log.Ldate | log.Ltime | log.Lshortfile)
|
||||||
return &Storage{db: db, log: logger}, nil
|
return &Storage{db: db, log: logger}, nil
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,13 @@
|
|||||||
return res.json()
|
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 = {
|
window.api = {
|
||||||
feeds: {
|
feeds: {
|
||||||
list: function() {
|
list: function() {
|
||||||
@ -49,8 +56,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
items: {
|
items: {
|
||||||
list: function() {
|
list: function(query) {
|
||||||
return api('get', '/api/items').then(json)
|
return api('get', '/api/items' + param(query)).then(json)
|
||||||
},
|
},
|
||||||
update: function(id, data) {
|
update: function(id, data) {
|
||||||
return api('put', '/api/items/' + id, data)
|
return api('put', '/api/items/' + id, data)
|
||||||
|
@ -77,19 +77,21 @@ var vm = new Vue({
|
|||||||
},
|
},
|
||||||
refreshItems: function() {
|
refreshItems: function() {
|
||||||
var promise = null
|
var promise = null
|
||||||
if (!this.feedSelected) {
|
var query = {}
|
||||||
promise = api.items.list()
|
if (this.feedSelected) {
|
||||||
} else {
|
|
||||||
var parts = this.feedSelected.split(':', 2)
|
var parts = this.feedSelected.split(':', 2)
|
||||||
var type = parts[0]
|
var type = parts[0]
|
||||||
var guid = parts[1]
|
var guid = parts[1]
|
||||||
if (type === 'feed') {
|
if (type == 'feed') {
|
||||||
promise = api.feeds.list_items(guid)
|
query.feed_id = guid
|
||||||
} else if (type == 'folder') {
|
} 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
|
vm.items = items
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user