houyaf 3 anni fa
parent
commit
f3319e1b0b

+ 15 - 0
constant/constant.go

@@ -25,3 +25,18 @@ const (
 	PARTNER_ROLE_ADMIN = 8
 	PARTNER_ROLE_USER  = 9
 )
+
+// RetCode Result Code
+type RetCode int
+
+// Result Code List
+const (
+	RetOk  RetCode = 0
+	RetErr RetCode = 500
+)
+
+type JsonResult struct {
+	Code RetCode     `json:"code"`
+	Msg  interface{} `json:"msg"`
+	Data interface{} `json:"data"`
+}

+ 190 - 0
repositories/data_bus_rebo.go

@@ -0,0 +1,190 @@
+package repositories
+
+import (
+    "errors"
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodels"
+    "xps/viewmodels"
+)
+
+type DataBusRepo struct {
+    engine *xorm.Engine
+}
+
+func NewDataBusRepo(engine *xorm.Engine) *DataBusRepo {
+    return &DataBusRepo{
+        engine: engine,
+    }
+}
+
+func (d *DataBusRepo) GetPage(sqlSelect, sqlFrom, sqlWhere, sqlOrderBy string, m map[string]interface{}) (*viewmodels.PageResult, error) {
+    limit     := m["limit"].(int)
+    page      := m["page"].(int)
+    
+    sqlCount    := ` SELECT COUNT(*) `
+    _, err1 := d.engine.Exec(sqlCount + sqlFrom + sqlWhere)
+    if err1 != nil {
+        return nil, err1
+    }
+    
+    pageStart  := (page - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist := make([]datamodels.App, 0)
+    err2 := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err2 != nil {
+        return nil, err2
+    }
+    
+    pageResult := &viewmodels.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = 0
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *DataBusRepo) GetList(sqlSelect, sqlFrom, sqlWhere, sqlOrderBy string, m map[string]interface{}) ([]map[string]interface{}, error) {
+    results, err := d.engine.QueryInterface(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy)
+    if err != nil {
+        return nil, err
+    }
+    return results, nil
+}
+
+func (d *DataBusRepo) GetById(statement string, fields map[string]interface{})(map[string]interface{}, error){
+    
+    sql := statement
+    sql += " WHERE 1 = 1"
+    
+    for fieldName, fieldValue := range fields {
+        sql += fmt.Sprintf(" AND %v = %v", fieldName, fieldValue)
+    }
+    results, err   := d.engine.QueryInterface(sql)
+    
+    if err != nil {
+        return nil, err
+    }
+    if len(results) > 1 {
+        return nil, errors.New(" 主键不唯一")
+    }
+    
+    return results[0], nil
+}
+
+func (d *DataBusRepo) Create(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
+    tableName := object.ObjectCode
+    
+    sql := "INSERT INTO" + fmt.Sprintf(" %s ", tableName)
+    sqlFields := "( "
+    sqlValues := "( "
+    for idx, field := range fields {
+        fieldName := field.AttrCode
+        fieldValue, ok := values[fieldName]
+        if !ok {
+            return nil
+        }
+        
+        if idx > 1 {
+            sqlFields += ","
+            sqlValues += ","
+        }
+    
+        sqlFields += fieldName + ""
+        sqlValues += fmt.Sprintf("%v", fieldValue) + ""
+    }
+    sqlFields += ") "
+    sqlValues += ") "
+    
+    _, err := d.engine.Exec(sql + sqlFields + sqlValues)
+    return err
+}
+
+func (d *DataBusRepo) Update(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
+    tableName := object.ObjectCode
+    
+    sql := fmt.Sprintf("UPDATE table %s ", tableName)
+    
+    sqlFieldSets   := "SET "
+    sqlWhere := "WHERE 1 = 1"
+    for idx, field := range fields {
+        fieldName := field.AttrCode
+        fieldValue, ok := values[fieldName]
+        if !ok {
+            return nil
+        }
+    
+        if idx > 1 {
+            sqlFieldSets += ","
+        }
+        
+        if field.IsPKey <= 0 {
+            sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+        } else {
+            sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
+        }
+    }
+    
+    _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
+    return err
+}
+
+func (d *DataBusRepo) Patch(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
+    tableName := object.ObjectCode
+    
+    sql := fmt.Sprintf("UPDATE table %s ", tableName)
+    
+    sqlFieldSets   := "SET "
+    sqlWhere := "WHERE 1 = 1"
+    for idx, field := range fields {
+        fieldName := field.AttrCode
+        fieldValue, ok := values[fieldName]
+        if !ok {
+            return nil
+        }
+        
+        if idx > 1 {
+            sqlFieldSets += ","
+        }
+        
+        if field.IsPKey <= 0 {
+            sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+        } else {
+            sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
+        }
+    }
+    
+    _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
+    return err
+}
+
+
+func (d *DataBusRepo) Delete(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
+    tableName := object.ObjectCode
+    deletedBy := values["deletedBy"].(int64)
+    
+    sql := fmt.Sprintf("UPDATE table %s ", tableName)
+    sqlFieldSets   := fmt.Sprintf("SET deleted_flag = 1 AND deleted_by = %d AND deleted_at = %s", deletedBy, time.Now().String())
+    
+    sqlWhere := "WHERE 1 = 1"
+    for idx, field := range fields {
+        fieldName := field.AttrCode
+        fieldValue, ok := values[fieldName]
+        if !ok {
+            return nil
+        }
+        
+        if idx > 1 {
+            sqlFieldSets += ","
+        }
+        
+        if field.IsPKey >= 1 {
+            sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
+        }
+    }
+    
+    _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
+    return err
+}

+ 33 - 5
service/api_gateway_service.go

@@ -1,27 +1,55 @@
 package service
 
 import (
+    "errors"
     "xps/datasource"
     "xps/repositories"
 )
 
 type ApiGatewayService interface {
-    HandleRequest(m map[string]interface{})  error
+    Get(apiCode string, m map[string]interface{})([]map[string]interface{}, error)
+    Create(apiCode string, m map[string]interface{})error
+    Update(apiCode string, m map[string]interface{})error
+    Patch(apiCode string, m map[string]interface{})error
+    Delete(apiCode string, m map[string]interface{})error
 }
 
 
 type apiGatewayService struct {
     apiRepo *repositories.ApiRepo
+    dataBus *repositories.DataBusRepo
 }
 
-func (a apiGatewayService) HandleRequest(m map[string]interface{}) error {
-    
-    return nil
-}
 
 func NewApiGatewayService() ApiGatewayService {
     return &apiGatewayService{
         apiRepo: repositories.NewApiRepo(datasource.InstanceMaster()),
+        dataBus: repositories.NewDataBusRepo(datasource.InstanceMaster()),
     }
 }
 
+
+func (a apiGatewayService) Get(apiCode string, m map[string]interface{}) ([]map[string]interface{}, error) {
+    return nil, errors.New("TEST")
+}
+
+
+func (a apiGatewayService) Create(apiCode string, m map[string]interface{}) error {
+    //TODO implement me
+    panic("implement me")
+}
+
+func (a apiGatewayService) Update(apiCode string, m map[string]interface{}) error {
+    //TODO implement me
+    panic("implement me")
+}
+
+func (a apiGatewayService) Patch(apiCode string, m map[string]interface{}) error {
+    //TODO implement me
+    panic("implement me")
+}
+
+func (a apiGatewayService) Delete(apiCode string, m map[string]interface{}) error {
+    //TODO implement me
+    panic("implement me")
+}

+ 68 - 0
web/controllers/api_gateway_controller.go

@@ -1 +1,69 @@
 package controllers
+
+import (
+    "github.com/kataras/iris/v12/mvc"
+    "xps/service"
+)
+
+type ApiGatewayController struct {
+    Base
+    Service service.ApiGatewayService
+}
+
+func (c *ApiGatewayController) BeforeActivation(b mvc.BeforeActivation) {
+    b.Handle("GET",         "/{apiCode:string}",              "Get"     )
+    b.Handle("POST",        "/{apiCode:string}",              "Create"  )
+    b.Handle("PUT",         "/{apiCode:string}",              "Update"  )
+    b.Handle("PATCH",       "/{apiCode:string}",              "Patch"   )
+    b.Handle("DELETE",      "/{apiCode:string}",              "Delete"  )
+}
+
+func (c *ApiGatewayController) Get(apiCode string) *JsonResult {
+    m := c.buildParams()
+    data, err := c.Service.Get(apiCode, m)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *ApiGatewayController) Create(apiCode string) *JsonResult {
+    m := c.buildParams()
+    err := c.Service.Create(apiCode, m)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("创建成功", nil)
+    }
+}
+
+func (c *ApiGatewayController) Update(apiCode string) *JsonResult {
+    m := c.buildParams()
+    err := c.Service.Update(apiCode, m)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("更新成功", nil)
+    }
+}
+
+func (c *ApiGatewayController) Patch(apiCode string)*JsonResult{
+    m := c.buildParams()
+    err := c.Service.Patch(apiCode, m)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("更新成功", nil)
+    }
+}
+
+func (c *ApiGatewayController) Delete(apiCode string) *JsonResult {
+    m := c.buildParams()
+    err := c.Service.Delete(apiCode, m)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("删除成功", nil)
+    }
+}