Address PR review: graceful shutdown, Role/NewUser, drop SQLite.

This commit is contained in:
2026-08-21 23:40:59 -07:00
parent d167b9216a
commit 3391cce7bd
13 changed files with 152 additions and 337 deletions
+13 -13
View File
@@ -21,12 +21,6 @@ type Uploader interface {
// Disabled is a no-op uploader used when Spaces is not configured.
type Disabled struct{}
func (Disabled) Enabled() bool { return false }
func (Disabled) Upload(context.Context, string, io.Reader, string, int64) (string, error) {
return "", fmt.Errorf("avatar uploads are not configured")
}
// SpacesConfig holds DigitalOcean Spaces settings.
type SpacesConfig struct {
Key string
@@ -37,6 +31,17 @@ type SpacesConfig struct {
CDNBase string // optional public base URL without trailing slash
}
type spaces struct {
client *s3.Client
cfg SpacesConfig
}
func (Disabled) Enabled() bool { return false }
func (Disabled) Upload(context.Context, string, io.Reader, string, int64) (string, error) {
return "", fmt.Errorf("avatar uploads are not configured")
}
// NewSpaces returns an Uploader when required env is present; otherwise Disabled.
func NewSpaces(cfg SpacesConfig) Uploader {
cfg.Key = strings.TrimSpace(cfg.Key)
@@ -49,18 +54,13 @@ func NewSpaces(cfg SpacesConfig) Uploader {
return Disabled{}
}
client := s3.New(s3.Options{
Region: cfg.Region,
Credentials: credentials.NewStaticCredentialsProvider(cfg.Key, cfg.Secret, ""),
Region: cfg.Region,
Credentials: credentials.NewStaticCredentialsProvider(cfg.Key, cfg.Secret, ""),
BaseEndpoint: aws.String(cfg.Endpoint),
})
return &spaces{client: client, cfg: cfg}
}
type spaces struct {
client *s3.Client
cfg SpacesConfig
}
func (s *spaces) Enabled() bool { return true }
func (s *spaces) Upload(ctx context.Context, key string, body io.Reader, contentType string, size int64) (string, error) {