From 1591cdd6245de616d1cdd8c050ae7acd3919ffce Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Thu, 2 Jul 2020 22:10:53 +0100 Subject: [PATCH] rename/move feeds --- server/handlers.go | 27 ++++++++++++++++++++++++--- template/static/javascripts/api.js | 3 +++ template/static/javascripts/app.js | 9 +++++++-- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/server/handlers.go b/server/handlers.go index 64e9ff0..5edce8f 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -93,6 +93,11 @@ type NewFeed struct { FolderID *int64 `json:"folder_id,omitempty"` } +type UpdateFeed struct { + Title *string `json:"title,omitempty"` + FolderID *int64 `json:"folder_id,omitempty"` +} + func FeedListHandler(rw http.ResponseWriter, req *http.Request) { if req.Method == "GET" { list := db(req).ListFeeds() @@ -177,13 +182,29 @@ func createFeed(s *storage.Storage, url string, folderId *int64) error { } func FeedHandler(rw http.ResponseWriter, req *http.Request) { - if req.Method == "DELETE" { - id, err := strconv.ParseInt(Vars(req)["id"], 10, 64) - if err != nil { + id, err := strconv.ParseInt(Vars(req)["id"], 10, 64) + if err != nil { + rw.WriteHeader(http.StatusBadRequest) + return + } + if req.Method == "PUT" { + var body UpdateFeed + if err := json.NewDecoder(req.Body).Decode(&body); err != nil { + log.Print(err) rw.WriteHeader(http.StatusBadRequest) return } + if body.Title != nil { + db(req).RenameFeed(id, *body.Title) + } + if body.FolderID != nil { + db(req).UpdateFeedFolder(id, *body.FolderID) + } + rw.WriteHeader(http.StatusOK) + } else if req.Method == "DELETE" { db(req).DeleteFeed(id) rw.WriteHeader(http.StatusNoContent) + } else { + rw.WriteHeader(http.StatusMethodNotAllowed) } } diff --git a/template/static/javascripts/api.js b/template/static/javascripts/api.js index e6f0240..a6876ca 100644 --- a/template/static/javascripts/api.js +++ b/template/static/javascripts/api.js @@ -21,6 +21,9 @@ create: function(data) { return api('post', '/api/feeds', data).then(json) }, + update: function(id, data) { + return api('put', '/api/feeds/' + id, data) + }, delete: function(id) { return api('delete', '/api/feeds/' + id) } diff --git a/template/static/javascripts/app.js b/template/static/javascripts/app.js index 36d94b4..f96e908 100644 --- a/template/static/javascripts/app.js +++ b/template/static/javascripts/app.js @@ -76,7 +76,10 @@ var vm = new Vue({ return d.getDate() + '/' + d.getMonth() + '/' + d.getFullYear() }, moveFeed: function(feed, folder) { - feed.folder_id = folder ? folder.id : null + var folder_id = folder ? folder.id : null + api.feeds.update(feed.id, {folder_id: folder_id}).then(function() { + feed.folder_id = folder_id + }) }, createFolder: function(event) { var form = event.target @@ -99,7 +102,9 @@ var vm = new Vue({ }, renameFeed: function(feed) { var newTitle = prompt('Enter new title', feed.title) - feed.title = newTitle + api.feeds.update(feed.id, {title: newTitle}).then(function() { + feed.title = newTitle + }) }, deleteFeed: function(feed) { if (confirm('Are you sure you want to delete ' + feed.title + '?')) {