From 8a787117270a3a7de8776ce1d7d29d152edb8f28 Mon Sep 17 00:00:00 2001 From: Martin Pander Date: Tue, 8 Nov 2022 09:22:14 +0100 Subject: [PATCH] Make interfaces abstract --- backend/database/database.go | 7 +++---- backend/database/pgDatabase.go | 8 +++++--- backend/mapping/mapper.go | 9 ++++----- backend/mapping/mapperImpl.go | 7 +++++-- backend/mapping/mapperImpl_test.go | 8 ++++---- docs/diagrams/components.puml | 17 ++++++++--------- 6 files changed, 29 insertions(+), 27 deletions(-) diff --git a/backend/database/database.go b/backend/database/database.go index 1424194..c3727d4 100644 --- a/backend/database/database.go +++ b/backend/database/database.go @@ -2,11 +2,10 @@ package database import ( "time" - - "github.com/moustachioed/dash/backend/database/models" + // "github.com/moustachioed/dash/backend/database/models" ) type Database interface { - WriteJournalEntry(models.Journal) error - GetJournalEntryForDate(time.Time) (models.Journal, error) + WriteJournalEntry(interface{}) error + GetJournalEntryForDate(time.Time) (interface{}, error) } diff --git a/backend/database/pgDatabase.go b/backend/database/pgDatabase.go index d11a70f..30709ba 100644 --- a/backend/database/pgDatabase.go +++ b/backend/database/pgDatabase.go @@ -40,8 +40,9 @@ func (db *PgDatabase) migrate() { db.Db.AutoMigrate(&models.Journal{}) } -func (db *PgDatabase) WriteJournalEntry(entry models.Journal) error { - err := db.Db.Clauses(clause.OnConflict{UpdateAll: true}).Create(&entry).Error +func (db *PgDatabase) WriteJournalEntry(entry interface{}) error { + journal := entry.(models.Journal) + err := db.Db.Clauses(clause.OnConflict{UpdateAll: true}).Create(&journal).Error if err != nil { log.Print("Error writing journal entry to database.") return err @@ -50,8 +51,9 @@ func (db *PgDatabase) WriteJournalEntry(entry models.Journal) error { return nil } -func (db *PgDatabase) GetJournalEntryForDate(date time.Time) (models.Journal, error) { +func (db *PgDatabase) GetJournalEntryForDate(date time.Time) (interface{}, error) { entry := models.Journal{Date: datatypes.Date(date)} db.Db.First(&entry) + return entry, nil } diff --git a/backend/mapping/mapper.go b/backend/mapping/mapper.go index d77a5ec..c3a7588 100644 --- a/backend/mapping/mapper.go +++ b/backend/mapping/mapper.go @@ -2,14 +2,13 @@ package mapping import ( "time" - - api "github.com/moustachioed/dash/backend/dashapi" - db "github.com/moustachioed/dash/backend/database/models" + // api "github.com/moustachioed/dash/backend/dashapi" + // db "github.com/moustachioed/dash/backend/database/models" ) type Mapper interface { - JournalApiToDb(api.JournalEntry) db.Journal - JournalDbToApi(db.Journal) api.JournalEntry + JournalApiToDb(api interface{}) (db interface{}) + JournalDbToApi(db interface{}) (api interface{}) StringToDate(string) (time.Time, error) DateToString(time.Time) string diff --git a/backend/mapping/mapperImpl.go b/backend/mapping/mapperImpl.go index 9333ad8..1f7abc4 100644 --- a/backend/mapping/mapperImpl.go +++ b/backend/mapping/mapperImpl.go @@ -17,7 +17,8 @@ func NewMapperImpl() Mapper { return MapperImpl{} } -func (mapper MapperImpl) JournalApiToDb(apimodel api.JournalEntry) db.Journal { +func (mapper MapperImpl) JournalApiToDb(am interface{}) interface{} { + apimodel := am.(api.JournalEntry) date, err := time.Parse("2006-01-02", apimodel.Date) if err != nil { log.Printf("[ERROR] Could not parse date `%s`", apimodel.Date) @@ -53,7 +54,9 @@ func (mapper MapperImpl) JournalApiToDb(apimodel api.JournalEntry) db.Journal { } } -func (mapper MapperImpl) JournalDbToApi(dbmodel db.Journal) api.JournalEntry { +func (mapper MapperImpl) JournalDbToApi(dm interface{}) interface{} { + dbmodel := dm.(db.Journal) + dateValue, err := dbmodel.Date.Value() var date string if err != nil { diff --git a/backend/mapping/mapperImpl_test.go b/backend/mapping/mapperImpl_test.go index 00567d2..dad9fd5 100644 --- a/backend/mapping/mapperImpl_test.go +++ b/backend/mapping/mapperImpl_test.go @@ -22,7 +22,7 @@ func TestJournalApiToDbFullObject(t *testing.T) { Journal: "jtest", } - db := mapper.JournalApiToDb(api) + db := mapper.JournalApiToDb(api).(models.Journal) gotDate, _ := db.Date.Value() got := gotDate.(time.Time).Format("2006-01-02") @@ -80,7 +80,7 @@ func TestJournalApiToDbPartialObject(t *testing.T) { Journal: "", } - db := mapper.JournalApiToDb(api) + db := mapper.JournalApiToDb(api).(models.Journal) gotDate, _ := db.Date.Value() got := gotDate.(time.Time).Format("2006-01-02") @@ -145,7 +145,7 @@ func TestJournalDbToApiFullObject(t *testing.T) { Journal: journal, } - api := mapper.JournalDbToApi(db) + api := mapper.JournalDbToApi(db).(dashapi.JournalEntry) got, _ := json.Marshal(api.Date) wantDate := "\"2022-02-18\"" @@ -209,7 +209,7 @@ func TestJournalDbToApiPartialObject(t *testing.T) { Journal: journal, } - api := mapper.JournalDbToApi(db) + api := mapper.JournalDbToApi(db).(dashapi.JournalEntry) got, _ := json.Marshal(api.Date) wantDate := "\"2022-02-18\"" diff --git a/docs/diagrams/components.puml b/docs/diagrams/components.puml index 42a9826..afaa5db 100644 --- a/docs/diagrams/components.puml +++ b/docs/diagrams/components.puml @@ -1,11 +1,12 @@ -@startuml +@startuml "Backend Components" + package "Service" { component "API Service" as apiservice } package "Mapping" { interface "Mapper Interface" as mapperint - component "Mapper" as mapper + component "Mapper Implementation" as mapperimp } package "DashAPI" { @@ -15,7 +16,7 @@ package "DashAPI" { package "Database" { interface "Database Interface" as dbint component "Database Implementation" as dbimp - component "Database Model" as dbmodel + component "Database Models" as dbmodels } apiservice --> apimodels @@ -23,13 +24,11 @@ apiservice --> dbint apiservice --> mapperint dbimp .up.> dbint -dbimp --> dbmodel - - -mapper .up.> mapperint -mapper --> apimodels -mapper --> dbmodel +dbimp --> dbmodels +mapperimp .up.> mapperint +mapperimp --> apimodels +mapperimp --> dbmodels @enduml \ No newline at end of file