package useCases import ( "RenewCMS/internal/domain/audit" "RenewCMS/internal/domain/image" "context" ) type PurgeImageVariantUseCase struct { images image.Repository variants image.VariantRepository files image.VariantFileRepository cache variantCache recorder audit.Recorder } func NewPurgeImageVariantUseCase(images image.Repository, variants image.VariantRepository, files image.VariantFileRepository, storage image.Storage, recorder audit.Recorder) *PurgeImageVariantUseCase { return &PurgeImageVariantUseCase{images, variants, files, variantCache{files, storage}, recorder} } func (u *PurgeImageVariantUseCase) Purge(ctx context.Context, id uint32, name string) (VariantPurgeResult, error) { img, err := u.images.Get(id) if err != nil { return VariantPurgeResult{}, err } variant, err := u.variants.Get(name) if err != nil { return VariantPurgeResult{}, err } if variant.Name != name { return VariantPurgeResult{}, image.ErrVariantNotFound } event := audit.NewEvent(audit.ActionVariantPurgeImage, audit.CategoryMedia) event.Target = imageTarget(img) row, found, err := u.files.Find(name, image.StoredName(img.Path)) if err != nil { recordFailure(ctx, u.recorder, event, err) return VariantPurgeResult{}, err } if !found { return VariantPurgeResult{}, nil } purged, err := u.cache.purge([]image.VariantFile{row}) if err != nil { recordFailure(ctx, u.recorder, event, err) return VariantPurgeResult{}, err } event.Params = variantPurgeParams(purged) u.recorder.Record(ctx, event) return purged, nil }