145 lines
3.3 KiB
Go
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
|
|
}
|