From 9027b3acb6560aad11694992a1322049634859b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=9E=E3=83=AA=E3=82=A6=E3=82=B9?= Date: Thu, 30 Dec 2021 11:42:43 -0500 Subject: [PATCH] Refactored/fixed article conversion --- database/database.go | 7 +++++-- database/helpers.go | 16 ++++++++++------ models/article.go | 22 +++++++++++----------- tui/mainscreen.go | 12 ++++++++++-- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/database/database.go b/database/database.go index a6619ff..babaeac 100644 --- a/database/database.go +++ b/database/database.go @@ -196,10 +196,13 @@ func (db *Database) Disconnect() { } func (db *Database) SubmitArticle(article *models.Article) (error) { - entity := structToMap(&article) + entity, err := structToMap(*article) + if err != nil { + return err + } entity["type"] = "article" - _, err := db.Store.Put(db.ctx, entity) + _, err = db.Store.Put(db.ctx, entity) return err } diff --git a/database/helpers.go b/database/helpers.go index c84f671..f22c281 100644 --- a/database/helpers.go +++ b/database/helpers.go @@ -2,7 +2,6 @@ package database import ( "context" - "encoding/json" "fmt" "os" "path/filepath" @@ -14,6 +13,7 @@ import ( "github.com/ipfs/go-ipfs/plugin/loader" "github.com/ipfs/go-ipfs/repo/fsrepo" icore "github.com/ipfs/interface-go-ipfs-core" + "github.com/mitchellh/mapstructure" ) func setupPlugins(path string) error { @@ -75,10 +75,14 @@ func getUnixfsNode(path string) (files.Node, error) { return f, nil } -func structToMap(v interface{}) (map[string]interface{}) { - var vMap map[string]interface{} - data, _ := json.Marshal(v) - json.Unmarshal(data, &vMap) - return vMap +func structToMap(v interface{}) (map[string]interface{}, error) { + vMap := &map[string]interface{}{} + + err := mapstructure.Decode(v, &vMap) + if err != nil { + return nil, err + } + + return *vMap, nil } diff --git a/models/article.go b/models/article.go index ce33083..8f0a21a 100644 --- a/models/article.go +++ b/models/article.go @@ -8,17 +8,17 @@ import ( ) type Article struct { - ID string `mmapstructure:"id" json:"-" validate:"uuid_rfc4122"` - InReplyToID string `mmapstructure:"in-reply-to-id" json:"-" validate:"omitempty,uuid_rfc4122"` - From string `mmapstructure:"from" json:"-" validate:"required,printascii"` - Newsgroup string `mmapstructure:"newsgroup" json:"-" validate:"required,min=2,max=80,printascii,lowercase"` - Subject string `mmapstructure:"subject" json:"-" validate:"required,min=2,max=128,printascii"` - Date int64 `mmapstructure:"date" json:"-" validate:"required,number"` - Organization string `mmapstructure:"organization" json:"-" validate:"printascii"` - Body string `mmapstructure:"body" json:"-" validate:"required,min=3,max=524288"` - - Replies []*Article `mmapstructure:"-" json:"-" validate:"-"` - Read bool `mmapstructure:"-" json:"read" validate:"-"` + ID string `mapstructure:"id" json:"-" validate:"uuid_rfc4122"` + InReplyToID string `mapstructure:"in-reply-to-id" json:"-" validate:"omitempty,uuid_rfc4122"` + From string `mapstructure:"from" json:"-" validate:"required,printascii"` + Newsgroup string `mapstructure:"newsgroup" json:"-" validate:"required,min=2,max=80,printascii,lowercase"` + Subject string `mapstructure:"subject" json:"-" validate:"required,min=2,max=128,printascii"` + Date int64 `mapstructure:"date" json:"-" validate:"required,number"` + Organization string `mapstructure:"organization" json:"-" validate:"printascii"` + Body string `mapstructure:"body" json:"-" validate:"required,min=3,max=524288"` + + Replies []*Article `mapstructure:"-" json:"-" validate:"-"` + Read bool `mapstructure:"-" json:"read" validate:"-"` } func NewArticle() (*Article) { diff --git a/tui/mainscreen.go b/tui/mainscreen.go index ea8fe5d..a043c51 100644 --- a/tui/mainscreen.go +++ b/tui/mainscreen.go @@ -471,7 +471,7 @@ func(mainscreen *Mainscreen) replyToArticle(article *models.Article) { Rune: 'y', Callback: func() { if mainscreen.T.CallbackSubmitArticle != nil { - mainscreen.T.CallbackSubmitArticle(&updatedNewArticle) + err = mainscreen.T.CallbackSubmitArticle(&updatedNewArticle) } return }, @@ -482,6 +482,14 @@ func(mainscreen *Mainscreen) replyToArticle(article *models.Article) { return }, }, - }) + }, + ) + + if err != nil { + mainscreen.T.ShowErrorModal(err.Error()) + return + } + + return }