(apiDir string, tasks []*model.Task, archivedTasks []*model.Task)
| 177 | } |
| 178 | |
| 179 | func generateAnalyticsFiles(apiDir string, tasks []*model.Task, archivedTasks []*model.Task) error { |
| 180 | if err := writeJSONFile(apiDir, "graph.json", graph.NewGraph(tasks).ToJSON()); err != nil { |
| 181 | return err |
| 182 | } |
| 183 | |
| 184 | if err := writeJSONFile(apiDir, "stats.json", metrics.Calculate(tasks)); err != nil { |
| 185 | return err |
| 186 | } |
| 187 | |
| 188 | recs, err := next.Recommend(tasks, next.Options{Limit: 5, ArchivedTasks: archivedTasks}) |
| 189 | if err != nil { |
| 190 | return fmt.Errorf("failed to generate recommendations: %w", err) |
| 191 | } |
| 192 | if err := writeJSONFile(apiDir, "next.json", recs); err != nil { |
| 193 | return err |
| 194 | } |
| 195 | |
| 196 | tracksResult, err := tracks.Assign(tasks, tracks.Options{ArchivedTasks: archivedTasks}) |
| 197 | if err != nil { |
| 198 | return fmt.Errorf("failed to generate tracks: %w", err) |
| 199 | } |
| 200 | if err := writeJSONFile(apiDir, "tracks.json", tracksResult); err != nil { |
| 201 | return err |
| 202 | } |
| 203 | |
| 204 | return writeJSONFile(apiDir, "validate.json", validator.NewValidator(false).Validate(tasks)) |
| 205 | } |
| 206 | |
| 207 | func writeJSONFile(dir, filename string, v any) error { |
| 208 | if err := os.MkdirAll(dir, 0755); err != nil { |
no test coverage detected