diff --git a/bin/main.go b/bin/main.go index 991f356..221c0d6 100644 --- a/bin/main.go +++ b/bin/main.go @@ -37,6 +37,21 @@ func LogComponent(startTime int64, r *http.Request) { log.Println(r.Method, r.URL.Path, endTime) } +type User struct { + Id int `json:"id"` + UserName string `json:"user_name"` + CreateTime time.Time `json:"create_time"` + UpdateTime time.Time `json:"update_time"` +} + +type Article struct { + Id int `json:"id"` + Title string `json:"title"` + Tags string `json:"tags"` + CreateTime time.Time `json:"create_time"` + UpdateTime time.Time `json:"update_time"` +} + type Image struct { Id int `json:"id"` Width int `json:"width"` @@ -44,6 +59,8 @@ type Image struct { Content string `json:"content"` CreateTime time.Time `json:"create_time"` UpdateTime time.Time `json:"update_time"` + User User `json:"user"` + Article Article `json:"article"` } type Tag struct { @@ -173,7 +190,7 @@ func main() { var images ListView var image_list []Image 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, width, height, content, update_time, create_time FROM web_images"+conditions+" LIMIT ?, ?", (images.Page-1)*images.PageSize, images.PageSize) + rows, err := mysqlConnection.Database.Query("SELECT id, width, height, content, update_time, create_time, user_id FROM web_images"+conditions+" LIMIT ?, ?", (images.Page-1)*images.PageSize, images.PageSize) if err != nil { log.Println("获取图片列表失败", err) http.Error(w, err.Error(), http.StatusBadRequest) @@ -182,7 +199,7 @@ func main() { defer rows.Close() for rows.Next() { var image Image - rows.Scan(&image.Id, &image.Width, &image.Height, &image.Content, &image.UpdateTime, &image.CreateTime) + rows.Scan(&image.Id, &image.Width, &image.Height, &image.Content, &image.UpdateTime, &image.CreateTime, &image.User.Id) image.UpdateTime = image.UpdateTime.UTC() image.CreateTime = image.CreateTime.UTC() image.Content = regexp.MustCompile(`http:`).ReplaceAllString(image.Content, "https:") @@ -202,6 +219,43 @@ func main() { image_list = image_list_sorted } + // 附加用户信息(第一步: 获取用户ID列表) + var user_ids []int + for _, image := range image_list { + user_ids = append(user_ids, image.User.Id) + } + + // 附加用户信息(第二步: 获取用户信息) + var users []User + if len(user_ids) > 0 { + // 使用逗号分隔的用户ID列表查询用户信息 strings.Join(strings.Fields(fmt.Sprint(user_ids)), ",") + user_ids_str := strings.Trim(strings.Replace(fmt.Sprint(user_ids), " ", ",", -1), "[]") + fmt.Println(user_ids_str) + rows, err := mysqlConnection.Database.Query("SELECT id, user_name, update_time, create_time FROM web_member WHERE id IN (" + user_ids_str + ")") + if err != nil { + log.Println("获取用户列表失败", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + defer rows.Close() + for rows.Next() { + var user User + rows.Scan(&user.Id, &user.UserName, &user.UpdateTime, &user.CreateTime) + user.UpdateTime = user.UpdateTime.UTC() + user.CreateTime = user.CreateTime.UTC() + users = append(users, user) + } + } + + // 附加用户信息(第三步: 将用户信息附加到图片信息中) + for i, image := range image_list { + for _, user := range users { + if image.User.Id == user.Id { + image_list[i].User = user + } + } + } + // 将 []Image 转换为 []interface{} images.List = make([]interface{}, len(image_list)) for i, v := range image_list {