Improve API
This commit is contained in:
parent
747da03e4c
commit
71bf7e4358
15 changed files with 40 additions and 63 deletions
|
@ -1,5 +1,5 @@
|
|||
// Code generated by go generate; DO NOT EDIT.
|
||||
// 2017-11-24 16:04:49.318661623 -0800 PST m=+0.006828741
|
||||
// 2017-11-24 21:40:33.354922728 -0800 PST m=+0.035838197
|
||||
|
||||
package locale
|
||||
|
||||
|
@ -148,12 +148,13 @@ var Translations = map[string]string{
|
|||
"Refresh all feeds in the background": "Actualiser tous les abonnements en arrière-plan",
|
||||
"Sign in with Google": "Se connecter avec Google",
|
||||
"Unlink my Google account": "Dissocier mon compte Google",
|
||||
"Link my Google account": "Associer mon compte Google"
|
||||
"Link my Google account": "Associer mon compte Google",
|
||||
"Category not found for this user.": "Cette catégorie n'existe pas pour cet utilisateur."
|
||||
}
|
||||
`,
|
||||
}
|
||||
|
||||
var TranslationsChecksums = map[string]string{
|
||||
"en_US": "6fe95384260941e8a5a3c695a655a932e0a8a6a572c1e45cb2b1ae8baa01b897",
|
||||
"fr_FR": "f438ed9116ecc7b71412581255dd9b1332cacd9e2876615b03ec65e4b500bf02",
|
||||
"fr_FR": "92b360ebbfae5c243897c05f7869e6bef0129a2c8275b6802fbaba0d05410e91",
|
||||
}
|
||||
|
|
|
@ -132,5 +132,6 @@
|
|||
"Refresh all feeds in the background": "Actualiser tous les abonnements en arrière-plan",
|
||||
"Sign in with Google": "Se connecter avec Google",
|
||||
"Unlink my Google account": "Dissocier mon compte Google",
|
||||
"Link my Google account": "Associer mon compte Google"
|
||||
"Link my Google account": "Associer mon compte Google",
|
||||
"Category not found for this user.": "Cette catégorie n'existe pas pour cet utilisateur."
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
// Feed represents a feed in the database
|
||||
// Feed represents a feed in the database.
|
||||
type Feed struct {
|
||||
ID int64 `json:"id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
|
|
|
@ -23,6 +23,7 @@ var (
|
|||
errDuplicate = "This feed already exists (%s)."
|
||||
errNotFound = "Feed %d not found"
|
||||
errEncoding = "Unable to normalize encoding: %v."
|
||||
errCategoryNotFound = "Category not found for this user."
|
||||
)
|
||||
|
||||
// Handler contains all the logic to create and refresh feeds.
|
||||
|
@ -34,6 +35,10 @@ type Handler struct {
|
|||
func (h *Handler) CreateFeed(userID, categoryID int64, url string) (*model.Feed, error) {
|
||||
defer helper.ExecutionTime(time.Now(), fmt.Sprintf("[Handler:CreateFeed] feedUrl=%s", url))
|
||||
|
||||
if !h.store.CategoryExists(userID, categoryID) {
|
||||
return nil, errors.NewLocalizedError(errCategoryNotFound)
|
||||
}
|
||||
|
||||
client := http.NewClient(url)
|
||||
response, err := client.Get()
|
||||
if err != nil {
|
||||
|
|
|
@ -33,7 +33,7 @@ func (h *Client) Get() (*Response, error) {
|
|||
|
||||
req := &http.Request{
|
||||
URL: u,
|
||||
Method: "GET",
|
||||
Method: http.MethodGet,
|
||||
Header: h.buildHeaders(),
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ package api
|
|||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/miniflux/miniflux2/model"
|
||||
"github.com/miniflux/miniflux2/server/api/payload"
|
||||
"github.com/miniflux/miniflux2/server/core"
|
||||
|
@ -99,23 +100,11 @@ func (c *Controller) GetFeedEntries(ctx *core.Context, request *core.Request, re
|
|||
response.JSON().Standard(&payload.EntriesResponse{Total: count, Entries: entries})
|
||||
}
|
||||
|
||||
// SetEntryStatus is the API handler to change the status of an entry.
|
||||
// SetEntryStatus is the API handler to change the status of entries.
|
||||
func (c *Controller) SetEntryStatus(ctx *core.Context, request *core.Request, response *core.Response) {
|
||||
userID := ctx.UserID()
|
||||
|
||||
feedID, err := request.IntegerParam("feedID")
|
||||
if err != nil {
|
||||
response.JSON().BadRequest(err)
|
||||
return
|
||||
}
|
||||
|
||||
entryID, err := request.IntegerParam("entryID")
|
||||
if err != nil {
|
||||
response.JSON().BadRequest(err)
|
||||
return
|
||||
}
|
||||
|
||||
status, err := payload.DecodeEntryStatusPayload(request.Body())
|
||||
entryIDs, status, err := payload.DecodeEntryStatusPayload(request.Body())
|
||||
if err != nil {
|
||||
response.JSON().BadRequest(errors.New("Invalid JSON payload"))
|
||||
return
|
||||
|
@ -126,31 +115,10 @@ func (c *Controller) SetEntryStatus(ctx *core.Context, request *core.Request, re
|
|||
return
|
||||
}
|
||||
|
||||
builder := c.store.GetEntryQueryBuilder(userID, ctx.UserTimezone())
|
||||
builder.WithFeedID(feedID)
|
||||
builder.WithEntryID(entryID)
|
||||
|
||||
entry, err := builder.GetEntry()
|
||||
if err != nil {
|
||||
response.JSON().ServerError(errors.New("Unable to fetch this entry from the database"))
|
||||
if err := c.store.SetEntriesStatus(userID, entryIDs, status); err != nil {
|
||||
response.JSON().ServerError(errors.New("Unable to change entries status"))
|
||||
return
|
||||
}
|
||||
|
||||
if entry == nil {
|
||||
response.JSON().NotFound(errors.New("Entry not found"))
|
||||
return
|
||||
}
|
||||
|
||||
if err := c.store.SetEntriesStatus(userID, []int64{entry.ID}, status); err != nil {
|
||||
response.JSON().ServerError(errors.New("Unable to change entry status"))
|
||||
return
|
||||
}
|
||||
|
||||
entry, err = builder.GetEntry()
|
||||
if err != nil {
|
||||
response.JSON().ServerError(errors.New("Unable to fetch this entry from the database"))
|
||||
return
|
||||
}
|
||||
|
||||
response.JSON().Standard(entry)
|
||||
response.JSON().NoContent()
|
||||
}
|
||||
|
|
|
@ -7,8 +7,9 @@ package payload
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/miniflux/miniflux2/model"
|
||||
"io"
|
||||
|
||||
"github.com/miniflux/miniflux2/model"
|
||||
)
|
||||
|
||||
type EntriesResponse struct {
|
||||
|
@ -41,18 +42,19 @@ func DecodeURLPayload(data io.Reader) (string, error) {
|
|||
return p.URL, nil
|
||||
}
|
||||
|
||||
func DecodeEntryStatusPayload(data io.Reader) (string, error) {
|
||||
func DecodeEntryStatusPayload(data io.Reader) ([]int64, string, error) {
|
||||
type payload struct {
|
||||
EntryIDs []int64 `json:"entry_ids"`
|
||||
Status string `json:"status"`
|
||||
}
|
||||
|
||||
var p payload
|
||||
decoder := json.NewDecoder(data)
|
||||
if err := decoder.Decode(&p); err != nil {
|
||||
return "", fmt.Errorf("invalid JSON payload: %v", err)
|
||||
return nil, "", fmt.Errorf("invalid JSON payload: %v", err)
|
||||
}
|
||||
|
||||
return p.Status, nil
|
||||
return p.EntryIDs, p.Status, nil
|
||||
}
|
||||
|
||||
func DecodeFeedCreationPayload(data io.Reader) (string, int64, error) {
|
||||
|
|
|
@ -62,7 +62,7 @@ func getRoutes(cfg *config.Config, store *storage.Storage, feedHandler *feed.Han
|
|||
|
||||
router.Handle("/v1/feeds/{feedID}/entries", apiHandler.Use(apiController.GetFeedEntries)).Methods("GET")
|
||||
router.Handle("/v1/feeds/{feedID}/entries/{entryID}", apiHandler.Use(apiController.GetEntry)).Methods("GET")
|
||||
router.Handle("/v1/feeds/{feedID}/entries/{entryID}", apiHandler.Use(apiController.SetEntryStatus)).Methods("PUT")
|
||||
router.Handle("/v1/entries", apiHandler.Use(apiController.SetEntryStatus)).Methods("PUT")
|
||||
|
||||
router.Handle("/stylesheets/{name}.css", uiHandler.Use(uiController.Stylesheet)).Name("stylesheet").Methods("GET")
|
||||
router.Handle("/js", uiHandler.Use(uiController.Javascript)).Name("javascript").Methods("GET")
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Code generated by go generate; DO NOT EDIT.
|
||||
// 2017-11-24 16:04:49.314940117 -0800 PST m=+0.003107235
|
||||
// 2017-11-24 21:40:33.326996526 -0800 PST m=+0.007911995
|
||||
|
||||
package static
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Code generated by go generate; DO NOT EDIT.
|
||||
// 2017-11-24 16:04:49.315340301 -0800 PST m=+0.003507419
|
||||
// 2017-11-24 21:40:33.330122316 -0800 PST m=+0.011037785
|
||||
|
||||
package static
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Code generated by go generate; DO NOT EDIT.
|
||||
// 2017-11-24 16:04:49.316027642 -0800 PST m=+0.004194760
|
||||
// 2017-11-24 21:40:33.333049571 -0800 PST m=+0.013965040
|
||||
|
||||
package static
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Code generated by go generate; DO NOT EDIT.
|
||||
// 2017-11-24 16:04:49.318279667 -0800 PST m=+0.006446785
|
||||
// 2017-11-24 21:40:33.353262943 -0800 PST m=+0.034178412
|
||||
|
||||
package template
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Code generated by go generate; DO NOT EDIT.
|
||||
// 2017-11-24 16:04:49.316644027 -0800 PST m=+0.004811145
|
||||
// 2017-11-24 21:40:33.335450873 -0800 PST m=+0.016366342
|
||||
|
||||
package template
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Code generated by go generate; DO NOT EDIT.
|
||||
// 2017-11-24 16:04:49.314265268 -0800 PST m=+0.002432386
|
||||
// 2017-11-24 21:40:33.323320501 -0800 PST m=+0.004235970
|
||||
|
||||
package sql
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ func (s *Storage) GetFeedById(userID, feedID int64) (*model.Feed, error) {
|
|||
case err == sql.ErrNoRows:
|
||||
return nil, nil
|
||||
case err != nil:
|
||||
return nil, fmt.Errorf("Unable to fetch feed: %v", err)
|
||||
return nil, fmt.Errorf("unable to fetch feed: %v", err)
|
||||
}
|
||||
|
||||
return &feed, nil
|
||||
|
@ -170,7 +170,7 @@ func (s *Storage) CreateFeed(feed *model.Feed) error {
|
|||
).Scan(&feed.ID)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("Unable to create feed: %v", err)
|
||||
return fmt.Errorf("unable to create feed: %v", err)
|
||||
}
|
||||
|
||||
for i := 0; i < len(feed.Entries); i++ {
|
||||
|
|
Loading…
Reference in a new issue