feat: 分组密钥检查增加状态选项 (#86)
This commit is contained in:
@@ -62,6 +62,12 @@ type GroupIDRequest struct {
|
||||
GroupID uint `json:"group_id" binding:"required"`
|
||||
}
|
||||
|
||||
// ValidateGroupKeysRequest defines the payload for validating keys in a group.
|
||||
type ValidateGroupKeysRequest struct {
|
||||
GroupID uint `json:"group_id" binding:"required"`
|
||||
Status string `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
// AddMultipleKeys handles creating new keys from a text block within a specific group.
|
||||
func (s *Server) AddMultipleKeys(c *gin.Context) {
|
||||
var req KeyTextRequest
|
||||
@@ -258,12 +264,18 @@ func (s *Server) TestMultipleKeys(c *gin.Context) {
|
||||
|
||||
// ValidateGroupKeys initiates a manual validation task for all keys in a group.
|
||||
func (s *Server) ValidateGroupKeys(c *gin.Context) {
|
||||
var req GroupIDRequest
|
||||
var req ValidateGroupKeysRequest
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
response.Error(c, app_errors.NewAPIError(app_errors.ErrInvalidJSON, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// Validate status if provided
|
||||
if req.Status != "" && req.Status != models.KeyStatusActive && req.Status != models.KeyStatusInvalid {
|
||||
response.Error(c, app_errors.NewAPIError(app_errors.ErrValidation, "Invalid status value"))
|
||||
return
|
||||
}
|
||||
|
||||
groupDB, ok := s.findGroupByID(c, req.GroupID)
|
||||
if !ok {
|
||||
return
|
||||
@@ -275,7 +287,7 @@ func (s *Server) ValidateGroupKeys(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
taskStatus, err := s.KeyManualValidationService.StartValidationTask(group)
|
||||
taskStatus, err := s.KeyManualValidationService.StartValidationTask(group, req.Status)
|
||||
if err != nil {
|
||||
response.Error(c, app_errors.NewAPIError(app_errors.ErrTaskInProgress, err.Error()))
|
||||
return
|
||||
|
@@ -41,10 +41,14 @@ func NewKeyManualValidationService(db *gorm.DB, validator *keypool.KeyValidator,
|
||||
}
|
||||
|
||||
// StartValidationTask starts a new manual validation task for a given group.
|
||||
func (s *KeyManualValidationService) StartValidationTask(group *models.Group) (*TaskStatus, error) {
|
||||
func (s *KeyManualValidationService) StartValidationTask(group *models.Group, status string) (*TaskStatus, error) {
|
||||
var keys []models.APIKey
|
||||
if err := s.DB.Where("group_id = ?", group.ID).Find(&keys).Error; err != nil {
|
||||
return nil, fmt.Errorf("failed to get keys for group %s: %w", group.Name, err)
|
||||
query := s.DB.Where("group_id = ?", group.ID)
|
||||
if status != "" {
|
||||
query = query.Where("status = ?", status)
|
||||
}
|
||||
if err := query.Find(&keys).Error; err != nil {
|
||||
return nil, fmt.Errorf("failed to get keys for group %s with status '%s': %w", group.Name, status, err)
|
||||
}
|
||||
|
||||
if len(keys) == 0 {
|
||||
@@ -59,13 +63,20 @@ func (s *KeyManualValidationService) StartValidationTask(group *models.Group) (*
|
||||
}
|
||||
|
||||
// Run the validation in a separate goroutine
|
||||
go s.runValidation(group, keys)
|
||||
go s.runValidation(group, keys, status)
|
||||
|
||||
return taskStatus, nil
|
||||
}
|
||||
|
||||
func (s *KeyManualValidationService) runValidation(group *models.Group, keys []models.APIKey) {
|
||||
logrus.Infof("Starting manual validation for group %s", group.Name)
|
||||
func (s *KeyManualValidationService) runValidation(group *models.Group, keys []models.APIKey, status string) {
|
||||
logFields := logrus.Fields{
|
||||
"group": group.Name,
|
||||
"status": status,
|
||||
}
|
||||
if status == "" {
|
||||
logFields["status"] = "all"
|
||||
}
|
||||
logrus.WithFields(logFields).Info("Starting manual validation")
|
||||
|
||||
jobs := make(chan models.APIKey, len(keys))
|
||||
results := make(chan bool, len(keys))
|
||||
|
Reference in New Issue
Block a user