aboutsummaryrefslogtreecommitdiff
path: root/backend/logs.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-10-03 10:23:35 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-10-03 10:23:35 +0200
commit2d131a363645e4a32e47036742087acc4bf1379f (patch)
tree19bdca3c4acbfcf0c1b6a1e6cb8fb48036e964f1 /backend/logs.go
parent0bcfe1f7df5c309f8a4ab381a6fd5b772d929542 (diff)
feat(backend): sort logs with modification date
Diffstat (limited to 'backend/logs.go')
-rw-r--r--backend/logs.go32
1 files changed, 25 insertions, 7 deletions
diff --git a/backend/logs.go b/backend/logs.go
index ef44e0a..50caec1 100644
--- a/backend/logs.go
+++ b/backend/logs.go
@@ -4,12 +4,14 @@ import (
"errors"
"fmt"
"html/template"
+ "io/fs"
"log/slog"
"net/http"
"os"
"path/filepath"
"strings"
"sync"
+ "time"
"git.anhgelus.world/anhgelus/small-world/markdown"
"github.com/go-chi/chi/v5"
@@ -28,6 +30,7 @@ type logData struct {
pubDate toml.LocalDate `toml:"publication_date"`
Content template.HTML `toml:"-"`
Slug string `toml:"-"`
+ ModAt time.Time `toml:"-"`
}
func (d *logData) SetData(dt *data) {
@@ -35,7 +38,7 @@ func (d *logData) SetData(dt *data) {
}
func (d *logData) PubDate() string {
- return d.pubDate.String()
+ return d.ModAt.Format(time.DateOnly)
}
type image struct {
@@ -90,16 +93,22 @@ func readLogDir(path string, dir []os.DirEntry) error {
}
dd := new(logData)
dd.data = new(data)
- go func() {
- wg.Add(1)
+
+ wg.Add(1)
+ go func(p string, d os.DirEntry) {
defer wg.Done()
- ok = parseLog(dd, slug, strings.TrimSuffix(d.Name(), ".md"))
+ fi, err := d.Info()
+ if err != nil {
+ slog.Warn("cannot get file info", "path", p)
+ return
+ }
+ ok = parseLog(dd, slug, strings.TrimSuffix(d.Name(), ".md"), fi)
if ok {
slog.Debug("log parsed", "path", p)
} else {
slog.Debug("log skipped", "path", p)
}
- }()
+ }(p, d)
}
}
wg.Wait()
@@ -125,7 +134,15 @@ func handleLog(w http.ResponseWriter, r *http.Request) {
if !ok {
d = new(logData)
d.data = new(data)
- if ok = parseLog(d, path, slug); !ok {
+ fi, err := os.Stat(path)
+ if err != nil {
+ if !os.IsNotExist(err) {
+ panic(err)
+ }
+ http.NotFoundHandler().ServeHTTP(w, r)
+ return
+ }
+ if ok = parseLog(d, path, slug, fi); !ok {
http.NotFoundHandler().ServeHTTP(w, r)
return
}
@@ -133,11 +150,12 @@ func handleLog(w http.ResponseWriter, r *http.Request) {
d.handleGeneric(w, r, "log", d)
}
-func parseLog(d *logData, path, slug string) bool {
+func parseLog(d *logData, path, slug string, fi fs.FileInfo) bool {
d.Article = true
d.LogTitle = slug
d.title = slug
d.Slug = slug
+ d.ModAt = fi.ModTime()
b, err := os.ReadFile(path + ".md")
if err != nil {
if os.IsNotExist(err) {