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 }