作者 yangfu

feat: error resolver

  1 +/*
  2 + 1. 查询依赖的查询集
  3 +*/
  4 +select * from metadata.query_sets where query_set_info->>'BindTableId' in (
  5 + select distinct table_id::text from ( /*element_id,table_info,table_type*/
  6 + select json_array_elements(to_json(table_info->'dependencyTables'))::text::int element_id,table_info,table_id,table_type
  7 + from metadata.tables where table_info->'dependencyTables'::text <>'null' and table_type in ('SubProcess','CalculateTable')
  8 + ) a where a.element_id in (select table_id from metadata.tables where table_type in ('MainTable','SubTable','SideTable'))
  9 + order by table_id asc
  10 +) and context->>'operatorId' = '22'
@@ -46,6 +46,6 @@ require ( @@ -46,6 +46,6 @@ require (
46 replace ( 46 replace (
47 github.com/extrame/xls v0.0.1 => github.com/tiptok/xls v1.0.1 47 github.com/extrame/xls v0.0.1 => github.com/tiptok/xls v1.0.1
48 //github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 => github.com/tiptok/egglib-go v0.0.0-20220421085958-9682d0ac42c1 48 //github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 => github.com/tiptok/egglib-go v0.0.0-20220421085958-9682d0ac42c1
49 - github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 => github.com/tiptok/egglib-go v1.0.0 49 + github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 => github.com/tiptok/egglib-go v1.0.2
50 50
51 ) 51 )
1 package service 1 package service
2 2
3 import ( 3 import (
  4 + "fmt"
4 "github.com/linmadan/egglib-go/core/application" 5 "github.com/linmadan/egglib-go/core/application"
5 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/factory" 6 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/factory"
6 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/table/command" 7 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/application/table/command"
@@ -11,6 +12,7 @@ import ( @@ -11,6 +12,7 @@ import (
11 ) 12 )
12 13
13 func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command.TablePreviewCommand) (interface{}, error) { 14 func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command.TablePreviewCommand) (interface{}, error) {
  15 + return nil, factory.FastError(fmt.Errorf("Backend not found. Check if any backend is down or not"))
14 if cmd.TableId == 0 { 16 if cmd.TableId == 0 {
15 return &dto.TablePreviewDto{}, nil 17 return &dto.TablePreviewDto{}, nil
16 } 18 }
@@ -273,9 +273,11 @@ func RoundFieldValue(f *Field, v string) string { @@ -273,9 +273,11 @@ func RoundFieldValue(f *Field, v string) string {
273 return utils.AssertString(fv) //fmt.Sprintf("%v", fv) 273 return utils.AssertString(fv) //fmt.Sprintf("%v", fv)
274 } 274 }
275 // TODO:计算表 Count(日期)类型是日期类型,0 的话下面日期解析成当前时间,计算表类型需要修改 275 // TODO:计算表 Count(日期)类型是日期类型,0 的话下面日期解析成当前时间,计算表类型需要修改
  276 + if f.SQLType == Datetime.ToString() || f.SQLType == Date.ToString() {
276 if fv, err := strconv.ParseFloat(v, 64); err == nil { 277 if fv, err := strconv.ParseFloat(v, 64); err == nil {
277 return utils.AssertString(fv) 278 return utils.AssertString(fv)
278 } 279 }
  280 + }
279 if f.SQLType == Datetime.ToString() { 281 if f.SQLType == Datetime.ToString() {
280 fv, err := xtime.Parse(v) 282 fv, err := xtime.Parse(v)
281 if err != nil { 283 if err != nil {
@@ -445,7 +445,7 @@ func (d *DataLayoutDataTable) Expand(cell *domain.LayoutCell, length int) error @@ -445,7 +445,7 @@ func (d *DataLayoutDataTable) Expand(cell *domain.LayoutCell, length int) error
445 if expandLength < length { 445 if expandLength < length {
446 expandLength = length 446 expandLength = length
447 } 447 }
448 - if d.MaxX+expandLength > MaxExpandNum { 448 + if d.MaxX+expandLength > MaxExpandNum+DefaultExpandNum {
449 return fmt.Errorf("布局元素超过限制 %d", MaxExpandNum) 449 return fmt.Errorf("布局元素超过限制 %d", MaxExpandNum)
450 } 450 }
451 copyData := make([][]string, d.MaxX+length) 451 copyData := make([][]string, d.MaxX+length)
@@ -171,7 +171,7 @@ func (repository *QuerySetRepository) Find(queryOptions map[string]interface{}) @@ -171,7 +171,7 @@ func (repository *QuerySetRepository) Find(queryOptions map[string]interface{})
171 query.Where("query_set_info->'BindTableId' in (?)", pg.In(utils.ToArrayString(v.([]int)))) 171 query.Where("query_set_info->'BindTableId' in (?)", pg.In(utils.ToArrayString(v.([]int))))
172 } 172 }
173 if v, ok := queryOptions["sortByName"]; ok && len(v.(string)) > 0 { 173 if v, ok := queryOptions["sortByName"]; ok && len(v.(string)) > 0 {
174 - query.SetOrderDirect("pin_name", v.(string)) 174 + query.SetOrderDirect("name", v.(string))//pin_name
175 } else if v, ok := queryOptions["sortByTime"]; ok && len(v.(string)) > 0 { 175 } else if v, ok := queryOptions["sortByTime"]; ok && len(v.(string)) > 0 {
176 query.SetOrderDirect("created_at", v.(string)) 176 query.SetOrderDirect("created_at", v.(string))
177 } else { 177 } else {
  1 +package controllers
  2 +
  3 +import (
  4 + _ "embed"
  5 + "github.com/linmadan/egglib-go/core/application"
  6 + "github.com/linmadan/egglib-go/utils/json"
  7 + "strings"
  8 +)
  9 +
  10 +//go:embed errors.txt
  11 +var errorsData []byte
  12 +
  13 +type CommErrorResolver struct {
  14 + // TODO:LRU latest error list
  15 + ErrorMapping map[string]string `json:"errorMapping"`
  16 + errMapping map[string]error `json:"errorMapping"`
  17 +}
  18 +
  19 +func (r *CommErrorResolver) Resolve(err error) error {
  20 + if err == nil {
  21 + return nil
  22 + }
  23 + errMsg := err.Error()
  24 + if r.errMapping == nil {
  25 + return err
  26 + }
  27 + if v, ok := r.errMapping[errMsg]; ok {
  28 + return v
  29 + }
  30 + for k, v := range r.errMapping {
  31 + if strings.Contains(errMsg, k) {
  32 + return v
  33 + }
  34 + }
  35 + return err
  36 +}
  37 +
  38 +func NewCommErrorResolver() (*CommErrorResolver, error) {
  39 + obj := &CommErrorResolver{errMapping: make(map[string]error)}
  40 + err := json.Unmarshal(errorsData, obj)
  41 + if err != nil {
  42 + return nil, err
  43 + }
  44 + for k, v := range obj.ErrorMapping {
  45 + obj.errMapping[k] = application.ThrowError(application.INTERNAL_SERVER_ERROR, v)
  46 + }
  47 + return obj, nil
  48 +}
  1 +{
  2 + "errorMapping":{
  3 + "Backend not found. Check if any backend is down or not":"数据库服务繁忙"
  4 + }
  5 +}
@@ -6,37 +6,39 @@ import ( @@ -6,37 +6,39 @@ import (
6 ) 6 )
7 7
8 func init() { 8 func init() {
9 - web.Router("/data/tables/", &controllers.TableController{}, "Post:CreateTable")  
10 - //web.Router("/data/tables/:tableId", &controllers.TableController{}, "Put:UpdateTable")  
11 - web.Router("/data/tables/:tableId", &controllers.TableController{}, "Get:GetTable")  
12 - web.Router("/data/tables/prepare", &controllers.TableController{}, "Get:PrepareTable")  
13 - web.Router("/data/tables/:tableId", &controllers.TableController{}, "Delete:RemoveTable")  
14 - web.Router("/data/tables/", &controllers.TableController{}, "Get:ListTable")  
15 - web.Router("/data/tables/search", &controllers.TableController{}, "Post:Search")  
16 - web.Router("/data/tables/relation-graph", &controllers.TableController{}, "Post:RelationGraph")  
17 - web.Router("/data/tables/apply-on", &controllers.TableController{}, "Post:ApplyOn")  
18 - web.Router("/data/tables/valid-expr-sql", &controllers.TableController{}, "Post:ValidExprSql")  
19 - web.Router("/data/tables/check", &controllers.TableController{}, "Post:CheckRowDuplicate")  
20 - web.Router("/data/tables/check-row-value-duplicate", &controllers.TableController{}, "Post:CheckRowValueDuplicate")  
21 - web.Router("/data/tables/search-appended-list", &controllers.TableController{}, "Post:SearchAppendedList")  
22 - web.Router("/data/tables/search-sub-table-list", &controllers.TableController{}, "Post:SearchSubTableList")  
23 - web.Router("/data/tables/search-query-set-tables", &controllers.TableController{}, "Post:SearchQuerySetTables")  
24 - web.Router("/data/tables/dependency-graph", &controllers.TableController{}, "Post:DependencyGraph") 9 + tableController := &controllers.TableController{}
  10 + //tableController.BaseController.ErrorResolver, _ = controllers.NewCommErrorResolver()
  11 + web.Router("/data/tables/", tableController, "Post:CreateTable")
  12 + //web.Router("/data/tables/:tableId", tableController, "Put:UpdateTable")
  13 + web.Router("/data/tables/:tableId", tableController, "Get:GetTable")
  14 + web.Router("/data/tables/prepare", tableController, "Get:PrepareTable")
  15 + web.Router("/data/tables/:tableId", tableController, "Delete:RemoveTable")
  16 + web.Router("/data/tables/", tableController, "Get:ListTable")
  17 + web.Router("/data/tables/search", tableController, "Post:Search")
  18 + web.Router("/data/tables/relation-graph", tableController, "Post:RelationGraph")
  19 + web.Router("/data/tables/apply-on", tableController, "Post:ApplyOn")
  20 + web.Router("/data/tables/valid-expr-sql", tableController, "Post:ValidExprSql")
  21 + web.Router("/data/tables/check", tableController, "Post:CheckRowDuplicate")
  22 + web.Router("/data/tables/check-row-value-duplicate", tableController, "Post:CheckRowValueDuplicate")
  23 + web.Router("/data/tables/search-appended-list", tableController, "Post:SearchAppendedList")
  24 + web.Router("/data/tables/search-sub-table-list", tableController, "Post:SearchSubTableList")
  25 + web.Router("/data/tables/search-query-set-tables", tableController, "Post:SearchQuerySetTables")
  26 + web.Router("/data/tables/dependency-graph", tableController, "Post:DependencyGraph")
25 27
26 - //web.Router("/data/tables/split-data-table", &controllers.TableController{}, "Post:SplitDataTable")  
27 - //web.Router("/data/tables/batch-edit-sub-table", &controllers.TableController{}, "Post:BatchEditSubTable")  
28 - web.Router("/data/tables/copy-data-table", &controllers.TableController{}, "Post:CopyDataTable")  
29 - web.Router("/data/tables/update-table-struct/:tableId", &controllers.TableController{}, "Put:UpdateTableStruct")  
30 - web.Router("/data/tables/add-sub-table", &controllers.TableController{}, "Post:AddTableStruct")  
31 - web.Router("/data/tables/export-table", &controllers.TableController{}, "Post:ExportDataTable") 28 + //web.Router("/data/tables/split-data-table", tableController, "Post:SplitDataTable")
  29 + //web.Router("/data/tables/batch-edit-sub-table", tableController, "Post:BatchEditSubTable")
  30 + web.Router("/data/tables/copy-data-table", tableController, "Post:CopyDataTable")
  31 + web.Router("/data/tables/update-table-struct/:tableId", tableController, "Put:UpdateTableStruct")
  32 + web.Router("/data/tables/add-sub-table", tableController, "Post:AddTableStruct")
  33 + web.Router("/data/tables/export-table", tableController, "Post:ExportDataTable")
32 34
33 - web.Router("/data/tables/table-preview", &controllers.TableController{}, "Post:TablePreview")  
34 - web.Router("/data/tables/row-edit", &controllers.TableController{}, "Post:RowEdit") 35 + web.Router("/data/tables/table-preview", tableController, "Post:TablePreview")
  36 + web.Router("/data/tables/row-edit", tableController, "Post:RowEdit")
35 37
36 - web.Router("/data/field-optional-values", &controllers.TableController{}, "Post:FieldOptionalValues")  
37 - web.Router("/data/table-object-search", &controllers.TableController{}, "Post:TableObjectSearch") 38 + web.Router("/data/field-optional-values", tableController, "Post:FieldOptionalValues")
  39 + web.Router("/data/table-object-search", tableController, "Post:TableObjectSearch")
38 40
39 - web.Router("/business/db-table-preview", &controllers.TableController{}, "Post:DBTablePreview")  
40 - web.Router("/data/table-preview", &controllers.TableController{}, "Post:Preview") 41 + web.Router("/business/db-table-preview", tableController, "Post:DBTablePreview")
  42 + web.Router("/data/table-preview", tableController, "Post:Preview")
41 43
42 } 44 }