diff --git a/config/config.go b/config/config.go index 49e0371..d03245d 100644 --- a/config/config.go +++ b/config/config.go @@ -1,7 +1,6 @@ package config import ( - "fmt" "log/slog" "os" "strconv" @@ -133,41 +132,3 @@ func getEnv(key, defaultValue string) string { } return defaultValue } - -// CreateDefaultConfig 创建默认配置文件 -func CreateDefaultConfig() error { - configDir := "./config" - if _, err := os.Stat(configDir); os.IsNotExist(err) { - if err := os.MkdirAll(configDir, 0755); err != nil { - return fmt.Errorf("创建配置目录失败: %w", err) - } - } - - configPath := configDir + "/config.yaml" - if _, err := os.Stat(configPath); err == nil { - return nil // 配置文件已存在 - } - - defaultConfig := `# GoBlog 配置文件 -server: - port: 8080 - mode: debug # debug 或 release - -database: - driver: sqlite # sqlite 或 mysql - dsn: goblog.db # SQLite文件路径或MySQL DSN - -app: - name: GoBlog - description: 一个简洁的个人博客 - author: Admin - theme: default # 主题名称 -` - - if err := os.WriteFile(configPath, []byte(defaultConfig), 0644); err != nil { - return fmt.Errorf("创建配置文件失败: %w", err) - } - - slog.Info("已创建默认配置文件", "file", configPath) - return nil -} diff --git a/database/database.go b/database/database.go index cd90498..eeffc23 100644 --- a/database/database.go +++ b/database/database.go @@ -3,7 +3,7 @@ package database import ( "goblog/config" "goblog/models" - "log" + "log/slog" "github.com/glebarez/sqlite" "gorm.io/gorm" @@ -36,28 +36,6 @@ func Init(cfg *config.DatabaseConfig) error { return err } - log.Println("数据库连接成功") - return nil -} - -// 创建默认管理员 -func CreateDefaultAdmin() error { - var count int64 - DB.Model(&models.User{}).Where("role = ?", "admin").Count(&count) - - if count == 0 { - admin := &models.User{ - Username: "admin", - Password: "$2a$10$XrrWkDB.DIpuXOYYrMiZdOBpl0gxrtziSCQ4OOnGFP10C8.xF30qq", // admin123 - Nickname: "管理员", - Email: "admin@example.com", - Role: "admin", - Status: 1, - } - if err := DB.Create(admin).Error; err != nil { - return err - } - log.Println("默认管理员创建成功,用户名: admin,密码: admin123") - } + slog.Info("数据库连接成功") return nil } diff --git a/goblog.db b/goblog.db index fd3dfac..9a211df 100644 Binary files a/goblog.db and b/goblog.db differ diff --git a/handlers/post.go b/handlers/post.go index 3598532..4ec74a7 100644 --- a/handlers/post.go +++ b/handlers/post.go @@ -77,6 +77,11 @@ func GetPosts(c *gin.Context) { db = db.Where("category_id = ?", query.CategoryID) } + userId, exists := c.Get("userID") + if exists { + db = db.Where("author_id = ?", userId) + } + if query.TagID > 0 { db = db.Joins("JOIN post_tags ON post_tags.post_id = posts.id"). Where("post_tags.tag_id = ?", query.TagID) diff --git a/handlers/view.go b/handlers/view.go index 2c50f70..9f8f7db 100644 --- a/handlers/view.go +++ b/handlers/view.go @@ -76,6 +76,12 @@ func IndexView(c *gin.Context) { db := database.DB.Model(&models.Post{}).Preload("Category").Preload("Tags").Preload("Author"). Where("status = ?", "published") + userId, exists := c.Get("userID") + userId, exists = 1, true + if exists { + db = db.Or("author_id = ?", userId) + } + if categoryID > 0 { db = db.Where("category_id = ?", categoryID) } diff --git a/main.go b/main.go index 7287088..32f3273 100644 --- a/main.go +++ b/main.go @@ -13,11 +13,6 @@ import ( ) func main() { - // 创建默认配置文件(如果不存在) - if err := config.CreateDefaultConfig(); err != nil { - slog.Error("创建默认配置文件失败", "error", err) - } - // 加载配置 cfg := config.Load() @@ -43,12 +38,6 @@ func main() { os.Exit(1) } - // 创建默认管理员 - if err := database.CreateDefaultAdmin(); err != nil { - slog.Error("创建默认管理员失败", "error", err) - os.Exit(1) - } - // 从数据库读取主题设置,如果不存在则使用配置文件中的值 theme := cfg.App.Theme var option models.Option diff --git a/utils/templateRenderer.go b/utils/templateRenderer.go index 338ca5b..d497c08 100644 --- a/utils/templateRenderer.go +++ b/utils/templateRenderer.go @@ -4,6 +4,7 @@ import ( "fmt" "html/template" "net/http" + "path/filepath" "sync" "github.com/gin-gonic/gin/render" @@ -84,16 +85,43 @@ func (r *TemplateRenderer) Reload(theme string) { func (r *TemplateRenderer) reload(theme string) { templateDir := "templates/" + theme + // 需要独立渲染的页面模板 + pages := []string{"index", "post", "page"} + + // 收集主题目录下的公共局部模板(例如 sidebar/header/footer), + // 这些模板通过 {{template "xxx" .}} 被 base.html 引用, + // 必须与页面模板一起解析,否则渲染时会因模板未定义而失败(白屏)。 + partials := []string{} + if matches, err := filepath.Glob(templateDir + "/*.html"); err == nil { + for _, f := range matches { + base := filepath.Base(f) + if base == "base.html" { + continue + } + name := base[:len(base)-len(".html")] + isPage := false + for _, p := range pages { + if p == name { + isPage = true + break + } + } + if !isPage { + partials = append(partials, f) + } + } + } + // 为每个页面创建独立的模板组合 - pages := []string{"index", "post", "page", "sidebar"} newTemplates := make(map[string]*template.Template) for _, pageName := range pages { - // 只加载 base.html 和对应的页面模板 + // 加载 base.html、对应页面模板以及所有公共局部模板 allFiles := []string{ templateDir + "/base.html", templateDir + "/" + pageName + ".html", } + allFiles = append(allFiles, partials...) // 解析模板文件 tmpl, err := template.New("").Funcs(templateFuncs()).ParseFiles(allFiles...)