like malachite (atproto-lastfm-importer) but in go and bluer
go spotify tealfm lastfm atproto
at main 60 lines 992 B view raw
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}