Files
aiaa-notification-server/internal/store/template.go
T
ryan 39f3774940 feat: 配置列表分页与钉钉机器人分钟级排队限流
统一 sources/templates/channels/rules 列表为分页响应,避免配置增多时全量返回;按钉钉 access_token 限制每分钟发送并在超限时等待下一分钟,降低触发官方封禁风险。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 00:34:26 +08:00

70 lines
2.1 KiB
Go

package store
import (
"context"
"fmt"
"aiaa-notification-service/internal/model"
)
func (s *Store) CreateTemplate(ctx context.Context, t *model.Template) error {
query := `INSERT INTO notification_template (name, content) VALUES (?, ?)`
result, err := s.DB.ExecContext(ctx, query, t.Name, t.Content)
if err != nil {
return fmt.Errorf("create template: %w", err)
}
id, _ := result.LastInsertId()
t.ID = int(id)
return nil
}
func (s *Store) GetTemplate(ctx context.Context, id int) (*model.Template, error) {
var t model.Template
err := s.DB.GetContext(ctx, &t, `SELECT * FROM notification_template WHERE id = ?`, id)
if err != nil {
return nil, fmt.Errorf("get template %d: %w", id, err)
}
return &t, nil
}
func (s *Store) GetTemplateByName(ctx context.Context, name string) (*model.Template, error) {
var t model.Template
err := s.DB.GetContext(ctx, &t, `SELECT * FROM notification_template WHERE name = ?`, name)
if err != nil {
return nil, fmt.Errorf("get template by name %s: %w", name, err)
}
return &t, nil
}
func (s *Store) ListTemplates(ctx context.Context, page PageFilter) ([]model.Template, int, error) {
var count int
if err := s.DB.GetContext(ctx, &count, `SELECT COUNT(*) FROM notification_template`); err != nil {
return nil, 0, fmt.Errorf("count templates: %w", err)
}
page.Normalize()
templates := make([]model.Template, 0)
err := s.DB.SelectContext(ctx, &templates, `SELECT * FROM notification_template ORDER BY id LIMIT ? OFFSET ?`, page.PageSize, page.Offset())
if err != nil {
return nil, 0, fmt.Errorf("list templates: %w", err)
}
return templates, count, nil
}
func (s *Store) UpdateTemplate(ctx context.Context, id int, t *model.Template) error {
query := `UPDATE notification_template SET name=?, content=? WHERE id=?`
_, err := s.DB.ExecContext(ctx, query, t.Name, t.Content, id)
if err != nil {
return fmt.Errorf("update template %d: %w", id, err)
}
return nil
}
func (s *Store) DeleteTemplate(ctx context.Context, id int) error {
_, err := s.DB.ExecContext(ctx, `DELETE FROM notification_template WHERE id = ?`, id)
if err != nil {
return fmt.Errorf("delete template %d: %w", id, err)
}
return nil
}