package main type Service struct { Db Database } type DateInfo struct { Date string Tomorrow string Yesterday string } type EntryPage struct { Entry *Entry Detached bool Tracking *Entry } type RootPage struct { Entry *EntryPage Entries []*Entry } type TasksPage struct { Tasks []*Task } func NewService(db Database) *Service { return &Service{ Db: db, } } func (srv *Service) GetTasksPage() (*TasksPage, error) { tasks, err := srv.Db.GetTasks() if err != nil { return nil, err } return &TasksPage{ Tasks: tasks, }, nil } func (srv *Service) GetEntryPage(detached *Entry) (*EntryPage, error) { tracking, err := srv.Db.GetTracking() if err != nil { return nil, err } page := &EntryPage{ Entry: tracking, Detached: false, Tracking: tracking, } if detached != nil { page.Entry = detached page.Detached = true } return page, nil } func (srv *Service) GetRootPage() (*RootPage, error) { entry, err := srv.GetEntryPage(nil) if err != nil { return nil, err } entries, err := srv.Db.GetEntries() if err != nil { return nil, err } return &RootPage{ Entry: entry, Entries: entries, }, nil }