feat(规则管理): 规则查询接口返回关联通知渠道
Motivation: 前端在展示规则详情与规则列表时,需要同时看到每条规则绑定了哪些通知渠道以及各渠道的启用状态。此前规则接口只返回规则本身,渠道绑定信息需要额外请求才能获取,增加了交互成本。本次让规则读取接口一次性携带关联渠道信息。 Changes: * 规则模型新增 Channels 字段及渠道条目结构,包含渠道标识、名称、类型和按规则维度的启用开关 * 创建、查询单条、列表查询规则接口在返回结果时填充绑定的渠道信息,无绑定时返回空列表 * 新增批量查询规则与渠道绑定关系的数据访问能力,按规则聚合返回,避免列表场景下逐条查询 * 单个渠道数据读取失败时跳过该条目,不阻断整体结果返回
This commit is contained in:
@@ -7,6 +7,8 @@ import (
|
||||
"fmt"
|
||||
|
||||
"aiaa-notification-service/internal/model"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
func (s *Store) CreateRule(ctx context.Context, r *model.Rule, channelIDs []int) error {
|
||||
@@ -158,6 +160,30 @@ func (s *Store) GetRuleChannels(ctx context.Context, ruleID int) ([]model.RuleCh
|
||||
return rcs, nil
|
||||
}
|
||||
|
||||
// ListRuleChannels maps each rule to its bound channels (regardless of enabled
|
||||
// state) and the per-rule enabled switch.
|
||||
func (s *Store) ListRuleChannels(ctx context.Context, ruleIDs []int) (map[int][]model.RuleChannel, error) {
|
||||
result := make(map[int][]model.RuleChannel, len(ruleIDs))
|
||||
if len(ruleIDs) == 0 {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
query, args, err := sqlx.In(`SELECT id, rule_id, channel_id, enabled FROM notification_rule_channel WHERE rule_id IN (?)`, ruleIDs)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("build rule channels query: %w", err)
|
||||
}
|
||||
query = s.DB.Rebind(query)
|
||||
|
||||
rcs := make([]model.RuleChannel, 0)
|
||||
if err := s.DB.SelectContext(ctx, &rcs, query, args...); err != nil {
|
||||
return nil, fmt.Errorf("list rule channels: %w", err)
|
||||
}
|
||||
for _, rc := range rcs {
|
||||
result[rc.RuleID] = append(result[rc.RuleID], rc)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *Store) SetRuleChannelEnabled(ctx context.Context, ruleID, channelID int, enabled bool) error {
|
||||
v := 0
|
||||
if enabled {
|
||||
|
||||
Reference in New Issue
Block a user