package main
import (
"encoding/json"
"errors"
"fmt"
"github.com/gorilla/mux"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"io/ioutil"
"log"
"net/http"
"time"
)
//TODO
//日志初始化
//db初始化
// gorm.Model 的定义
/*type Model struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}*/
type AiAlertRule struct {
//gorm.Model
Id string `gorm:"column:id",json:"id"`
UserName string `gorm:"column:user_name",json:"user_name"`
GroupName string `gorm:"column:group_name",json:"group_name"`
Role string `gorm:"column:role",json:"role"`
Editor string `gorm:"column:editor",json:"editor"`
RuleName string `gorm:"column:rule_name",json:"rule_name"`
RuleType string `gorm:"column:rule_type",json:"rule_type"`
RuleStatus string `gorm:"column:rule_status",json:"rule_status"`
RuleConfirm string `gorm:"column:rule_confirm",json:"rule_confirm"`
Instance string `gorm:"column:instance",json:"instance"`
CreateTime time.Time `gorm:"column:create_time",json:"create_time"`
UpdateTime time.Time `gorm:"column:update_time",json:"update_time"`
Clusterid string `gorm:"column:clusterid",json:"clusterid"`
}
//实现 Tabler 接口来更改默认表名
/*type Tabler interface {
TableName() string
}
// TableName 会将 AiAlertRule 的表名重写为 `ai_alert_rule`
func (AiAlertRule) TableName() string {
return "ai_alert_rule"
}*/
//分页封装
/*func Paginate(page int,pageSize int) func(db *gorm.DB) *gorm.DB {
return func (db *gorm.DB) *gorm.DB {
if page <= 0 {
page = 1
}
if pageSize <= 0 {
pageSize = 2
}
offset := (page - 1) * pageSize
return db.Offset(offset).Limit(pageSize)
}
}*/
func requestRes(writer http.ResponseWriter, request *http.Request) {
//连接数据库
dsn := "root:root@tcp(10.166.15.26:3306)/test26?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err !=nil {
fmt.Println("connect false")
}
//fmt.Println(db)
//fmt.Println(err)
//获取请求数据request
var req map[string]interface{}
body, _ := ioutil.ReadAll(request.Body)
//解码函数
//解析json编码的数据并将结果存入req指向的值
json.Unmarshal(body, &req)
//fmt.Println(req)
//var name string = req["name"].(string)
ruleName := req["ruleName"].(string)
ruleType := req["ruleType"].(string)
ruleStatus := req["ruleStatus"].(string)
//fmt.Println(RuleType)
//fmt.Println(RuleStatus)
//数据响应response,RuleName输入为空时
//var res map[string]string = map[string]string{"code": "1", "message": "ok", "body":"hello,world!"}
//var res = map[string]string{"code": "1", "message": "ok", "body":"hello,world!"}
//var res = map[string]string{}
if ruleName == "" {
res1 := map[string]string{ "message":"RuleName null input"}
response, _ := json.Marshal(res1)
writer.Header().Set("Content-Type", "application/json")
writer.WriteHeader(http.StatusOK)
writer.Write(response)
return
}
//RuleName输入不为空时
//var aar AiAlertRule
var aars []AiAlertRule
page := int(req["page"].(float64))
pageSize := int(req["pageSize"].(float64))
if page <= 0 {
page = 1
}
if pageSize <= 0 {
pageSize = 2
}
//查询全部
//result := db.Find(&aars)
//模糊查询
//db.Table("ai_alert_rule").Find(&aars)
result := db.Table("ai_alert_rule").Offset((page - 1) * pageSize).Limit(pageSize).Where("rule_name LIKE ? and rule_type = ? and rule_status = ?", "%"+ruleName+"%",ruleType,ruleStatus).Find(&aars)
//.Limit().Offset()
fmt.Println(aars)
//result := db.Where("rule_name LIKE ?", "%"+RuleName+"%").Find(&aars)
//fmt.Println(aars)
//fmt.Println(result.RowsAffected) // 返回找到的记录数
//fmt.Println(result.Error) // returns error or nil
// 检查 ErrRecordNotFound 错误
errors.Is(result.Error, gorm.ErrRecordNotFound)
//defer db.close()
response, _ := json.Marshal(aars)
writer.Header().Set("Content-Type", "application/json")
//writer.WriteHeader(http.StatusOK)
writer.Write(response)
/*for i := range aars {
res := map[string]AiAlertRule{"data":aars[i]}
编码函数
response, _ := json.Marshal(res)
writer.Header().Set("Content-Type", "application/json")
//writer.WriteHeader(http.StatusOK)
writer.Write(response)
}*/
}
func main() {
//util.InitLogger()
//方式二:使用mux框架
//var r *mux.Router = mux.NewRouter()
r := mux.NewRouter()
r.HandleFunc("/v1/rule/get_rule", requestRes).Methods("POST")
log.Fatal(http.ListenAndServe(":9090", r))
}
postman前端输入如下:
{
"ruleName":"serverless",
"ruleType":"system_serverless",
"ruleStatus":"1",
"page":1,
"pageSize":2
}