func()

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
}