package repository import ( "context" "encoding/json" "errors" "time" "evobgp/internal/store" "github.com/jackc/pgx/v5" ) func (p *Postgres) GetASNPrefixCache(asn int64) (*store.ASNPrefixCacheEntry, bool, error) { ctx := context.Background() var holder string var fetchedAt time.Time var raw []byte err := p.pool.QueryRow(ctx, ` SELECT holder, fetched_at, prefixes_json FROM asn_prefix_cache WHERE asn = $1`, asn). Scan(&holder, &fetchedAt, &raw) if err != nil { if errors.Is(err, pgx.ErrNoRows) { return nil, false, nil } return nil, false, err } var prefixes []string if len(raw) > 0 { _ = json.Unmarshal(raw, &prefixes) } return &store.ASNPrefixCacheEntry{ ASN: asn, Holder: holder, Prefixes: prefixes, FetchedAt: fetchedAt.UTC(), }, true, nil } func (p *Postgres) SetASNPrefixCache(asn int64, holder string, prefixes []string) error { raw, err := json.Marshal(prefixes) if err != nil { return err } ctx := context.Background() _, err = p.pool.Exec(ctx, ` INSERT INTO asn_prefix_cache (asn, holder, prefixes_json, fetched_at) VALUES ($1, $2, $3::jsonb, now()) ON CONFLICT (asn) DO UPDATE SET holder = EXCLUDED.holder, prefixes_json = EXCLUDED.prefixes_json, fetched_at = EXCLUDED.fetched_at`, asn, holder, string(raw)) return err }