100 lines
3.0 KiB
Go
100 lines
3.0 KiB
Go
|
|
package repository
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
|
||
|
|
"gorm.io/gorm"
|
||
|
|
|
||
|
|
"github.com/user-management-system/internal/domain"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ThemeConfigRepository 主题配置数据访问层
|
||
|
|
type ThemeConfigRepository struct {
|
||
|
|
db *gorm.DB
|
||
|
|
}
|
||
|
|
|
||
|
|
// NewThemeConfigRepository 创建主题配置数据访问层
|
||
|
|
func NewThemeConfigRepository(db *gorm.DB) *ThemeConfigRepository {
|
||
|
|
return &ThemeConfigRepository{db: db}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Create 创建主题配置
|
||
|
|
func (r *ThemeConfigRepository) Create(ctx context.Context, theme *domain.ThemeConfig) error {
|
||
|
|
return r.db.WithContext(ctx).Create(theme).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
// Update 更新主题配置
|
||
|
|
func (r *ThemeConfigRepository) Update(ctx context.Context, theme *domain.ThemeConfig) error {
|
||
|
|
return r.db.WithContext(ctx).Save(theme).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
// Delete 删除主题配置
|
||
|
|
func (r *ThemeConfigRepository) Delete(ctx context.Context, id int64) error {
|
||
|
|
return r.db.WithContext(ctx).Delete(&domain.ThemeConfig{}, id).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetByID 根据ID获取主题配置
|
||
|
|
func (r *ThemeConfigRepository) GetByID(ctx context.Context, id int64) (*domain.ThemeConfig, error) {
|
||
|
|
var theme domain.ThemeConfig
|
||
|
|
err := r.db.WithContext(ctx).First(&theme, id).Error
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &theme, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetByName 根据名称获取主题配置
|
||
|
|
func (r *ThemeConfigRepository) GetByName(ctx context.Context, name string) (*domain.ThemeConfig, error) {
|
||
|
|
var theme domain.ThemeConfig
|
||
|
|
err := r.db.WithContext(ctx).Where("name = ?", name).First(&theme).Error
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &theme, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetDefault 获取默认主题
|
||
|
|
func (r *ThemeConfigRepository) GetDefault(ctx context.Context) (*domain.ThemeConfig, error) {
|
||
|
|
var theme domain.ThemeConfig
|
||
|
|
err := r.db.WithContext(ctx).Where("is_default = ?", true).First(&theme).Error
|
||
|
|
if err != nil {
|
||
|
|
// 如果没有默认主题,返回默认配置
|
||
|
|
if err == gorm.ErrRecordNotFound {
|
||
|
|
return domain.DefaultThemeConfig(), nil
|
||
|
|
}
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &theme, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// List 获取所有已启用的主题配置
|
||
|
|
func (r *ThemeConfigRepository) List(ctx context.Context) ([]*domain.ThemeConfig, error) {
|
||
|
|
var themes []*domain.ThemeConfig
|
||
|
|
err := r.db.WithContext(ctx).Where("enabled = ?", true).Order("is_default DESC, id ASC").Find(&themes).Error
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return themes, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ListAll 获取所有主题配置
|
||
|
|
func (r *ThemeConfigRepository) ListAll(ctx context.Context) ([]*domain.ThemeConfig, error) {
|
||
|
|
var themes []*domain.ThemeConfig
|
||
|
|
err := r.db.WithContext(ctx).Order("is_default DESC, id ASC").Find(&themes).Error
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return themes, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// SetDefault 设置默认主题
|
||
|
|
func (r *ThemeConfigRepository) SetDefault(ctx context.Context, id int64) error {
|
||
|
|
// 先清除所有默认标记
|
||
|
|
if err := r.db.WithContext(ctx).Model(&domain.ThemeConfig{}).Where("is_default = ?", true).Update("is_default", false).Error; err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
// 设置新的默认主题
|
||
|
|
return r.db.WithContext(ctx).Model(&domain.ThemeConfig{}).Where("id = ?", id).Update("is_default", true).Error
|
||
|
|
}
|