package dpsapi import ( "errors" "git.sxidc.com/go-tools/api_binding/http_binding" "git.sxidc.com/go-tools/api_binding/http_binding/binding_context" "git.sxidc.com/go-tools/api_binding/http_binding/response" "git.sxidc.com/go-tools/api_binding/utils" "git.sxidc.com/service-supports/dps-sdk" "git.sxidc.com/service-supports/dps-sdk/client" ) func ApiV1(binding *http_binding.Binding, dpsAddress string) { http_binding.PostBind(binding, &http_binding.SimpleBindItem[OperateFromRequest, any]{ Path: "/dpsv1/database/operate", ResponseFunc: response.SendMsgResponse, BusinessFunc: func(c *binding_context.Context, inputModel OperateFromRequest) (any, error) { parsedClauses, err := parseSql(inputModel.SQL) if err != nil { return nil, err } dpsClient, err := dps.NewClient(dpsAddress, "v1", inputModel.DatabaseID) if err != nil { return nil, err } err = dpsClient.Transaction(func(tx client.Transaction) error { for _, parsedClause := range parsedClauses { switch clause := parsedClause.(type) { case *insertClause: return doInsert(inputModel, clause) case *deleteClause: return doDelete(inputModel, clause) case *updateClause: return doUpdate(inputModel, clause) case *selectClause: return doSelect(inputModel, clause) default: return errors.New("不支持的SQL语句") } } return nil }) if err != nil { return nil, err } return nil, nil }, }) } func doInsert(inputModel OperateFromRequest, clause *insertClause) error { version := inputModel.Version if utils.IsStringEmpty(version) { version = "v1" } return nil } func doDelete(inputModel OperateFromRequest, clause *deleteClause) error { version := inputModel.Version if utils.IsStringEmpty(version) { version = "v1" } return nil } func doUpdate(inputModel OperateFromRequest, clause *updateClause) error { version := inputModel.Version if utils.IsStringEmpty(version) { version = "v1" } return nil } func doSelect(inputModel OperateFromRequest, clause *selectClause) error { version := inputModel.Version if utils.IsStringEmpty(version) { version = "v1" } return nil }