From 9dcdd3e93c249f60c6d161cd423633da6bfbb780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=9C=E8=8F=AF?= Date: Tue, 11 Apr 2023 17:50:17 +0800 Subject: [PATCH] listview --- bin/main.go | 142 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 135 insertions(+), 7 deletions(-) diff --git a/bin/main.go b/bin/main.go index 62e1b99..6226537 100644 --- a/bin/main.go +++ b/bin/main.go @@ -45,12 +45,19 @@ type Image struct { UpdateTime time.Time `json:"update_time"` } -type Images struct { - Page int `json:"page"` - PageSize int `json:"page_size"` - Total int `json:"total"` - Next bool `json:"next"` - List []Image `json:"list"` +type Tag struct { + Id int `json:"id"` + Name string `json:"name"` + CreateTime time.Time `json:"create_time"` + UpdateTime time.Time `json:"update_time"` +} + +type ListView struct { + Page int `json:"page"` + PageSize int `json:"page_size"` + Total int `json:"total"` + Next bool `json:"next"` + List []interface{} `json:"list"` } func main() { @@ -59,6 +66,127 @@ func main() { var mysqlConnection models.MysqlConnection mysqlConnection.Init() + // 获取标签列表 + http.HandleFunc("/tags", func(w http.ResponseWriter, r *http.Request) { + defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 + + // 标签的原理 + // 1. 通过文章的 tag 字段, 获取所有的标签 + // 2. 通过标签的 id, 获取标签的名称 + + // 热门权重指数的标签排序 + // 1. 标签的权重指数 = (标签的文章数 * 标签的文章数) * 近期增幅 + // 2. 标签的近期增幅 = (标签的文章数 - 标签的文章数) / 标签的文章数 + + // 标签是一个虚拟表, ORC 提取的数据都带有多个维度的比重概率(分布概率, 对比度概率, 文字大小, 文字重量, 词频概率, 词性概率, 词长概率, 词序概率) + // 经过规则过滤后, 用动态调参的指数计算乘积作为权重, 权重仍达到某个阈值的数据才会被视为标签 + + // 获取查询条件(忽略空值), 超级简洁写法 + QueryConditions := func(key string) (list []string) { + if r.FormValue(key) != "" { + list = strings.Split(r.FormValue(key), ",") + } + return + } + + // 拼接查询条件, 超级简洁写法 + conditions := "" + if authors := QueryConditions("authors"); len(authors) > 0 { + conditions += fmt.Sprintf(" AND author IN (%s)", strings.Join(authors, ",")) + } + if tags := QueryConditions("tags"); len(tags) > 0 { + conditions += fmt.Sprintf(" AND tag IN (%s)", strings.Join(tags, ",")) + } + if categories := QueryConditions("categories"); len(categories) > 0 { + conditions += fmt.Sprintf(" AND categorie IN (%s)", strings.Join(categories, ",")) + } + + // 打印web_tags表的所有字段 + rows, err := mysqlConnection.Database.Query("SELECT * FROM web_tags LIMIT 1") + if err != nil { + log.Println(err) + return + } + defer rows.Close() + for rows.Next() { + // 获取字段名 + columns, err := rows.Columns() + if err != nil { + log.Println(err) + continue + } + // 获取字段值 + values := make([]interface{}, len(columns)) + for i := range values { + values[i] = new(interface{}) + } + if err := rows.Scan(values...); err != nil { + log.Println(err) + continue + } + // 打印字段名和字段值 + for i, column := range columns { + log.Println(column, *(values[i].(*interface{}))) + } + } + if err := rows.Err(); err != nil { + log.Println(err) + return + } + + // 打印web_tags表的总数 + var total int + if err := mysqlConnection.Database.QueryRow("SELECT COUNT(*) FROM web_tags").Scan(&total); err != nil { + log.Println(err) + return + } + log.Println("total", total) + + /** + // 获取标签列表 + var tags ListView + tags.Page, tags.PageSize = stringToInt(r.FormValue("page"), 1), stringToInt(r.FormValue("pageSize"), 10) + rows, err := mysqlConnection.Database.Query("SELECT id, name, update_time, create_time FROM web_tags"+conditions+" ORDER BY id DESC LIMIT ?, ?", (tags.Page-1)*tags.PageSize, tags.PageSize) + if err != nil { + log.Println(err) + return + } + defer rows.Close() + for rows.Next() { + var tag Tag + if err := rows.Scan(&tag.Id, &tag.Name, &tag.UpdateTime, &tag.CreateTime); err != nil { + log.Println(err) + continue + } + tags.List = append(tags.List, tag) + } + if err := rows.Err(); err != nil { + log.Println(err) + return + } + + // 获取总数 + if err := mysqlConnection.Database.QueryRow("SELECT COUNT(*) FROM web_tags" + conditions).Scan(&tags.Total); err != nil { + log.Println(err) + return + } + + // 是否有下一页 + tags.Next = tags.Total > tags.Page*tags.PageSize + + // 将对象转换为有缩进的JSON输出 + json, err := json.MarshalIndent(tags, "", " ") + if err != nil { + log.Println(err) + return + } + + // 输出JSON + w.Header().Set("Content-Type", "application/json") + w.Write(json) + **/ + }) + // 获取图片信息列表(分页) http.HandleFunc("/images", func(w http.ResponseWriter, r *http.Request) { defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志 @@ -100,7 +228,7 @@ func main() { } // 获取图片列表 - var images Images + var images ListView images.Page, images.PageSize = stringToInt(r.URL.Query().Get("page"), 1), stringToInt(r.URL.Query().Get("pageSize"), 10) rows, err := mysqlConnection.Database.Query("SELECT id, content, update_time, create_time FROM web_images"+conditions+" LIMIT ?, ?", (images.Page-1)*images.PageSize, images.PageSize) if err != nil {