35 lines
1011 B
Go
35 lines
1011 B
Go
package alert_lifecycle
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
var (
|
|
ErrNotFound = errors.New("预警不存在")
|
|
ErrAlreadyHandled = errors.New("预警已由其他人员开始处理")
|
|
ErrInvalidTransition = errors.New("当前状态不能执行此操作")
|
|
ErrOutcomeRequired = errors.New("请选择有效的现场结果")
|
|
ErrForbidden = errors.New("您无权完成此预警")
|
|
)
|
|
|
|
type CloseInput struct {
|
|
Outcome string `json:"outcome"`
|
|
Note string `json:"note"`
|
|
}
|
|
|
|
func normalizeClose(input CloseInput) (CloseInput, error) {
|
|
input.Outcome = strings.TrimSpace(input.Outcome)
|
|
input.Note = strings.TrimSpace(input.Note)
|
|
switch input.Outcome {
|
|
case "danger_confirmed", "false_positive", "site_normal", "unable_to_confirm":
|
|
default:
|
|
return CloseInput{}, ErrOutcomeRequired
|
|
}
|
|
if !utf8.ValidString(input.Note) || utf8.RuneCountInString(input.Note) > 500 || strings.ContainsAny(input.Note, "\x00\r") {
|
|
return CloseInput{}, ErrOutcomeRequired
|
|
}
|
|
return input, nil
|
|
}
|