package models import "time" // Task represents a task from Todoist type Task struct { ID string `json:"id"` Content string `json:"content"` Description string `json:"description"` ProjectID string `json:"project_id"` ProjectName string `json:"project_name"` DueDate *time.Time `json:"due_date,omitempty"` Priority int `json:"priority"` Completed bool `json:"completed"` Labels []string `json:"labels"` URL string `json:"url"` CreatedAt time.Time `json:"created_at"` } // Note represents a note from Obsidian type Note struct { Filename string `json:"filename"` Title string `json:"title"` Content string `json:"content"` // First 200 chars or full content Modified time.Time `json:"modified"` Path string `json:"path"` Tags []string `json:"tags"` } // Meal represents a meal from PlanToEat type Meal struct { ID string `json:"id"` RecipeName string `json:"recipe_name"` Date time.Time `json:"date"` MealType string `json:"meal_type"` // breakfast, lunch, dinner RecipeURL string `json:"recipe_url"` } // List represents a Trello list type List struct { ID string `json:"id"` Name string `json:"name"` } // Board represents a Trello board type Board struct { ID string `json:"id"` Name string `json:"name"` Cards []Card `json:"cards"` Lists []List `json:"lists"` } // Card represents a Trello card type Card struct { ID string `json:"id"` Name string `json:"name"` ListID string `json:"list_id"` ListName string `json:"list_name"` DueDate *time.Time `json:"due_date,omitempty"` URL string `json:"url"` } // Project represents a Todoist project type Project struct { ID string `json:"id"` Name string `json:"name"` } // CacheMetadata tracks when data was last fetched type CacheMetadata struct { Key string `json:"key"` LastFetch time.Time `json:"last_fetch"` TTLMinutes int `json:"ttl_minutes"` } // IsCacheValid checks if the cache is still valid based on TTL func (cm *CacheMetadata) IsCacheValid() bool { expiryTime := cm.LastFetch.Add(time.Duration(cm.TTLMinutes) * time.Minute) return time.Now().Before(expiryTime) } // DashboardData aggregates all data for the main view type DashboardData struct { Tasks []Task `json:"tasks"` Notes []Note `json:"notes"` Meals []Meal `json:"meals"` Boards []Board `json:"boards,omitempty"` Projects []Project `json:"projects,omitempty"` LastUpdated time.Time `json:"last_updated"` Errors []string `json:"errors,omitempty"` }