34 lines
928 B
Go
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)
|
|
}
|