From 718116ff67a363a9462112e51180f86b87feed91 Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Tue, 4 Aug 2020 16:37:47 +0100 Subject: [PATCH] fix feed.folder_id --- server/handlers.go | 28 ++++++++++++++++++---------- storage/feed.go | 4 ++-- storage/storage.go | 7 ------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/server/handlers.go b/server/handlers.go index 2bb186b..4792f02 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -16,6 +16,7 @@ import ( "net/http" "os" "path/filepath" + "reflect" "strconv" "strings" ) @@ -133,11 +134,6 @@ type NewFeed struct { FolderID *int64 `json:"folder_id,omitempty"` } -type UpdateFeed struct { - Title *string `json:"title,omitempty"` - FolderID *int64 `json:"folder_id,omitempty"` -} - func FeedRefreshHandler(rw http.ResponseWriter, req *http.Request) { if req.Method == "POST" { handler(req).fetchAllFeeds() @@ -289,17 +285,29 @@ func FeedHandler(rw http.ResponseWriter, req *http.Request) { return } if req.Method == "PUT" { - var body UpdateFeed + feed := db(req).GetFeed(id) + if feed == nil { + rw.WriteHeader(http.StatusBadRequest) + return + } + body := make(map[string]interface{}) 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 title, ok := body["title"]; ok { + if reflect.TypeOf(title).Kind() == reflect.String { + db(req).RenameFeed(id, title.(string)) + } } - if body.FolderID != nil { - db(req).UpdateFeedFolder(id, *body.FolderID) + if f_id, ok := body["folder_id"]; ok { + if f_id == nil { + db(req).UpdateFeedFolder(id, nil) + } else if reflect.TypeOf(f_id).Kind() == reflect.Float64 { + folderId := int64(f_id.(float64)) + db(req).UpdateFeedFolder(id, &folderId) + } } rw.WriteHeader(http.StatusOK) } else if req.Method == "DELETE" { diff --git a/storage/feed.go b/storage/feed.go index 09c9e68..08358c7 100644 --- a/storage/feed.go +++ b/storage/feed.go @@ -51,8 +51,8 @@ func (s *Storage) RenameFeed(feedId int64, newTitle string) bool { return err == nil } -func (s *Storage) UpdateFeedFolder(feedId int64, newFolderId int64) bool { - _, err := s.db.Exec(`update feeds set folder_id = ? where id = ?`, intOrNil(newFolderId), feedId) +func (s *Storage) UpdateFeedFolder(feedId int64, newFolderId *int64) bool { + _, err := s.db.Exec(`update feeds set folder_id = ? where id = ?`, newFolderId, feedId) return err == nil } diff --git a/storage/storage.go b/storage/storage.go index bc2b178..6c19c7e 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -89,10 +89,3 @@ func New(path string, logger *log.Logger) (*Storage, error) { } return &Storage{db: db, log: logger}, nil } - -func intOrNil(id int64) interface{} { - if id == 0 { - return nil - } - return id -}