Files
RenewCMS/internal/infrastructure/useCases/ServeVariantGenerate.go
T

34 lines
928 B
Go

package useCases
import (
"RenewCMS/internal/domain/image"
"context"
)
func (u *ServeVariantUseCase) Generate(ctx context.Context, variant image.Variant, storedName string) (image.VariantFile, error) {
source, err := u.storage.Open(storedName)
if err != nil {
return image.VariantFile{}, err
}
defer source.Content.Close()
if servedAsIs(storedName, source.Content) {
return image.VariantFile{}, image.ErrVariantSourceUnsupported
}
if source.Size > u.maxSourceBytes {
return image.VariantFile{}, image.ErrSourceTooLarge
}
settings := variant.Settings()
fingerprint := settings.Fingerprint()
served, existing, hit, err := u.lookupCached(variant.Name, storedName, fingerprint, image.VariantETag(settings, storedName))
if err != nil {
return image.VariantFile{}, err
}
if hit {
_ = served.Content.Close()
return existing, nil
}
return u.generated(ctx, variant, storedName, fingerprint, existing)
}