74 lines
2.2 KiB
Go
74 lines
2.2 KiB
Go
package admin
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
v1 "github.com/qianfree/team-api/api/admin/v1"
|
|
"github.com/qianfree/team-api/internal/logic/common"
|
|
)
|
|
|
|
// GetSettingsCategories returns all available setting categories.
|
|
func (s *sAdmin) GetSettingsCategories(ctx context.Context, _ *v1.AdminSettingsCategoriesReq) (*v1.AdminSettingsCategoriesRes, error) {
|
|
categories := common.Categories
|
|
list := make([]v1.SettingCategoryItem, len(categories))
|
|
for i, c := range categories {
|
|
list[i] = v1.SettingCategoryItem{
|
|
Key: c.Key,
|
|
Label: c.Label,
|
|
Icon: c.Icon,
|
|
Order: c.Order,
|
|
}
|
|
}
|
|
return &v1.AdminSettingsCategoriesRes{List: list}, nil
|
|
}
|
|
|
|
// GetSettings retrieves settings with schema for a given category.
|
|
func (s *sAdmin) GetSettings(ctx context.Context, req *v1.AdminSettingsGetReq) (*v1.AdminSettingsGetRes, error) {
|
|
if !isValidCategory(req.Category) {
|
|
return nil, fmt.Errorf("未知的设置分类: %s", req.Category)
|
|
}
|
|
|
|
items := common.Config().GetCategoryWithValues(ctx, req.Category)
|
|
list := make([]v1.AdminSettingItem, len(items))
|
|
for i, item := range items {
|
|
list[i] = v1.AdminSettingItem{
|
|
Key: item.Key,
|
|
Value: common.TypedValue(item.Type, item.Value, item.Default),
|
|
Type: string(item.Type),
|
|
Label: item.Label,
|
|
Description: item.Description,
|
|
Sensitive: item.Sensitive,
|
|
Validation: item.Validation,
|
|
Default: common.TypedValue(item.Type, "", item.Default),
|
|
}
|
|
}
|
|
return &v1.AdminSettingsGetRes{List: list}, nil
|
|
}
|
|
|
|
// UpdateSettings batch-updates settings for a given category.
|
|
func (s *sAdmin) UpdateSettings(ctx context.Context, req *v1.AdminSettingsUpdateReq) (*v1.AdminSettingsUpdateRes, error) {
|
|
if !isValidCategory(req.Category) {
|
|
return nil, fmt.Errorf("未知的设置分类: %s", req.Category)
|
|
}
|
|
|
|
// Normalize interface{} values to strings for storage
|
|
strValues := make(map[string]string, len(req.Settings))
|
|
for key, val := range req.Settings {
|
|
strValues[key] = common.NormalizeSettingValue(val)
|
|
}
|
|
if err := common.Config().UpdateCategory(ctx, req.Category, strValues); err != nil {
|
|
return nil, err
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func isValidCategory(category string) bool {
|
|
for _, c := range common.Categories {
|
|
if c.Key == category {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|