mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-02-02 06:03:30 +02:00
[#1896] run files upload after record save
This commit is contained in:
parent
eec3261d67
commit
503c65a767
@ -235,6 +235,16 @@ func (form *RecordUpsert) LoadRequest(r *http.Request, keyPrefix string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FilesToUpload returns the parsed request files ready for upload.
|
||||||
|
func (form *RecordUpsert) FilesToUpload() map[string][]*filesystem.File {
|
||||||
|
return form.filesToUpload
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilesToUpload returns the parsed request filenames ready to be deleted.
|
||||||
|
func (form *RecordUpsert) FilesToDelete() []string {
|
||||||
|
return form.filesToDelete
|
||||||
|
}
|
||||||
|
|
||||||
// AddFiles adds the provided file(s) to the specified file field.
|
// AddFiles adds the provided file(s) to the specified file field.
|
||||||
//
|
//
|
||||||
// If the file field is a SINGLE-value file field (aka. "Max Select = 1"),
|
// If the file field is a SINGLE-value file field (aka. "Max Select = 1"),
|
||||||
@ -731,21 +741,16 @@ func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc[*models.Record]
|
|||||||
form.record.MarkAsNew()
|
form.record.MarkAsNew()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// persist the record model
|
||||||
|
if saveErr := form.dao.SaveRecord(form.record); saveErr != nil {
|
||||||
|
return fmt.Errorf("failed to save the record: %w", saveErr)
|
||||||
|
}
|
||||||
|
|
||||||
// upload new files (if any)
|
// upload new files (if any)
|
||||||
if err := form.processFilesToUpload(); err != nil {
|
if err := form.processFilesToUpload(); err != nil {
|
||||||
return fmt.Errorf("failed to process the uploaded files: %w", err)
|
return fmt.Errorf("failed to process the uploaded files: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// persist the record model
|
|
||||||
if saveErr := form.dao.SaveRecord(form.record); saveErr != nil {
|
|
||||||
// try to cleanup the successfully uploaded files
|
|
||||||
if _, err := form.deleteFilesByNamesList(form.getFilesToUploadNames()); err != nil && form.app.IsDebug() {
|
|
||||||
log.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Errorf("failed to save the record: %w", saveErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete old files (if any)
|
// delete old files (if any)
|
||||||
//
|
//
|
||||||
// for now fail silently to avoid reupload when `form.Submit()`
|
// for now fail silently to avoid reupload when `form.Submit()`
|
||||||
|
@ -979,11 +979,33 @@ func TestRecordUpsertAddAndRemoveFiles(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removed0 := "test_d61b33QdDU.txt" // replaced
|
||||||
|
removed1 := "300_WlbFWSGmW9.png"
|
||||||
|
removed2 := "logo_vcfJJG5TAh.svg"
|
||||||
|
|
||||||
form.AddFiles("file_one", f1) // should replace the existin file
|
form.AddFiles("file_one", f1) // should replace the existin file
|
||||||
|
|
||||||
form.AddFiles("file_many", f2, f3) // should append
|
form.AddFiles("file_many", f2, f3) // should append
|
||||||
|
|
||||||
form.RemoveFiles("file_many", "300_WlbFWSGmW9.png", "logo_vcfJJG5TAh.svg") // should remove
|
form.RemoveFiles("file_many", removed1, removed2) // should remove
|
||||||
|
|
||||||
|
filesToUpload := form.FilesToUpload()
|
||||||
|
if v, ok := filesToUpload["file_one"]; !ok || len(v) != 1 {
|
||||||
|
t.Fatalf("Expected filesToUpload[file_one] to have exactly 1 file, got %v", v)
|
||||||
|
}
|
||||||
|
if v, ok := filesToUpload["file_many"]; !ok || len(v) != 2 {
|
||||||
|
t.Fatalf("Expected filesToUpload[file_many] to have exactly 2 file, got %v", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
filesToDelete := form.FilesToDelete()
|
||||||
|
if len(filesToDelete) != 3 {
|
||||||
|
t.Fatalf("Expected exactly 2 file to delete, got %v", filesToDelete)
|
||||||
|
}
|
||||||
|
for _, f := range []string{removed0, removed1, removed2} {
|
||||||
|
if !list.ExistInSlice(f, filesToDelete) {
|
||||||
|
t.Fatalf("Missing file %q from filesToDelete %v", f, filesToDelete)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := form.Submit(); err != nil {
|
if err := form.Submit(); err != nil {
|
||||||
t.Fatalf("Failed to submit the RecordUpsert form, got %v", err)
|
t.Fatalf("Failed to submit the RecordUpsert form, got %v", err)
|
||||||
@ -995,14 +1017,14 @@ func TestRecordUpsertAddAndRemoveFiles(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure files deletion
|
// ensure files deletion
|
||||||
if hasRecordFile(app, recordAfter, "test_d61b33QdDU.txt") {
|
if hasRecordFile(app, recordAfter, removed0) {
|
||||||
t.Fatalf("Expected the old file_one file to be deleted")
|
t.Fatalf("Expected the old file_one file to be deleted")
|
||||||
}
|
}
|
||||||
if hasRecordFile(app, recordAfter, "300_WlbFWSGmW9.png") {
|
if hasRecordFile(app, recordAfter, removed1) {
|
||||||
t.Fatalf("Expected 300_WlbFWSGmW9.png to be deleted")
|
t.Fatalf("Expected %s to be deleted", removed1)
|
||||||
}
|
}
|
||||||
if hasRecordFile(app, recordAfter, "logo_vcfJJG5TAh.svg") {
|
if hasRecordFile(app, recordAfter, removed2) {
|
||||||
t.Fatalf("Expected logo_vcfJJG5TAh.svg to be deleted")
|
t.Fatalf("Expected %s to be deleted", removed2)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileOne := recordAfter.GetStringSlice("file_one")
|
fileOne := recordAfter.GetStringSlice("file_one")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user