fix realtime events firing before files upload completion
This commit is contained in:
parent
69bf9779d9
commit
899b8217e0
|
@ -728,8 +728,6 @@ func (form *RecordUpsert) DrySubmit(callback func(txDao *daos.Dao) error) error
|
||||||
// You can optionally provide a list of InterceptorFunc to further
|
// You can optionally provide a list of InterceptorFunc to further
|
||||||
// modify the form behavior before persisting it.
|
// modify the form behavior before persisting it.
|
||||||
func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc[*models.Record]) error {
|
func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc[*models.Record]) error {
|
||||||
oldRecord := form.record.OriginalCopy()
|
|
||||||
|
|
||||||
if err := form.ValidateAndFill(); err != nil {
|
if err := form.ValidateAndFill(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -742,8 +740,23 @@ func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc[*models.Record]
|
||||||
form.record.MarkAsNew()
|
form.record.MarkAsNew()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dao := form.dao.Clone()
|
||||||
|
|
||||||
|
dao.BeforeCreateFunc = func(eventDao *daos.Dao, m models.Model) error {
|
||||||
|
if err := form.dao.BeforeCreateFunc(eventDao, m); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// upload new files (if any)
|
||||||
|
//
|
||||||
|
// note: executed after the default BeforeCreateFunc to allow
|
||||||
|
// executing AFTER the before app model hooks (eg. in case of an id change)
|
||||||
|
// but BEFORE the record db persistence
|
||||||
|
return form.processFilesToUpload()
|
||||||
|
}
|
||||||
|
|
||||||
// persist the record model
|
// persist the record model
|
||||||
if err := form.dao.SaveRecord(form.record); err != nil {
|
if err := dao.SaveRecord(form.record); err != nil {
|
||||||
preparedErr := form.prepareError(err)
|
preparedErr := form.prepareError(err)
|
||||||
if _, ok := preparedErr.(validation.Errors); ok {
|
if _, ok := preparedErr.(validation.Errors); ok {
|
||||||
return preparedErr
|
return preparedErr
|
||||||
|
@ -751,26 +764,6 @@ func (form *RecordUpsert) Submit(interceptors ...InterceptorFunc[*models.Record]
|
||||||
return fmt.Errorf("failed to save the record: %w", err)
|
return fmt.Errorf("failed to save the record: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// upload new files (if any)
|
|
||||||
//
|
|
||||||
// note1: executed outside of transaction to avoid keeping a lock for too long
|
|
||||||
// note2: executed after the record save to allow record id change with a before model hook
|
|
||||||
if err := form.processFilesToUpload(); err != nil {
|
|
||||||
if oldRecord.IsNew() {
|
|
||||||
// delete previously inserted record
|
|
||||||
if err := form.dao.DeleteRecord(form.record); err != nil && form.app.IsDebug() {
|
|
||||||
log.Println(err)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// revert record changes
|
|
||||||
if err := form.dao.SaveRecord(oldRecord); err != nil && form.app.IsDebug() {
|
|
||||||
log.Println(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Errorf("failed to process the uploaded files: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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()`
|
||||||
|
@ -789,7 +782,7 @@ func (form *RecordUpsert) processFilesToUpload() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !form.record.HasId() {
|
if !form.record.HasId() {
|
||||||
return errors.New("the record is not persisted yet")
|
return errors.New("the record doesn't have an id")
|
||||||
}
|
}
|
||||||
|
|
||||||
fs, err := form.app.NewFilesystem()
|
fs, err := form.app.NewFilesystem()
|
||||||
|
@ -837,7 +830,7 @@ func (form *RecordUpsert) deleteFilesByNamesList(filenames []string) ([]string,
|
||||||
}
|
}
|
||||||
|
|
||||||
if !form.record.HasId() {
|
if !form.record.HasId() {
|
||||||
return filenames, errors.New("the record doesn't have a unique ID")
|
return filenames, errors.New("the record doesn't have an id")
|
||||||
}
|
}
|
||||||
|
|
||||||
fs, err := form.app.NewFilesystem()
|
fs, err := form.app.NewFilesystem()
|
||||||
|
|
Loading…
Reference in New Issue