like malachite (atproto-lastfm-importer) but in go and bluer
go
spotify
tealfm
lastfm
atproto
1package cache
2
3import (
4 "os"
5 "path/filepath"
6 "strings"
7 "time"
8)
9
10const (
11 CacheFile = "cache.db"
12 CacheTTL = 24 * time.Hour
13)
14
15type Entry[T any] struct {
16 URI string `json:"uri"`
17 CID string `json:"cid"`
18 Value T `json:"value"`
19}
20
21func recordsBucket(did string) string {
22 return "records:" + did
23}
24
25func processedBucket(did string) string {
26 return "processed:" + did
27}
28
29func failedBucket(did string) string {
30 return "failed:" + did
31}
32
33func metaBucket() string {
34 return "_meta"
35}
36
37const metaPrefixTimestamp = "ts:"
38
39func cacheDir() (string, error) {
40 if dir := os.Getenv("LAZULI_CACHE_DIR"); dir != "" {
41 return dir, nil
42 }
43
44 for _, arg := range os.Args {
45 if strings.HasPrefix(arg, "-test.") {
46 dir, err := os.MkdirTemp("", "lazuli-test-*")
47 if err != nil {
48 return "", err
49 }
50 os.Setenv("LAZULI_CACHE_DIR", dir)
51 return dir, nil
52 }
53 }
54
55 cacheDir, err := os.UserCacheDir()
56 if err != nil {
57 return "", err
58 }
59 return filepath.Join(cacheDir, "lazuli"), nil
60}