github.com/cozy/cozy-stack@v0.0.0-20240327093429-939e4a21320e/model/note/delete.go (about)

     1  package note
     2  
     3  import (
     4  	"fmt"
     5  	"runtime"
     6  
     7  	"github.com/cozy/cozy-stack/model/instance"
     8  	"github.com/cozy/cozy-stack/model/vfs"
     9  	"github.com/cozy/cozy-stack/pkg/consts"
    10  	"github.com/cozy/cozy-stack/pkg/couchdb"
    11  	"github.com/cozy/cozy-stack/pkg/logger"
    12  	"github.com/cozy/cozy-stack/pkg/prefixer"
    13  )
    14  
    15  func init() {
    16  	vfs.DeleteNote = deleteNote
    17  }
    18  
    19  func deleteNote(db prefixer.Prefixer, noteID string) {
    20  	go func() {
    21  		defer func() {
    22  			if r := recover(); r != nil {
    23  				var err error
    24  				switch r := r.(type) {
    25  				case error:
    26  					err = r
    27  				default:
    28  					err = fmt.Errorf("%v", r)
    29  				}
    30  				stack := make([]byte, 4<<10) // 4 KB
    31  				length := runtime.Stack(stack, false)
    32  				log := logger.WithNamespace("note").WithField("panic", true)
    33  				log.Errorf("PANIC RECOVER %s: %s", err.Error(), stack[:length])
    34  			}
    35  		}()
    36  
    37  		images, err := getImages(db, noteID)
    38  		if err == nil && len(images) > 0 {
    39  			formats := []string{
    40  				consts.NoteImageOriginalFormat,
    41  				consts.NoteImageThumbFormat,
    42  			}
    43  			inst, err := instance.Get(db.DomainName())
    44  			if err == nil {
    45  				for _, img := range images {
    46  					_ = inst.ThumbsFS().RemoveNoteThumb(img.ID(), formats)
    47  					_ = couchdb.DeleteDoc(db, img)
    48  				}
    49  			}
    50  		}
    51  
    52  		steps, err := getSteps(db, noteID, 0)
    53  		if err == nil && len(steps) > 0 {
    54  			docs := make([]couchdb.Doc, 0, len(steps))
    55  			for i := range steps {
    56  				docs = append(docs, &steps[i])
    57  			}
    58  			_ = couchdb.BulkDeleteDocs(db, consts.NotesSteps, docs)
    59  		}
    60  	}()
    61  }