mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-12-11 05:11:13 +02:00
61 lines
1.8 KiB
Go
61 lines
1.8 KiB
Go
package apis
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
validation "github.com/go-ozzo/ozzo-validation/v4"
|
|
"github.com/pocketbase/pocketbase/core"
|
|
)
|
|
|
|
func collectionsImport(e *core.RequestEvent) error {
|
|
form := new(collectionsImportForm)
|
|
|
|
err := e.BindBody(form)
|
|
if err != nil {
|
|
return firstApiError(err, e.BadRequestError("An error occurred while loading the submitted data.", err))
|
|
}
|
|
|
|
err = form.validate()
|
|
if err != nil {
|
|
return firstApiError(err, e.BadRequestError("An error occurred while validating the submitted data.", err))
|
|
}
|
|
|
|
event := new(core.CollectionsImportRequestEvent)
|
|
event.RequestEvent = e
|
|
event.CollectionsData = form.Collections
|
|
event.DeleteMissing = form.DeleteMissing
|
|
|
|
return event.App.OnCollectionsImportRequest().Trigger(event, func(e *core.CollectionsImportRequestEvent) error {
|
|
importErr := e.App.ImportCollections(e.CollectionsData, form.DeleteMissing)
|
|
if importErr == nil {
|
|
return e.NoContent(http.StatusNoContent)
|
|
}
|
|
|
|
// validation failure
|
|
var validationErrors validation.Errors
|
|
if errors.As(err, &validationErrors) {
|
|
return e.BadRequestError("Failed to import collections.", validationErrors)
|
|
}
|
|
|
|
// generic/db failure
|
|
return e.BadRequestError("Failed to import collections.", validation.Errors{"collections": validation.NewError(
|
|
"validation_collections_import_failure",
|
|
"Failed to import the collections configuration. Raw error:\n"+importErr.Error(),
|
|
)})
|
|
})
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
type collectionsImportForm struct {
|
|
Collections []map[string]any `form:"collections" json:"collections"`
|
|
DeleteMissing bool `form:"deleteMissing" json:"deleteMissing"`
|
|
}
|
|
|
|
func (form *collectionsImportForm) validate() error {
|
|
return validation.ValidateStruct(form,
|
|
validation.Field(&form.Collections, validation.Required),
|
|
)
|
|
}
|