package main //import "fmt" import "strconv" import "html/template" type Topic struct { ID int Link string Title string Content string CreatedBy int IsClosed bool Sticky bool CreatedAt string LastReplyAt string //LastReplyBy int ParentID int Status string // Deprecated. Marked for removal. IPAddress string PostCount int LikeCount int ClassName string // CSS Class Name Data string // Used for report metadata } type TopicUser struct { ID int Link string Title string Content string CreatedBy int IsClosed bool Sticky bool CreatedAt string LastReplyAt string //LastReplyBy int ParentID int Status string // Deprecated. Marked for removal. IPAddress string PostCount int LikeCount int ClassName string Data string // Used for report metadata UserLink string CreatedByName string Group int Avatar string ContentLines int Tag string URL string URLPrefix string URLName string Level int Liked bool } type TopicsRow struct { ID int Link string Title string Content string CreatedBy int IsClosed bool Sticky bool CreatedAt string LastReplyAt string LastReplyBy int ParentID int Status string // Deprecated. Marked for removal. -Is there anything we could use it for? IPAddress string PostCount int LikeCount int ClassName string Data string // Used for report metadata Creator *User CSS template.CSS ContentLines int LastUser *User ForumName string //TopicsRow ForumLink string } func getTopicuser(tid int) (TopicUser, error) { if config.CacheTopicUser != CACHE_SQL { topic, err := topics.Get(tid) if err == nil { user, err := users.CascadeGet(topic.CreatedBy) if err != nil { return TopicUser{ID: tid}, err } // We might be better off just passing seperate topic and user structs to the caller? return copyTopicToTopicuser(topic, user), nil } else if users.GetLength() < users.GetCapacity() { topic, err = topics.CascadeGet(tid) if err != nil { return TopicUser{ID: tid}, err } user, err := users.CascadeGet(topic.CreatedBy) if err != nil { return TopicUser{ID: tid}, err } return copyTopicToTopicuser(topic, user), nil } } tu := TopicUser{ID: tid} err := get_topic_user_stmt.QueryRow(tid).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level) tu.Link = buildTopicURL(nameToSlug(tu.Title), tu.ID) tu.UserLink = buildProfileURL(nameToSlug(tu.CreatedByName), tu.CreatedBy) theTopic := Topic{ID: tu.ID, Link: tu.Link, Title: tu.Title, Content: tu.Content, CreatedBy: tu.CreatedBy, IsClosed: tu.IsClosed, Sticky: tu.Sticky, CreatedAt: tu.CreatedAt, LastReplyAt: tu.LastReplyAt, ParentID: tu.ParentID, IPAddress: tu.IPAddress, PostCount: tu.PostCount, LikeCount: tu.LikeCount} //log.Printf("the_topic: %+v\n", the_topic) tu.Tag = groups[tu.Group].Tag _ = topics.Add(&theTopic) return tu, err } func copyTopicToTopicuser(topic *Topic, user *User) (tu TopicUser) { tu.UserLink = user.Link tu.CreatedByName = user.Name tu.Group = user.Group tu.Avatar = user.Avatar tu.URLPrefix = user.URLPrefix tu.URLName = user.URLName tu.Level = user.Level tu.ID = topic.ID tu.Link = topic.Link tu.Title = topic.Title tu.Content = topic.Content tu.CreatedBy = topic.CreatedBy tu.IsClosed = topic.IsClosed tu.Sticky = topic.Sticky tu.CreatedAt = topic.CreatedAt tu.LastReplyAt = topic.LastReplyAt tu.ParentID = topic.ParentID tu.IPAddress = topic.IPAddress tu.PostCount = topic.PostCount tu.LikeCount = topic.LikeCount tu.Data = topic.Data return tu } func getTopicByReply(rid int) (*Topic, error) { topic := Topic{ID: 0} err := get_topic_by_reply_stmt.QueryRow(rid).Scan(&topic.ID, &topic.Title, &topic.Content, &topic.CreatedBy, &topic.CreatedAt, &topic.IsClosed, &topic.Sticky, &topic.ParentID, &topic.IPAddress, &topic.PostCount, &topic.LikeCount, &topic.Data) topic.Link = buildTopicURL(nameToSlug(topic.Title), topic.ID) return &topic, err } func buildTopicURL(slug string, tid int) string { if slug == "" { return "/topic/" + strconv.Itoa(tid) } return "/topic/" + slug + "." + strconv.Itoa(tid) } // I don't care if it isn't used,, it will likely be in the future. Nolint. // nolint func getTopicURLPrefix() string { return "/topic/" }