mirror of https://github.com/sunface/rust-course
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.4 KiB
56 lines
1.4 KiB
package cache
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
|
|
"github.com/imdotdev/im.dev/server/internal/interaction"
|
|
"github.com/imdotdev/im.dev/server/pkg/db"
|
|
"github.com/imdotdev/im.dev/server/pkg/log"
|
|
"github.com/imdotdev/im.dev/server/pkg/models"
|
|
)
|
|
|
|
var logger = log.RootLogger.New("logger", "cache")
|
|
|
|
func Init() {
|
|
time.Sleep(2 * time.Second)
|
|
for {
|
|
// load users
|
|
rows, err := db.Conn.Query(`SELECT id,username,role,nickname,avatar,last_seen_at,created FROM user`)
|
|
if err != nil {
|
|
logger.Error("load users error", "error", err)
|
|
time.Sleep(60 * time.Second)
|
|
continue
|
|
}
|
|
|
|
var users []*models.User
|
|
usersMap := make(map[string]*models.User)
|
|
for rows.Next() {
|
|
user := &models.User{}
|
|
err := rows.Scan(&user.ID, &user.Username, &user.Role, &user.Nickname, &user.Avatar, &user.LastSeenAt, &user.Created)
|
|
if err != nil {
|
|
logger.Warn("scan user error", "error", err)
|
|
continue
|
|
}
|
|
|
|
err = db.Conn.QueryRow("SELECT tagline from user_profile WHERE id=?", user.ID).Scan(&user.Tagline)
|
|
if err != nil && err != sql.ErrNoRows {
|
|
logger.Warn("query user profile error", "error", err)
|
|
}
|
|
|
|
if user.Cover == "" {
|
|
user.Cover = models.DefaultCover
|
|
}
|
|
|
|
user.Follows = interaction.GetFollows(user.ID)
|
|
users = append(users, user)
|
|
usersMap[user.ID] = user
|
|
}
|
|
|
|
models.UsersCache = users
|
|
models.UsersMapCache = usersMap
|
|
|
|
time.Sleep(60 * time.Second)
|
|
}
|
|
}
|