389 lines
8.1 KiB
Go
389 lines
8.1 KiB
Go
package mapping
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"time"
|
|
|
|
"gorm.io/datatypes"
|
|
|
|
api "github.com/moustachioed/dash/backend/dashapi"
|
|
db "github.com/moustachioed/dash/backend/database/models"
|
|
)
|
|
|
|
type MapperImpl struct{}
|
|
|
|
func NewMapperImpl() Mapper {
|
|
return MapperImpl{}
|
|
}
|
|
|
|
func (mapper MapperImpl) JournalApiToDs(am interface{}) interface{} {
|
|
apimodel := am.(api.JournalEntry)
|
|
date, err := mapper.StringToDate(apimodel.Date)
|
|
if err != nil {
|
|
log.Printf("[ERROR] Could not parse date `%s`", apimodel.Date)
|
|
}
|
|
|
|
thankful, err := json.Marshal(apimodel.Thankful)
|
|
if err != nil {
|
|
thankful = nil
|
|
}
|
|
|
|
lookingForward, err := json.Marshal(apimodel.LookingForward)
|
|
if err != nil {
|
|
lookingForward = nil
|
|
}
|
|
|
|
beenGreat, err := json.Marshal(apimodel.BeenGreat)
|
|
if err != nil {
|
|
beenGreat = nil
|
|
}
|
|
|
|
doBetter, err := json.Marshal(apimodel.DoBetter)
|
|
if err != nil {
|
|
doBetter = nil
|
|
}
|
|
|
|
return db.Journal{
|
|
Date: datatypes.Date(date),
|
|
Thankful: datatypes.JSON(thankful),
|
|
LookingForward: datatypes.JSON(lookingForward),
|
|
BeenGreat: datatypes.JSON(beenGreat),
|
|
DoBetter: datatypes.JSON(doBetter),
|
|
Journal: apimodel.Journal,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) JournalDsToApi(dm interface{}) interface{} {
|
|
dbmodel := dm.(db.Journal)
|
|
|
|
dateValue, err := dbmodel.Date.Value()
|
|
var date string
|
|
if err != nil {
|
|
date = ""
|
|
} else {
|
|
// date = dateValue.(time.Time).Format("2006-01-02")
|
|
date = mapper.DateToString(dateValue.(time.Time))
|
|
}
|
|
|
|
var thankful []string
|
|
err = json.Unmarshal(dbmodel.Thankful, &thankful)
|
|
if err != nil {
|
|
thankful = nil
|
|
}
|
|
|
|
var lookingForward []string
|
|
err = json.Unmarshal(dbmodel.LookingForward, &lookingForward)
|
|
if err != nil {
|
|
lookingForward = nil
|
|
}
|
|
|
|
var beenGreat []string
|
|
err = json.Unmarshal(dbmodel.BeenGreat, &beenGreat)
|
|
if err != nil {
|
|
beenGreat = nil
|
|
}
|
|
|
|
var doBetter []string
|
|
err = json.Unmarshal(dbmodel.DoBetter, &doBetter)
|
|
if err != nil {
|
|
doBetter = nil
|
|
}
|
|
|
|
return api.JournalEntry{
|
|
Date: date,
|
|
Thankful: thankful,
|
|
LookingForward: lookingForward,
|
|
BeenGreat: beenGreat,
|
|
DoBetter: doBetter,
|
|
Journal: dbmodel.Journal,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) PlanDayApiToDs(am interface{}) interface{} {
|
|
apimodel := am.(api.PlanDay)
|
|
date, err := mapper.StringToDate(apimodel.Date)
|
|
if err != nil {
|
|
log.Printf("[ERROR] Could not parse date `%s`", apimodel.Date)
|
|
}
|
|
|
|
morning, err := json.Marshal(apimodel.Morning)
|
|
if err != nil {
|
|
morning = nil
|
|
}
|
|
|
|
midday, err := json.Marshal(apimodel.Midday)
|
|
if err != nil {
|
|
midday = nil
|
|
}
|
|
|
|
afternoon, err := json.Marshal(apimodel.Afternoon)
|
|
if err != nil {
|
|
afternoon = nil
|
|
}
|
|
|
|
evening, err := json.Marshal(apimodel.Evening)
|
|
if err != nil {
|
|
evening = nil
|
|
}
|
|
|
|
pleasant, err := json.Marshal(apimodel.Pleasant)
|
|
if err != nil {
|
|
pleasant = nil
|
|
}
|
|
|
|
reminders, err := json.Marshal(apimodel.Reminders)
|
|
if err != nil {
|
|
reminders = nil
|
|
}
|
|
|
|
return db.PlanDay{
|
|
Date: datatypes.Date(date),
|
|
Morning: datatypes.JSON(morning),
|
|
Midday: datatypes.JSON(midday),
|
|
Afternoon: datatypes.JSON(afternoon),
|
|
Evening: datatypes.JSON(evening),
|
|
Pleasant: datatypes.JSON(pleasant),
|
|
Reminders: datatypes.JSON(reminders),
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) PlanDayDsToApi(dm interface{}) interface{} {
|
|
dbmodel := dm.(db.PlanDay)
|
|
|
|
dateValue, err := dbmodel.Date.Value()
|
|
var date string
|
|
if err != nil {
|
|
date = ""
|
|
} else {
|
|
date = mapper.DateToString(dateValue.(time.Time))
|
|
}
|
|
|
|
var morning []string
|
|
err = json.Unmarshal(dbmodel.Morning, &morning)
|
|
if err != nil {
|
|
morning = nil
|
|
}
|
|
|
|
var midday []string
|
|
err = json.Unmarshal(dbmodel.Midday, &midday)
|
|
if err != nil {
|
|
midday = nil
|
|
}
|
|
|
|
var afternoon []string
|
|
err = json.Unmarshal(dbmodel.Afternoon, &afternoon)
|
|
if err != nil {
|
|
afternoon = nil
|
|
}
|
|
|
|
var evening []string
|
|
err = json.Unmarshal(dbmodel.Evening, &evening)
|
|
if err != nil {
|
|
evening = nil
|
|
}
|
|
|
|
var pleasant []string
|
|
err = json.Unmarshal(dbmodel.Pleasant, &pleasant)
|
|
if err != nil {
|
|
pleasant = nil
|
|
}
|
|
|
|
var reminders []string
|
|
err = json.Unmarshal(dbmodel.Reminders, &reminders)
|
|
if err != nil {
|
|
reminders = nil
|
|
}
|
|
|
|
return api.PlanDay{
|
|
Date: date,
|
|
Morning: morning,
|
|
Midday: midday,
|
|
Afternoon: afternoon,
|
|
Evening: evening,
|
|
Pleasant: pleasant,
|
|
Reminders: reminders,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) PlanWeekApiToDs(am interface{}) (dm interface{}) {
|
|
apimodel := am.(api.PlanWeek)
|
|
date, err := mapper.StringToDate(apimodel.Date)
|
|
if err != nil {
|
|
log.Printf("[ERROR] Could not parse date `%s`", apimodel.Date)
|
|
}
|
|
|
|
items, err := json.Marshal(apimodel.Items)
|
|
if err != nil {
|
|
items = nil
|
|
}
|
|
|
|
return db.PlanWeek{
|
|
Date: datatypes.Date(date),
|
|
Items: items,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) PlanWeekDsToApi(dm interface{}) (am interface{}) {
|
|
dbmodel := dm.(db.PlanWeek)
|
|
|
|
dateValue, err := dbmodel.Date.Value()
|
|
var date string
|
|
if err != nil {
|
|
date = ""
|
|
} else {
|
|
date = mapper.DateToString(dateValue.(time.Time))
|
|
}
|
|
|
|
var items []api.PlanWeekItem
|
|
err = json.Unmarshal(dbmodel.Items, &items)
|
|
if err != nil {
|
|
items = nil
|
|
}
|
|
|
|
return api.PlanWeek{
|
|
Date: date,
|
|
Items: items,
|
|
}
|
|
}
|
|
|
|
// write a function that takes a month and returns a plan month
|
|
func (mapper MapperImpl) PlanMonthApiToDs(am interface{}) (dm interface{}) {
|
|
apimodel := am.(api.PlanMonth)
|
|
date, err := mapper.StringToDate(apimodel.Date)
|
|
if err != nil {
|
|
log.Printf("[ERROR] Could not parse date `%s`", apimodel.Date)
|
|
}
|
|
|
|
items, err := json.Marshal(apimodel.Items)
|
|
if err != nil {
|
|
items = nil
|
|
}
|
|
|
|
return db.PlanMonth{
|
|
Date: datatypes.Date(date),
|
|
Items: items,
|
|
}
|
|
}
|
|
|
|
// write a function that takes a plan month and returns a month
|
|
func (mapper MapperImpl) PlanMonthDsToApi(dm interface{}) (am interface{}) {
|
|
dbmodel := dm.(db.PlanMonth)
|
|
|
|
dateValue, err := dbmodel.Date.Value()
|
|
var date string
|
|
if err != nil {
|
|
date = ""
|
|
} else {
|
|
date = mapper.DateToString(dateValue.(time.Time))
|
|
}
|
|
|
|
var items []string
|
|
err = json.Unmarshal(dbmodel.Items, &items)
|
|
if err != nil {
|
|
items = nil
|
|
}
|
|
|
|
return api.PlanMonth{
|
|
Date: date,
|
|
Items: items,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) TrackingCategoriesDbToApi(dm interface{}) (am interface{}) {
|
|
dbmodel := dm.([]db.TrackingCategory)
|
|
|
|
var categories []api.TrackingCategory
|
|
for _, category := range dbmodel {
|
|
var items []string
|
|
err := json.Unmarshal(category.Items, &items)
|
|
if err != nil {
|
|
items = nil
|
|
}
|
|
|
|
categories = append(categories, api.TrackingCategory{
|
|
Name: category.Name,
|
|
Type: category.Type,
|
|
Items: items,
|
|
})
|
|
}
|
|
|
|
return api.TrackingCategories{
|
|
Categories: categories,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) TrackingEntryDbToApi(dm interface{}) (am interface{}) {
|
|
dbmodel := dm.([]db.TrackingItem)
|
|
|
|
var items []api.TrackingItem
|
|
|
|
for _, item := range dbmodel {
|
|
items = append(items, api.TrackingItem{
|
|
Date: mapper.DateToString(item.Date),
|
|
Type: item.Type,
|
|
Value: item.Value,
|
|
})
|
|
}
|
|
|
|
if len(items) == 0 {
|
|
return api.TrackingEntry{}
|
|
} else {
|
|
return api.TrackingEntry{
|
|
Date: mapper.DateToString(dbmodel[0].Date),
|
|
Items: items,
|
|
}
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) TrackingEntryApiToDb(am interface{}) (dm interface{}) {
|
|
apimodel := am.(api.TrackingEntry)
|
|
|
|
date, err := mapper.StringToDate(apimodel.Date)
|
|
if err != nil {
|
|
log.Printf("[ERROR] Could not parse date `%s`", apimodel.Date)
|
|
}
|
|
|
|
var items []db.TrackingItem
|
|
for _, item := range apimodel.Items {
|
|
items = append(items, db.TrackingItem{
|
|
Date: date,
|
|
Type: item.Type,
|
|
Value: item.Value,
|
|
})
|
|
}
|
|
|
|
return items
|
|
}
|
|
|
|
func (mapper MapperImpl) InboxApiToDs(am interface{}) (dm interface{}) {
|
|
apimodel := am.(api.InboxItem)
|
|
|
|
return db.Inbox{
|
|
Id: apimodel.Id,
|
|
Item: apimodel.Item,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) InboxDsToApi(dm interface{}) (am interface{}) {
|
|
dbmodel := dm.(db.Inbox)
|
|
|
|
return api.InboxItem{
|
|
Id: dbmodel.Id,
|
|
Item: dbmodel.Item,
|
|
}
|
|
}
|
|
|
|
func (mapper MapperImpl) StringToDate(dateString string) (time.Time, error) {
|
|
date, err := time.Parse("2006-01-02", dateString)
|
|
if err != nil {
|
|
log.Printf("[ERROR] Could not parse date string %s", dateString)
|
|
return time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC), err
|
|
}
|
|
return date, nil
|
|
}
|
|
|
|
func (mapper MapperImpl) DateToString(date time.Time) string {
|
|
return date.Format("2006-01-02")
|
|
}
|