Files
nl-blogs/server/repositories/setting_repository.go
2026-01-15 13:51:44 +08:00

145 lines
3.3 KiB
Go

package repositories
import (
"database/sql"
"log"
"github.com/niangaodev/art-code/config"
"github.com/niangaodev/art-code/models"
)
// GetSettings 获取所有系统配置
func GetSettings() ([]models.Setting, error) {
query := "SELECT id, key_name, value, description, created_at, updated_at FROM settings ORDER BY key_name"
rows, err := config.DB.Query(query)
if err != nil {
log.Printf("Error querying settings: %v", err)
return nil, err
}
defer rows.Close()
var settings []models.Setting
for rows.Next() {
var setting models.Setting
if err := rows.Scan(
&setting.ID,
&setting.KeyName,
&setting.Value,
&setting.Description,
&setting.CreatedAt,
&setting.UpdatedAt,
); err != nil {
log.Printf("Error scanning setting: %v", err)
continue
}
settings = append(settings, setting)
}
return settings, nil
}
// GetSettingByKey 根据键名获取系统配置
func GetSettingByKey(keyName string) (*models.Setting, error) {
query := "SELECT id, key_name, value, description, created_at, updated_at FROM settings WHERE key_name = ?"
row := config.DB.QueryRow(query, keyName)
var setting models.Setting
if err := row.Scan(
&setting.ID,
&setting.KeyName,
&setting.Value,
&setting.Description,
&setting.CreatedAt,
&setting.UpdatedAt,
); err != nil {
if err == sql.ErrNoRows {
return nil, nil
}
log.Printf("Error scanning setting by key: %v", err)
return nil, err
}
return &setting, nil
}
// UpdateSetting 更新系统配置
func UpdateSetting(setting *models.Setting) error {
query := `
UPDATE settings SET value = ?, description = ?, updated_at = NOW()
WHERE key_name = ?
`
_, err := config.DB.Exec(
query,
setting.Value,
setting.Description,
setting.KeyName,
)
if err != nil {
log.Printf("Error updating setting: %v", err)
return err
}
return nil
}
// CreateSetting 创建系统配置
func CreateSetting(setting *models.Setting) error {
query := `
INSERT INTO settings (key_name, value, description, created_at, updated_at)
VALUES (?, ?, ?, NOW(), NOW())
`
result, err := config.DB.Exec(
query,
setting.KeyName,
setting.Value,
setting.Description,
)
if err != nil {
log.Printf("Error creating setting: %v", err)
return err
}
// 获取自增ID
id, err := result.LastInsertId()
if err != nil {
log.Printf("Error getting last insert ID: %v", err)
return err
}
setting.ID = uint(id)
return nil
}
// DeleteSetting 删除系统配置
func DeleteSetting(keyName string) error {
query := "DELETE FROM settings WHERE key_name = ?"
_, err := config.DB.Exec(query, keyName)
if err != nil {
log.Printf("Error deleting setting: %v", err)
return err
}
return nil
}
// BuildSettingResponse 构建系统配置响应
func BuildSettingResponse(setting *models.Setting) *models.SettingResponse {
return &models.SettingResponse{
ID: setting.ID,
KeyName: setting.KeyName,
Value: setting.Value,
Description: setting.Description,
CreatedAt: setting.CreatedAt.Format("2006-01-02 15:04:05"),
UpdatedAt: setting.UpdatedAt.Format("2006-01-02 15:04:05"),
}
}
// BuildSettingsResponse 构建系统配置列表响应
func BuildSettingsResponse(settings []models.Setting) []models.SettingResponse {
var responses []models.SettingResponse
for _, setting := range settings {
responses = append(responses, *BuildSettingResponse(&setting))
}
return responses
}