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

45 lines
1.4 KiB
Go

package useCases
import (
"RenewCMS/internal/domain/image"
"context"
)
type GenerateImageVariantUseCase struct {
images image.Repository
variants image.VariantRepository
files image.VariantFileRepository
renderer image.VariantRenderer
generator *ServeVariantUseCase
}
func NewGenerateImageVariantUseCase(images image.Repository, variants image.VariantRepository, files image.VariantFileRepository, renderer image.VariantRenderer, generator *ServeVariantUseCase) *GenerateImageVariantUseCase {
return &GenerateImageVariantUseCase{images, variants, files, renderer, generator}
}
func (u *GenerateImageVariantUseCase) Generate(ctx context.Context, id uint32, name string) (ImageVariantView, error) {
img, err := u.images.Get(id)
if err != nil {
return ImageVariantView{}, err
}
variant, err := u.variants.Get(name)
if err != nil {
return ImageVariantView{}, err
}
if !variant.Enabled || variant.Name != name {
return ImageVariantView{}, image.ErrVariantNotFound
}
if isVectorSource(img) {
return ImageVariantView{}, image.ErrVariantSourceUnsupported
}
storedName := image.StoredName(img.Path)
if _, err := u.generator.Generate(ctx, variant, storedName); err != nil {
return ImageVariantView{}, err
}
rows, err := currentFiles(u.files, storedName)
if err != nil {
return ImageVariantView{}, err
}
return viewOf(variant, img, rows, u.renderer.EncodableFormats()), nil
}