package useCases import ( "RenewCMS/internal/domain/audit" "RenewCMS/internal/domain/image" "context" ) type RenameMediaUseCase struct { imageRepository image.Repository recorder audit.Recorder } func NewRenameMediaUseCase(imageRepository image.Repository, recorder audit.Recorder) *RenameMediaUseCase { return &RenameMediaUseCase{imageRepository, recorder} } func (u *RenameMediaUseCase) Rename(ctx context.Context, id uint32, stem string) (image.Image, error) { current, err := u.imageRepository.Get(id) if err != nil { return image.Image{}, err } event := audit.NewEvent(audit.ActionMediaRename, audit.CategoryMedia) event.Target = imageTarget(current) validStem, err := image.ValidateFilenameStem(stem) if err != nil { recordFailure(ctx, u.recorder, event, err) return image.Image{}, err } renamed, err := u.imageRepository.Rename(id, validStem+image.ExtensionOf(current.Filename)) if err != nil { recordFailure(ctx, u.recorder, event, err) return image.Image{}, err } if renamed.Filename != current.Filename { event.Target = imageTarget(renamed) event.Changes = []audit.Change{audit.TextChange(audit.FieldFilename, current.Filename, renamed.Filename)} u.recorder.Record(ctx, event) } return renamed, nil }