| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package dpsapi
- import (
- "errors"
- "fmt"
- "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[OperateParseRequest, map[string]any]{
- Path: "/dpsv1/database/operate/parse",
- ResponseFunc: response.SendMapResponse,
- BusinessFunc: func(c *binding_context.Context, inputModel OperateParseRequest) (map[string]any, error) {
- parsedClauses, err := parseSql(inputModel.SQL)
- if err != nil {
- return nil, err
- }
- for _, parsedClause := range parsedClauses {
- switch clause := parsedClause.(type) {
- case *insertClause:
- return map[string]any{
- "parsed": insertMap(clause),
- }, nil
- case *deleteClause:
- return map[string]any{
- "parsed": deleteMap(clause),
- }, nil
- case *updateClause:
- return map[string]any{
- "parsed": updateMap(clause),
- }, nil
- case *selectClause:
- return map[string]any{
- "parsed": selectMap(clause),
- }, nil
- default:
- return nil, errors.New("不支持的SQL语句")
- }
- }
- return nil, nil
- },
- })
- http_binding.PostBind(binding, &http_binding.SimpleBindItem[OperateRequest, any]{
- Path: "/dpsv1/database/operate",
- ResponseFunc: response.SendMsgResponse,
- BusinessFunc: func(c *binding_context.Context, inputModel OperateRequest) (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 insertMap(clause *insertClause) map[string]any {
- return map[string]any{
- "table": clause.table,
- "key_columns": clause.keyColumns,
- "table_rows": clause.tableRows,
- }
- }
- func deleteMap(clause *deleteClause) map[string]any {
- return map[string]any{}
- }
- func updateMap(clause *updateClause) map[string]any {
- return map[string]any{}
- }
- func selectMap(clause *selectClause) map[string]any {
- return map[string]any{}
- }
- func doInsert(inputModel OperateRequest, clause *insertClause) error {
- version := inputModel.Version
- if utils.IsStringEmpty(version) {
- version = "v1"
- }
- fmt.Printf("%+#v\n", clause)
- return nil
- }
- func doDelete(inputModel OperateRequest, clause *deleteClause) error {
- version := inputModel.Version
- if utils.IsStringEmpty(version) {
- version = "v1"
- }
- return nil
- }
- func doUpdate(inputModel OperateRequest, clause *updateClause) error {
- version := inputModel.Version
- if utils.IsStringEmpty(version) {
- version = "v1"
- }
- return nil
- }
- func doSelect(inputModel OperateRequest, clause *selectClause) error {
- version := inputModel.Version
- if utils.IsStringEmpty(version) {
- version = "v1"
- }
- return nil
- }
|