migrate from github
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
package grpcserver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/XingfenD/yoresee_doc/internal/service/auth_service"
|
||||
"github.com/XingfenD/yoresee_doc/internal/service/setting_service"
|
||||
"github.com/XingfenD/yoresee_doc/internal/status"
|
||||
pb "github.com/XingfenD/yoresee_doc/pkg/gen/yoresee_doc/v1"
|
||||
)
|
||||
|
||||
type SettingServiceServer struct {
|
||||
pb.UnimplementedSettingServiceServer
|
||||
}
|
||||
|
||||
func NewSettingServiceServer() *SettingServiceServer {
|
||||
return &SettingServiceServer{}
|
||||
}
|
||||
|
||||
func (s *SettingServiceServer) requireAdmin(ctx context.Context) error {
|
||||
userExternalID, ok := ctx.Value("user_external_id").(string)
|
||||
if !ok || userExternalID == "" {
|
||||
return status.StatusTokenInvalid
|
||||
}
|
||||
isAdmin, err := auth_service.AuthSvc.IsAdmin(userExternalID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !isAdmin {
|
||||
return status.StatusPermissionDenied
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SettingServiceServer) GetSettings(ctx context.Context, req *pb.GetSettingsRequest) (*pb.GetSettingsResponse, error) {
|
||||
if req == nil {
|
||||
return &pb.GetSettingsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if err := s.requireAdmin(ctx); err != nil {
|
||||
return &pb.GetSettingsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
scene := strings.TrimSpace(req.Scene)
|
||||
groups, err := setting_service.SettingSvc.GetSettings(ctx, scene)
|
||||
if err != nil {
|
||||
return &pb.GetSettingsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
respGroups := make([]*pb.SettingGroup, 0, len(groups))
|
||||
for _, group := range groups {
|
||||
items := make([]*pb.SettingItem, 0, len(group.Items))
|
||||
for _, item := range group.Items {
|
||||
options := make([]*pb.SettingOption, 0, len(item.UI.Options))
|
||||
for _, opt := range item.UI.Options {
|
||||
options = append(options, &pb.SettingOption{
|
||||
Label: opt.Label,
|
||||
LabelKey: opt.LabelKey,
|
||||
Value: opt.Value,
|
||||
})
|
||||
}
|
||||
items = append(items, &pb.SettingItem{
|
||||
Key: item.Key,
|
||||
Label: item.Label,
|
||||
LabelKey: item.LabelKey,
|
||||
Description: item.Description,
|
||||
DescriptionKey: item.DescriptionKey,
|
||||
Type: item.Type,
|
||||
Ui: &pb.SettingUI{
|
||||
Component: item.UI.Component,
|
||||
Options: options,
|
||||
Placeholder: item.UI.Placeholder,
|
||||
PlaceholderKey: item.UI.PlaceholderKey,
|
||||
},
|
||||
Value: item.Value,
|
||||
DefaultValue: item.DefaultValue,
|
||||
Required: item.Required,
|
||||
Readonly: item.Readonly,
|
||||
})
|
||||
}
|
||||
respGroups = append(respGroups, &pb.SettingGroup{
|
||||
Key: group.Key,
|
||||
Title: group.Title,
|
||||
TitleKey: group.TitleKey,
|
||||
Items: items,
|
||||
})
|
||||
}
|
||||
|
||||
return &pb.GetSettingsResponse{
|
||||
Base: baseResponseFromErr(nil),
|
||||
Groups: respGroups,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *SettingServiceServer) UpdateSettings(ctx context.Context, req *pb.UpdateSettingsRequest) (*pb.UpdateSettingsResponse, error) {
|
||||
if req == nil {
|
||||
return &pb.UpdateSettingsResponse{Base: baseResponseFromStatus(status.StatusParamError)}, nil
|
||||
}
|
||||
if err := s.requireAdmin(ctx); err != nil {
|
||||
return &pb.UpdateSettingsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
|
||||
updates := make([]setting_service.SettingUpdate, 0, len(req.Updates))
|
||||
for _, update := range req.Updates {
|
||||
if update == nil {
|
||||
continue
|
||||
}
|
||||
updates = append(updates, setting_service.SettingUpdate{
|
||||
Key: update.Key,
|
||||
Value: update.Value,
|
||||
})
|
||||
}
|
||||
if err := setting_service.SettingSvc.UpdateSettings(ctx, updates); err != nil {
|
||||
return &pb.UpdateSettingsResponse{Base: baseResponseFromErr(err)}, nil
|
||||
}
|
||||
return &pb.UpdateSettingsResponse{Base: baseResponseFromErr(nil)}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user