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 }