+Benutzer filter, u. Spalte

This commit is contained in:
Simon Martens
2026-01-28 19:37:19 +01:00
parent 5c9cbcd4ac
commit b5985cba18
19 changed files with 1031 additions and 100 deletions

88
helpers/imports/common.go Normal file
View File

@@ -0,0 +1,88 @@
package imports
import (
"os"
"path/filepath"
"regexp"
"sort"
"strings"
"time"
)
const importDirName = "import"
var importNamePattern = regexp.MustCompile(`^(\d{4})-(\d{2})(?:-(\d{2}))?-MUSENALM-(DATA|FILES)`)
type ImportCandidate struct {
Path string
IsZip bool
}
func FindLatestImport(kind string) (*ImportCandidate, error) {
dirEntries, err := os.ReadDir(importDirName)
if err != nil {
if os.IsNotExist(err) {
return nil, nil
}
return nil, err
}
want := "MUSENALM-" + strings.ToUpper(kind)
type candidate struct {
name string
ts time.Time
}
candidates := []candidate{}
for _, entry := range dirEntries {
name := entry.Name()
matches := importNamePattern.FindStringSubmatch(name)
if matches == nil {
continue
}
if !strings.Contains(strings.ToUpper(name), want) {
continue
}
year := matches[1]
month := matches[2]
day := matches[3]
if day == "" {
day = "01"
}
ts, err := time.Parse("2006-01-02", year+"-"+month+"-"+day)
if err != nil {
continue
}
candidates = append(candidates, candidate{name: name, ts: ts})
}
if len(candidates) == 0 {
return nil, nil
}
sort.Slice(candidates, func(i, j int) bool {
if candidates[i].ts.Equal(candidates[j].ts) {
return candidates[i].name < candidates[j].name
}
return candidates[i].ts.Before(candidates[j].ts)
})
latest := candidates[len(candidates)-1].name
path := filepath.Join(importDirName, latest)
info, err := os.Stat(path)
if err != nil {
return nil, err
}
if info.IsDir() {
return &ImportCandidate{Path: path, IsZip: false}, nil
}
if strings.HasSuffix(strings.ToLower(latest), ".zip") {
return &ImportCandidate{Path: path, IsZip: true}, nil
}
return &ImportCandidate{Path: path, IsZip: false}, nil
}
func HasImport(kind string) bool {
candidate, err := FindLatestImport(kind)
return err == nil && candidate != nil
}