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