From 2f81bf86780f6391c0ba81ea76da71582543250d Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Wed, 21 Feb 2024 20:24:18 +0100 Subject: [PATCH] unified interface Formable --- app/config_register.go | 3 +-- domain/model/entry.go | 3 +-- domain/model/form_data.go | 5 +++++ entry_types/article.go | 9 ++++----- entry_types/bookmark.go | 11 +++++------ entry_types/image.go | 19 +++++++++---------- entry_types/note.go | 7 +++---- entry_types/page.go | 9 ++++----- entry_types/recipe.go | 15 +++++++-------- entry_types/reply.go | 11 +++++------ plugings/instagram.go | 9 ++++----- test/mock_entry.go | 2 +- web/activity_pub_handler.go | 11 +++++------ web/admin_handler.go | 4 ++-- web/editor_handler.go | 6 ++++-- 15 files changed, 60 insertions(+), 64 deletions(-) diff --git a/app/config_register.go b/app/config_register.go index 01765a3..10febdb 100644 --- a/app/config_register.go +++ b/app/config_register.go @@ -3,8 +3,7 @@ package app import "owl-blogs/domain/model" type AppConfig interface { - Form(binSvc model.BinaryStorageInterface) string - ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (AppConfig, error) + model.Formable } type ConfigRegister struct { diff --git a/domain/model/entry.go b/domain/model/entry.go index 84a4a57..b8d2a0d 100644 --- a/domain/model/entry.go +++ b/domain/model/entry.go @@ -23,8 +23,7 @@ type Entry interface { } type EntryMetaData interface { - Form(binSvc BinaryStorageInterface) string - ParseFormData(data HttpFormData, binSvc BinaryStorageInterface) (EntryMetaData, error) + Formable } type EntryBase struct { diff --git a/domain/model/form_data.go b/domain/model/form_data.go index 396120b..a4f7a79 100644 --- a/domain/model/form_data.go +++ b/domain/model/form_data.go @@ -2,6 +2,11 @@ package model import "mime/multipart" +type Formable interface { + Form(binSvc BinaryStorageInterface) string + ParseFormData(data HttpFormData, binSvc BinaryStorageInterface) error +} + type HttpFormData interface { // FormFile returns the first file by key from a MultipartForm. FormFile(key string) (*multipart.FileHeader, error) diff --git a/entry_types/article.go b/entry_types/article.go index 8cd10ad..57b12e9 100644 --- a/entry_types/article.go +++ b/entry_types/article.go @@ -23,11 +23,10 @@ func (meta *ArticleMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (*ArticleMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { - return &ArticleMetaData{ - Title: data.FormValue("title"), - Content: data.FormValue("content"), - }, nil +func (meta *ArticleMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { + meta.Title = data.FormValue("title") + meta.Content = data.FormValue("content") + return nil } func (e *Article) Title() string { diff --git a/entry_types/bookmark.go b/entry_types/bookmark.go index 19b5d3e..7b6bb7f 100644 --- a/entry_types/bookmark.go +++ b/entry_types/bookmark.go @@ -24,12 +24,11 @@ func (meta *BookmarkMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (*BookmarkMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { - return &BookmarkMetaData{ - Title: data.FormValue("title"), - Url: data.FormValue("url"), - Content: data.FormValue("content"), - }, nil +func (meta *BookmarkMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { + meta.Title = data.FormValue("title") + meta.Url = data.FormValue("url") + meta.Content = data.FormValue("content") + return nil } func (e *Bookmark) Title() string { diff --git a/entry_types/image.go b/entry_types/image.go index acb9cdc..fcaaed6 100644 --- a/entry_types/image.go +++ b/entry_types/image.go @@ -24,35 +24,34 @@ func (meta *ImageMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (meta *ImageMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { +func (meta *ImageMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { file, err := data.FormFile("image") var imgId = meta.ImageId if err != nil && imgId == "" { - return nil, err + return err } else if err == nil { fileData, err := file.Open() if err != nil { - return nil, err + return err } defer fileData.Close() fileBytes := make([]byte, file.Size) _, err = fileData.Read(fileBytes) if err != nil { - return nil, err + return err } bin, err := binSvc.Create(file.Filename, fileBytes) if err != nil { - return nil, err + return err } imgId = bin.Id } - return &ImageMetaData{ - ImageId: imgId, - Title: data.FormValue("title"), - Content: data.FormValue("content"), - }, nil + meta.ImageId = imgId + meta.Title = data.FormValue("title") + meta.Content = data.FormValue("content") + return nil } func (e *Image) Title() string { diff --git a/entry_types/note.go b/entry_types/note.go index f828465..636919b 100644 --- a/entry_types/note.go +++ b/entry_types/note.go @@ -22,10 +22,9 @@ func (meta *NoteMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (*NoteMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { - return &NoteMetaData{ - Content: data.FormValue("content"), - }, nil +func (meta *NoteMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { + meta.Content = data.FormValue("content") + return nil } func (e *Note) Title() string { diff --git a/entry_types/page.go b/entry_types/page.go index 37a7c97..e923522 100644 --- a/entry_types/page.go +++ b/entry_types/page.go @@ -23,11 +23,10 @@ func (meta *PageMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (*PageMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { - return &PageMetaData{ - Title: data.FormValue("title"), - Content: data.FormValue("content"), - }, nil +func (meta *PageMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { + meta.Title = data.FormValue("title") + meta.Content = data.FormValue("content") + return nil } func (e *Page) Title() string { diff --git a/entry_types/recipe.go b/entry_types/recipe.go index f0eb117..d06f87d 100644 --- a/entry_types/recipe.go +++ b/entry_types/recipe.go @@ -27,7 +27,7 @@ func (meta *RecipeMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (*RecipeMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { +func (meta *RecipeMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { ings := strings.Split(data.FormValue("ingredients"), "\n") clean := make([]string, 0) for _, ing := range ings { @@ -35,13 +35,12 @@ func (*RecipeMetaData) ParseFormData(data model.HttpFormData, binSvc model.Binar clean = append(clean, strings.TrimSpace(ing)) } } - return &RecipeMetaData{ - Title: data.FormValue("title"), - Yield: data.FormValue("yield"), - Duration: data.FormValue("duration"), - Ingredients: clean, - Content: data.FormValue("content"), - }, nil + meta.Title = data.FormValue("title") + meta.Yield = data.FormValue("yield") + meta.Duration = data.FormValue("duration") + meta.Ingredients = clean + meta.Content = data.FormValue("content") + return nil } func (e *Recipe) Title() string { diff --git a/entry_types/reply.go b/entry_types/reply.go index 1e088f6..8cb7bde 100644 --- a/entry_types/reply.go +++ b/entry_types/reply.go @@ -24,12 +24,11 @@ func (meta *ReplyMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (*ReplyMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { - return &ReplyMetaData{ - Title: data.FormValue("title"), - Url: data.FormValue("url"), - Content: data.FormValue("content"), - }, nil +func (meta *ReplyMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { + meta.Title = data.FormValue("title") + meta.Url = data.FormValue("url") + meta.Content = data.FormValue("content") + return nil } func (e *Reply) Title() string { diff --git a/plugings/instagram.go b/plugings/instagram.go index 5e045c4..122d8f7 100644 --- a/plugings/instagram.go +++ b/plugings/instagram.go @@ -28,11 +28,10 @@ func (cfg *InstagramConfig) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements app.AppConfig. -func (*InstagramConfig) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (app.AppConfig, error) { - return &InstagramConfig{ - User: data.FormValue("User"), - Password: data.FormValue("Password"), - }, nil +func (cfg *InstagramConfig) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { + cfg.User = data.FormValue("User") + cfg.Password = data.FormValue("Password") + return nil } func RegisterInstagram( diff --git a/test/mock_entry.go b/test/mock_entry.go index a21754f..ccfc28b 100644 --- a/test/mock_entry.go +++ b/test/mock_entry.go @@ -18,7 +18,7 @@ func (*MockEntryMetaData) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements model.EntryMetaData. -func (*MockEntryMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (model.EntryMetaData, error) { +func (*MockEntryMetaData) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { panic("unimplemented") } diff --git a/web/activity_pub_handler.go b/web/activity_pub_handler.go index 6783184..d41f841 100644 --- a/web/activity_pub_handler.go +++ b/web/activity_pub_handler.go @@ -33,12 +33,11 @@ func (cfg *ActivityPubConfig) Form(binSvc model.BinaryStorageInterface) string { } // ParseFormData implements app.AppConfig. -func (*ActivityPubConfig) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) (app.AppConfig, error) { - return &ActivityPubConfig{ - PreferredUsername: data.FormValue("PreferredUsername"), - PublicKeyPem: data.FormValue("PublicKeyPem"), - PrivateKeyPem: data.FormValue("PrivateKeyPem"), - }, nil +func (cfg *ActivityPubConfig) ParseFormData(data model.HttpFormData, binSvc model.BinaryStorageInterface) error { + cfg.PreferredUsername = data.FormValue("PreferredUsername") + cfg.PublicKeyPem = data.FormValue("PublicKeyPem") + cfg.PrivateKeyPem = data.FormValue("PrivateKeyPem") + return nil } type WebfingerResponse struct { diff --git a/web/admin_handler.go b/web/admin_handler.go index eb249f5..e516123 100644 --- a/web/admin_handler.go +++ b/web/admin_handler.go @@ -92,12 +92,12 @@ func (h *adminHandler) HandleConfigPost(c *fiber.Ctx) error { return c.SendStatus(404) } - newConfig, err := config.ParseFormData(c, h.binSvc) + err := config.ParseFormData(c, h.binSvc) if err != nil { return err } - h.configRepo.Update(configName, newConfig) + h.configRepo.Update(configName, config) return c.Redirect("") diff --git a/web/editor_handler.go b/web/editor_handler.go index 710ae85..8043554 100644 --- a/web/editor_handler.go +++ b/web/editor_handler.go @@ -59,7 +59,8 @@ func (h *EditorHandler) HandlePostNew(c *fiber.Ctx) error { return err } - entryMeta, err := entry.MetaData().ParseFormData(c, h.binSvc) + entryMeta := entry.MetaData() + err = entryMeta.ParseFormData(c, h.binSvc) if err != nil { return err } @@ -106,7 +107,8 @@ func (h *EditorHandler) HandlePostEdit(c *fiber.Ctx) error { } // get form data - meta, err := entry.MetaData().ParseFormData(c, h.binSvc) + meta := entry.MetaData() + err = meta.ParseFormData(c, h.binSvc) if err != nil { return err }