in api/internal/handler/data_loader/route_import.go [93:135]
func (h *ImportHandler) Import(c droplet.Context) (interface{}, error) {
input := c.Input().(*ImportInput)
// input file content check
suffix := path.Ext(input.FileName)
if suffix != ".json" && suffix != ".yaml" && suffix != ".yml" {
return nil, errors.Errorf("required file type is .yaml, .yml or .json but got: %s", suffix)
}
contentLen := bytes.Count(input.FileContent, nil) - 1
if contentLen <= 0 {
return nil, errors.New("uploaded file is empty")
}
if contentLen > conf.ImportSizeLimit {
return nil, errors.Errorf("uploaded file size exceeds the limit, limit is %d", conf.ImportSizeLimit)
}
var l loader.Loader
switch LoaderType(input.Type) {
case LoaderTypeOpenAPI3:
l = &openapi3.Loader{
MergeMethod: input.MergeMethod == "true",
TaskName: input.TaskName,
}
break
default:
return nil, fmt.Errorf("unsupported data loader type: %s", input.Type)
}
dataSets, err := l.Import(input.FileContent)
if err != nil {
return nil, err
}
// Pre-checking for route duplication
preCheckErrs := h.preCheck(c.Context(), dataSets)
if _, ok := preCheckErrs[store.HubKeyRoute]; ok && len(preCheckErrs[store.HubKeyRoute]) > 0 {
return h.convertToImportResult(dataSets, preCheckErrs), nil
}
// Create APISIX resources
createErrs := h.createEntities(c.Context(), dataSets)
return h.convertToImportResult(dataSets, createErrs), nil
}