73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
package app
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"infinite-canvas/backend/internal/model"
|
|
)
|
|
|
|
func (req ChannelRequest) presentationOnly() bool {
|
|
return (req.PublicAlias != nil || req.SortOrder != nil) && req.Name == "" && req.BaseURL == "" && req.APIKey == "" && req.SecretKey == "" && req.ConcurrencyLimit == nil && req.UseGlobalConcurrency == nil && req.Models == nil && req.Headers == nil && req.Enabled == nil
|
|
}
|
|
|
|
func (s *Service) updateChannelPresentation(id string, req ChannelRequest) (*PublicModelChannel, error) {
|
|
if req.SortOrder != nil {
|
|
if err := validateChannelSortOrder(*req.SortOrder); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
if req.PublicAlias != nil {
|
|
alias := strings.TrimSpace(*req.PublicAlias)
|
|
if len([]rune(alias)) > 80 {
|
|
return nil, BadAuthRequest("前台别名不能超过 80 字")
|
|
}
|
|
req.PublicAlias = &alias
|
|
}
|
|
if err := s.repo.UpdateSystemChannelPresentation(id, req.PublicAlias, req.SortOrder, time.Now()); err != nil {
|
|
return nil, err
|
|
}
|
|
s.invalidateRouteCatalog()
|
|
channel, err := s.repo.AdminSystemChannel(id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
items, err := s.repo.ChannelModels(id, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
public := publicChannel(*channel, true, items)
|
|
return &public, nil
|
|
}
|
|
|
|
type ChannelModelSortRequest struct {
|
|
SortOrder *int `json:"sortOrder"`
|
|
}
|
|
|
|
func validateChannelSortOrder(value int) error {
|
|
if value < 0 || value > 999999 {
|
|
return BadAuthRequest("排序值必须是 0-999999 的整数,数值越小越靠前")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Service) UpdateAdminChannelModelSort(actor *model.User, channelID, modelID string, req ChannelModelSortRequest) error {
|
|
if err := s.RequireAdmin(actor); err != nil {
|
|
return err
|
|
}
|
|
if req.SortOrder == nil {
|
|
return BadAuthRequest("请填写排序值")
|
|
}
|
|
if err := validateChannelSortOrder(*req.SortOrder); err != nil {
|
|
return err
|
|
}
|
|
if _, err := s.repo.AdminSystemChannel(channelID); err != nil {
|
|
return err
|
|
}
|
|
if err := s.repo.UpdateChannelModelSort(channelID, modelID, *req.SortOrder, time.Now()); err != nil {
|
|
return err
|
|
}
|
|
s.invalidateRouteCatalog()
|
|
return nil
|
|
}
|