Remove unimplemented Purge and three unused interfaces from imgcache (closes #73) #175

Merged
clawbot merged 1 commits from issue-73-remove-dead-abstractions into next 2026-10-04 08:41:38 +02:00
3 changed files with 8 additions and 39 deletions
+5
View File
@@ -29,6 +29,11 @@ P2: security: referer blacklist
# Completed Steps # Completed Steps
- 2026-10-04 dead code in `internal/imgcache` is gone (closes #73): `Purge`,
which only returned an error and which nothing called, is no longer part of
the `ImageCache` interface or `Service`; the `SignatureValidator`,
`Allowlist` and `Storage` interfaces, which nothing implemented or used, are
deleted. Nothing else changes.
- 2026-10-04 upstream host semaphores and variant `.meta` files no longer - 2026-10-04 upstream host semaphores and variant `.meta` files no longer
outlive their use (closes #87): the fetcher counts the fetches holding or outlive their use (closes #87): the fetcher counts the fetches holding or
waiting for a slot of each upstream host's semaphore and removes the host's waiting for a slot of each upstream host's semaphore and removes the host's
-30
View File
@@ -5,7 +5,6 @@ import (
"context" "context"
"errors" "errors"
"io" "io"
"net/url"
"time" "time"
) )
@@ -154,9 +153,6 @@ type ImageCache interface {
// Warm pre-fetches and caches an image without returning it // Warm pre-fetches and caches an image without returning it
Warm(ctx context.Context, req *ImageRequest) error Warm(ctx context.Context, req *ImageRequest) error
// Purge removes a cached image
Purge(ctx context.Context, req *ImageRequest) error
// Stats returns cache statistics // Stats returns cache statistics
Stats(ctx context.Context) (*CacheStats, error) Stats(ctx context.Context) (*CacheStats, error)
} }
@@ -176,29 +172,3 @@ type CacheStats struct {
// HitRate is HitCount / (HitCount + MissCount) // HitRate is HitCount / (HitCount + MissCount)
HitRate float64 HitRate float64
} }
// SignatureValidator validates request signatures
type SignatureValidator interface {
// Validate checks if the signature is valid for the request
Validate(req *ImageRequest) error
// Generate creates a signature for a request
Generate(req *ImageRequest) string
}
// Allowlist checks if a URL is allowlisted (no signature required)
type Allowlist interface {
// IsAllowlisted returns true if the URL doesn't require a signature
IsAllowlisted(u *url.URL) bool
}
// Storage handles persistent storage of cached content
type Storage interface {
// Store saves content and returns its hash
Store(ctx context.Context, content io.Reader) (hash string, err error)
// Load retrieves content by hash
Load(ctx context.Context, hash string) (io.ReadCloser, error)
// Delete removes content by hash
Delete(ctx context.Context, hash string) error
// Exists checks if content exists
Exists(ctx context.Context, hash string) (bool, error)
}
+3 -9
View File
@@ -56,11 +56,10 @@ type ServiceConfig struct {
Logger *slog.Logger Logger *slog.Logger
} }
// Static errors for service construction and unimplemented operations. // Static errors for service construction.
var ( var (
errCacheRequired = errors.New("cache is required") errCacheRequired = errors.New("cache is required")
errSigningKeyRequired = errors.New("signing key is required") errSigningKeyRequired = errors.New("signing key is required")
errPurgeNotImplemented = errors.New("purge not implemented")
) )
// NewService creates a new image service. // NewService creates a new image service.
@@ -189,11 +188,6 @@ func (s *Service) Warm(ctx context.Context, req *ImageRequest) error {
return err return err
} }
// Purge removes a cached image. Purging is not implemented yet.
func (s *Service) Purge(_ context.Context, _ *ImageRequest) error {
return errPurgeNotImplemented
}
// Stats returns cache statistics. // Stats returns cache statistics.
func (s *Service) Stats(ctx context.Context) (*CacheStats, error) { func (s *Service) Stats(ctx context.Context) (*CacheStats, error) {
return s.cache.Stats(ctx) return s.cache.Stats(ctx)