合作页面的内容

This commit is contained in:
李琦
2026-01-16 09:32:46 +08:00
parent a23b718865
commit 3bcef22487
15 changed files with 819 additions and 432 deletions

View File

@@ -0,0 +1,91 @@
package repositories
import (
"github.com/niangaodev/art-code/config"
"github.com/niangaodev/art-code/models"
)
// CreateAccessLog 创建访问日志
func CreateAccessLog(log *models.AccessLog) error {
query := `INSERT INTO access_logs (ip, user_agent, path, method, status_code, response_time, region) VALUES (?, ?, ?, ?, ?, ?, ?)`
_, err := config.DB.Exec(query, log.IP, log.UserAgent, log.Path, log.Method, log.StatusCode, log.ResponseTime, log.Region)
return err
}
// GetDailyUV 获取最近7天UV
func GetDailyUV() ([]struct {
Date string
Count int
}, error) {
query := `
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') as date, COUNT(DISTINCT ip) as count
FROM access_logs
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
GROUP BY date
ORDER BY date ASC
`
rows, err := config.DB.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
var results []struct {
Date string
Count int
}
for rows.Next() {
var r struct {
Date string
Count int
}
if err := rows.Scan(&r.Date, &r.Count); err != nil {
return nil, err
}
results = append(results, r)
}
return results, nil
}
// GetUserRegions 获取用户地域分布
func GetUserRegions() ([]struct {
Region string
Count int
}, error) {
// 简单的截取省份逻辑,实际可能需要更复杂的解析,这里假设region格式为 国家|区域|省份|城市|ISP
// 我们可以取省份 (第3部分)
query := `
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(region, '|', 3), '|', -1) as province,
COUNT(DISTINCT ip) as count
FROM access_logs
WHERE region != 'Internal' AND region != 'Unknown' AND region IS NOT NULL
GROUP BY province
ORDER BY count DESC
LIMIT 20
`
rows, err := config.DB.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
var results []struct {
Region string
Count int
}
for rows.Next() {
var r struct {
Region string
Count int
}
if err := rows.Scan(&r.Region, &r.Count); err != nil {
return nil, err
}
// 过滤掉无效数据
if r.Region != "" && r.Region != "0" {
results = append(results, r)
}
}
return results, nil
}

View File

@@ -375,3 +375,75 @@ func BuildPostHistoryResponses(history []models.PostHistory) []models.PostHistor
}
return responses
}
// GetNewPostsTrend 获取最近7天新增文章趋势
func GetNewPostsTrend() ([]struct {
Date string
Count int
}, error) {
query := `
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') as date, COUNT(*) as count
FROM posts
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
GROUP BY date
ORDER BY date ASC
`
rows, err := config.DB.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
var results []struct {
Date string
Count int
}
for rows.Next() {
var r struct {
Date string
Count int
}
if err := rows.Scan(&r.Date, &r.Count); err != nil {
return nil, err
}
results = append(results, r)
}
return results, nil
}
// GetTopPosts 获取热门文章 (按阅读量)
func GetTopPosts(limit int) ([]models.Post, error) {
query := `
SELECT id, title, category, date, excerpt, content, read_count, is_published, created_at, updated_at
FROM posts
WHERE is_published = 1
ORDER BY read_count DESC
LIMIT ?
`
rows, err := config.DB.Query(query, limit)
if err != nil {
return nil, err
}
defer rows.Close()
var posts []models.Post
for rows.Next() {
var post models.Post
if err := rows.Scan(
&post.ID,
&post.Title,
&post.Category,
&post.Date,
&post.Excerpt,
&post.Content,
&post.ReadCount,
&post.IsPublished,
&post.CreatedAt,
&post.UpdatedAt,
); err != nil {
continue
}
posts = append(posts, post)
}
return posts, nil
}