diff --git a/domain/model/entry.go b/domain/model/entry.go index 95f8b1c..a23d66d 100644 --- a/domain/model/entry.go +++ b/domain/model/entry.go @@ -9,8 +9,33 @@ type Entry interface { Content() EntryContent PublishedAt() *time.Time MetaData() interface{} - Create(id string, publishedAt *time.Time, metaData EntryMetaData) error + // Create(id string, publishedAt *time.Time, metaData EntryMetaData) error + + SetID(id string) + SetPublishedAt(publishedAt *time.Time) + SetMetaData(metaData interface{}) } type EntryMetaData interface { } + +type EntryBase struct { + id string + publishedAt *time.Time +} + +func (e *EntryBase) ID() string { + return e.id +} + +func (e *EntryBase) PublishedAt() *time.Time { + return e.publishedAt +} + +func (e *EntryBase) SetID(id string) { + e.id = id +} + +func (e *EntryBase) SetPublishedAt(publishedAt *time.Time) { + e.publishedAt = publishedAt +} diff --git a/domain/model/image_entry.go b/domain/model/image_entry.go index 9b92545..de15ac4 100644 --- a/domain/model/image_entry.go +++ b/domain/model/image_entry.go @@ -1,11 +1,8 @@ package model -import "time" - type ImageEntry struct { - id string - publishedAt *time.Time - meta ImageEntryMetaData + EntryBase + meta ImageEntryMetaData } type ImageEntryMetaData struct { @@ -13,25 +10,14 @@ type ImageEntryMetaData struct { Content string `owl:"inputType=text widget=textarea"` } -func (e *ImageEntry) ID() string { - return e.id -} - func (e *ImageEntry) Content() EntryContent { return EntryContent(e.meta.Content) } -func (e *ImageEntry) PublishedAt() *time.Time { - return e.publishedAt -} - func (e *ImageEntry) MetaData() interface{} { return &e.meta } -func (e *ImageEntry) Create(id string, publishedAt *time.Time, metaData EntryMetaData) error { - e.id = id - e.publishedAt = publishedAt +func (e *ImageEntry) SetMetaData(metaData interface{}) { e.meta = *metaData.(*ImageEntryMetaData) - return nil } diff --git a/domain/model/post_entry.go b/domain/model/post_entry.go index ad4c336..dababd3 100644 --- a/domain/model/post_entry.go +++ b/domain/model/post_entry.go @@ -1,11 +1,8 @@ package model -import "time" - type PostEntry struct { - id string - publishedAt *time.Time - meta PostEntryMetaData + EntryBase + meta PostEntryMetaData } type PostEntryMetaData struct { @@ -13,25 +10,14 @@ type PostEntryMetaData struct { Content string `owl:"inputType=text widget=textarea"` } -func (e *PostEntry) ID() string { - return e.id -} - func (e *PostEntry) Content() EntryContent { return EntryContent(e.meta.Content) } -func (e *PostEntry) PublishedAt() *time.Time { - return e.publishedAt -} - func (e *PostEntry) MetaData() interface{} { return &e.meta } -func (e *PostEntry) Create(id string, publishedAt *time.Time, metaData EntryMetaData) error { - e.id = id - e.publishedAt = publishedAt +func (e *PostEntry) SetMetaData(metaData interface{}) { e.meta = *metaData.(*PostEntryMetaData) - return nil } diff --git a/infra/entry_repository.go b/infra/entry_repository.go index 1815079..611523f 100644 --- a/infra/entry_repository.go +++ b/infra/entry_repository.go @@ -41,7 +41,9 @@ func (r *DefaultEntryRepo) Create(entry model.Entry, publishedAt *time.Time, met id := uuid.New().String() _, err = r.db.Exec("INSERT INTO entries (id, type, published_at, meta_data) VALUES (?, ?, ?, ?)", id, t, publishedAt, metaDataJson) - entry.Create(id, publishedAt, metaData) + entry.SetID(id) + entry.SetPublishedAt(publishedAt) + entry.SetMetaData(metaData) return err } @@ -146,6 +148,8 @@ func (r *DefaultEntryRepo) sqlEntryToEntry(entry sqlEntry) (model.Entry, error) } metaData := reflect.New(reflect.TypeOf(e.MetaData()).Elem()).Interface() json.Unmarshal([]byte(*entry.MetaData), metaData) - e.Create(entry.Id, entry.PublishedAt, metaData) + e.SetID(entry.Id) + e.SetPublishedAt(entry.PublishedAt) + e.SetMetaData(metaData) return e, nil } diff --git a/test/mock_entry.go b/test/mock_entry.go index aafcc25..69b7acf 100644 --- a/test/mock_entry.go +++ b/test/mock_entry.go @@ -12,30 +12,18 @@ type MockEntryMetaData struct { } type MockEntry struct { - id string - publishedAt *time.Time - metaData *MockEntryMetaData -} - -func (e *MockEntry) ID() string { - return e.id + model.EntryBase + metaData *MockEntryMetaData } func (e *MockEntry) Content() model.EntryContent { return model.EntryContent(e.metaData.Str) } -func (e *MockEntry) PublishedAt() *time.Time { - return e.publishedAt -} - func (e *MockEntry) MetaData() interface{} { return e.metaData } -func (e *MockEntry) Create(id string, publishedAt *time.Time, metaData model.EntryMetaData) error { - e.id = id - e.publishedAt = publishedAt +func (e *MockEntry) SetMetaData(metaData interface{}) { e.metaData = metaData.(*MockEntryMetaData) - return nil } diff --git a/web/editor/entry_form_test.go b/web/editor/entry_form_test.go index 79396a1..4fc20c9 100644 --- a/web/editor/entry_form_test.go +++ b/web/editor/entry_form_test.go @@ -14,7 +14,6 @@ import ( "path/filepath" "reflect" "testing" - "time" "github.com/stretchr/testify/require" ) @@ -67,32 +66,20 @@ func (f *MockFormData) FormValue(key string, defaultValue ...string) string { } type MockEntry struct { - id string - publishedAt *time.Time - metaData MockEntryMetaData -} - -func (e *MockEntry) ID() string { - return e.id + model.EntryBase + metaData MockEntryMetaData } func (e *MockEntry) Content() model.EntryContent { return model.EntryContent(e.metaData.Content) } -func (e *MockEntry) PublishedAt() *time.Time { - return e.publishedAt -} - func (e *MockEntry) MetaData() interface{} { return &e.metaData } -func (e *MockEntry) Create(id string, publishedAt *time.Time, metaData model.EntryMetaData) error { - e.id = id - e.publishedAt = publishedAt +func (e *MockEntry) SetMetaData(metaData interface{}) { e.metaData = *metaData.(*MockEntryMetaData) - return nil } func TestFieldToFormField(t *testing.T) {