internal/generator/search.go
64 Zeilen · 1.5 KB · Go
| 1 | package generator |
| 2 | |
| 3 | import ( |
| 4 | "encoding/json" |
| 5 | "log" |
| 6 | "os" |
| 7 | |
| 8 | "github.com/ruedigerp/newblog/internal/content" |
| 9 | ) |
| 10 | |
| 11 | type searchEntry struct { |
| 12 | Title string `json:"title"` |
| 13 | Slug string `json:"slug"` |
| 14 | Date string `json:"date"` |
| 15 | Tags []string `json:"tags"` |
| 16 | Categories []string `json:"categories"` |
| 17 | Preview string `json:"preview"` |
| 18 | Cover string `json:"cover"` |
| 19 | URL string `json:"url"` |
| 20 | } |
| 21 | |
| 22 | func GenerateSearchIndex(posts []*content.Post, outputPath string) { |
| 23 | entries := make([]searchEntry, 0, len(posts)) |
| 24 | |
| 25 | months := []string{ |
| 26 | "", "Januar", "Februar", "März", "April", "Mai", "Juni", |
| 27 | "Juli", "August", "September", "Oktober", "November", "Dezember", |
| 28 | } |
| 29 | |
| 30 | for _, p := range posts { |
| 31 | date := p.Date.Time |
| 32 | dateStr := date.Format("02.") + " " + months[date.Month()] + " " + date.Format("2006") |
| 33 | |
| 34 | tags := p.Tags |
| 35 | if tags == nil { |
| 36 | tags = []string{} |
| 37 | } |
| 38 | cats := p.Categories |
| 39 | if cats == nil { |
| 40 | cats = []string{} |
| 41 | } |
| 42 | |
| 43 | entries = append(entries, searchEntry{ |
| 44 | Title: p.Title, |
| 45 | Slug: p.Slug, |
| 46 | Date: dateStr, |
| 47 | Tags: tags, |
| 48 | Categories: cats, |
| 49 | Preview: p.GetPreview(), |
| 50 | Cover: p.GetCover(), |
| 51 | URL: "/posts/" + p.Slug + "/", |
| 52 | }) |
| 53 | } |
| 54 | |
| 55 | data, err := json.MarshalIndent(entries, "", " ") |
| 56 | if err != nil { |
| 57 | log.Printf("Error marshaling search index: %v", err) |
| 58 | return |
| 59 | } |
| 60 | |
| 61 | if err := os.WriteFile(outputPath, data, 0644); err != nil { |
| 62 | log.Printf("Error writing search index: %v", err) |
| 63 | } |
| 64 | } |