mirror of
https://github.com/nkanaev/yarr.git
synced 2026-05-13 12:43:21 +00:00
use nullable for field updates
This commit is contained in:
@@ -292,10 +292,11 @@ func (s *Server) handleFeed(c *router.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if f_id, ok := body["folder_id"]; ok {
|
if f_id, ok := body["folder_id"]; ok {
|
||||||
params.UpdateFolderID = true
|
if f_id == nil {
|
||||||
if reflect.TypeOf(f_id).Kind() == reflect.Float64 {
|
params.FolderID = storage.SetNullable[int64](nil)
|
||||||
|
} else if reflect.TypeOf(f_id).Kind() == reflect.Float64 {
|
||||||
folderId := int64(f_id.(float64))
|
folderId := int64(f_id.(float64))
|
||||||
params.FolderID = &folderId
|
params.FolderID = storage.SetNullable(&folderId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if link, ok := body["feed_link"]; ok {
|
if link, ok := body["feed_link"]; ok {
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ func TestFeedIcons(t *testing.T) {
|
|||||||
db, _ := storage.New(":memory:")
|
db, _ := storage.New(":memory:")
|
||||||
icon := []byte("test")
|
icon := []byte("test")
|
||||||
feed := db.CreateFeed("", "", "", "", nil)
|
feed := db.CreateFeed("", "", "", "", nil)
|
||||||
db.UpdateFeed(feed.Id, storage.UpdateFeedParams{Icon: &icon, UpdateIcon: true})
|
db.UpdateFeed(feed.Id, storage.UpdateFeedParams{Icon: storage.SetNullable(&icon)})
|
||||||
log.SetOutput(os.Stderr)
|
log.SetOutput(os.Stderr)
|
||||||
|
|
||||||
recorder := httptest.NewRecorder()
|
recorder := httptest.NewRecorder()
|
||||||
|
|||||||
@@ -67,10 +67,8 @@ func (s *Storage) DeleteFeed(feedId int64) bool {
|
|||||||
type UpdateFeedParams struct {
|
type UpdateFeedParams struct {
|
||||||
Title *string
|
Title *string
|
||||||
FeedLink *string
|
FeedLink *string
|
||||||
FolderID *int64
|
FolderID Nullable[int64]
|
||||||
UpdateFolderID bool
|
Icon Nullable[[]byte]
|
||||||
Icon *[]byte
|
|
||||||
UpdateIcon bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error) {
|
func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error) {
|
||||||
@@ -85,10 +83,10 @@ func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error
|
|||||||
sql.Named("id", feedId),
|
sql.Named("id", feedId),
|
||||||
sql.Named("title", params.Title),
|
sql.Named("title", params.Title),
|
||||||
sql.Named("feed_link", params.FeedLink),
|
sql.Named("feed_link", params.FeedLink),
|
||||||
sql.Named("update_folder_id", params.UpdateFolderID),
|
sql.Named("update_folder_id", params.FolderID.Set),
|
||||||
sql.Named("folder_id", params.FolderID),
|
sql.Named("folder_id", params.FolderID.Value),
|
||||||
sql.Named("update_icon", params.UpdateIcon),
|
sql.Named("update_icon", params.Icon.Set),
|
||||||
sql.Named("icon", params.Icon),
|
sql.Named("icon", params.Icon.Value),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
|
|||||||
@@ -57,10 +57,8 @@ func TestUpdateFeed(t *testing.T) {
|
|||||||
title := "newtitle"
|
title := "newtitle"
|
||||||
db.UpdateFeed(feed1.Id, UpdateFeedParams{
|
db.UpdateFeed(feed1.Id, UpdateFeedParams{
|
||||||
Title: &title,
|
Title: &title,
|
||||||
FolderID: &folder.Id,
|
FolderID: SetNullable(&folder.Id),
|
||||||
UpdateFolderID: true,
|
Icon: SetNullable(&icon),
|
||||||
Icon: &icon,
|
|
||||||
UpdateIcon: true,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
feed2 := db.GetFeed(feed1.Id)
|
feed2 := db.GetFeed(feed1.Id)
|
||||||
|
|||||||
@@ -12,6 +12,15 @@ type Storage struct {
|
|||||||
db *sql.DB
|
db *sql.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Nullable[T any] struct {
|
||||||
|
Set bool
|
||||||
|
Value *T
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetNullable[T any](v *T) Nullable[T] {
|
||||||
|
return Nullable[T]{Set: true, Value: v}
|
||||||
|
}
|
||||||
|
|
||||||
func New(path string) (*Storage, error) {
|
func New(path string) (*Storage, error) {
|
||||||
if pos := strings.IndexRune(path, '?'); pos == -1 {
|
if pos := strings.IndexRune(path, '?'); pos == -1 {
|
||||||
params := "_journal=WAL&_sync=NORMAL&_busy_timeout=5000&cache=shared"
|
params := "_journal=WAL&_sync=NORMAL&_busy_timeout=5000&cache=shared"
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ func (w *Worker) FindFeedFavicon(feed storage.Feed) {
|
|||||||
log.Printf("Failed to find favicon for %s (%s): %s", feed.FeedLink, feed.Link, err)
|
log.Printf("Failed to find favicon for %s (%s): %s", feed.FeedLink, feed.Link, err)
|
||||||
}
|
}
|
||||||
if icon != nil {
|
if icon != nil {
|
||||||
w.db.UpdateFeed(feed.Id, storage.UpdateFeedParams{Icon: icon, UpdateIcon: true})
|
w.db.UpdateFeed(feed.Id, storage.UpdateFeedParams{Icon: storage.SetNullable(icon)})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user