ryan
|
c74bab3033
|
fix(数据存储): 确保列表查询返回空数组而非 null,并补充 HTTPie/Postman API 文档
Motivation:
当数据库查询无结果时,Go 的 `var slice []Type` 声明会使 JSON 序列化输出 `null`,而非 `[]`。这在 API 响应中造成不一致,也增加了客户端的空值处理负担。改为 `make([]Type, 0)` 后空结果统一输出为 `[]`,提升 API 规范性。
Changes:
* 统一 store 层所有 List 方法使用 `make([]Type, 0)` 初始化切片,覆盖 Sources、Channels、Templates、Rules、MessageLogs 及 RuleChannels 查询
* 新增完整的 cURL 示例文档,覆盖全部 API 端点(通知、Source、Template、Channel、Rule、消息记录)
* 新增 Postman Collection JSON 文件,可直接导入 HTTPie 使用,包含环境变量配置
|
2026-07-31 22:09:39 +08:00 |
|
ryan
|
cecf8e72f5
|
fix(邮件发送): 适配 MailerSend SMTP 并迁移基础设施至 1Panel
Motivation:
将通知服务部署到 1Panel 生产环境,集成 MailerSend 邮件服务,修复 SMTP 协议中 MAIL FROM 命令因携带显示名而导致的发送失败问题。
Changes:
* 修复 SMTP MAIL FROM 命令传入带显示名的完整地址导致发送失败的问题,新增 extractEmailAddr 提取裸地址
* 更新 SMTP 配置为 MailerSend 真实凭证,From 地址适配其域名验证要求
* 移除 docker-compose 中内置的 MySQL/Redis 服务,改为依赖外部 1Panel 基础设施
* 更新环境变量为生产环境实际凭据
|
2026-07-31 17:28:35 +08:00 |
|
ryan
|
a0d26fa3a3
|
refactor: rename database tables for notification entities to improve clarity and consistency
|
2026-07-02 16:04:18 +08:00 |
|
ryan
|
c5225d8c97
|
feat: add Logbull remote logging via slog handler, tee to stdout
|
2026-06-27 15:17:59 +08:00 |
|
ryan
|
835b92ec00
|
fix: wire retry into router, fix Docker config path, fix condition error handling, remove dead code
|
2026-06-27 13:32:33 +08:00 |
|
ryan
|
2271a54139
|
feat: retry mechanism with exponential backoff
|
2026-06-27 13:26:13 +08:00 |
|
ryan
|
8e0c95edd9
|
feat: rule CRUD with enable/disable and message log query
|
2026-06-27 13:23:37 +08:00 |
|
ryan
|
682ca3df81
|
feat: management handlers — source, template, channel CRUD
|
2026-06-27 13:23:10 +08:00 |
|
ryan
|
2cf6601be0
|
feat: notify handler — parse, match, evaluate, render, route
|
2026-06-27 13:22:14 +08:00 |
|
ryan
|
127cf12656
|
feat: auth and rate limit middleware
|
2026-06-27 13:20:56 +08:00 |
|
ryan
|
83c4166f0c
|
feat: engine — template renderer, rule matcher, channel router
|
2026-06-27 13:19:15 +08:00 |
|
ryan
|
49b2384cf7
|
feat: email adapter with SMTP TLS support
|
2026-06-27 13:17:32 +08:00 |
|
ryan
|
414c8c7cbf
|
feat: channel adapters — dingtalk, wecom, bark
|
2026-06-27 13:15:57 +08:00 |
|
ryan
|
54af29e4fc
|
feat: condition evaluator for rule filtering
|
2026-06-27 13:15:02 +08:00 |
|
ryan
|
d7ae840d9a
|
fix: atomic rate limiter and error handling in cache invalidation
|
2026-06-27 13:12:37 +08:00 |
|
ryan
|
69e32cb3ec
|
feat: message parser with json/regex/text modes
|
2026-06-27 13:11:05 +08:00 |
|
ryan
|
d030f0f0df
|
fix: error handling in rule store
|
2026-06-27 13:09:34 +08:00 |
|
ryan
|
3f75699431
|
feat: redis cache layer with rule/channel caching and rate limiter
|
2026-06-27 13:07:56 +08:00 |
|
ryan
|
a8e939da40
|
feat: rule and message_log store CRUD
|
2026-06-27 13:06:54 +08:00 |
|
ryan
|
236105ea9c
|
feat: template and channel store CRUD
|
2026-06-27 13:04:57 +08:00 |
|
ryan
|
7cd84c8468
|
feat: store connection and source CRUD
|
2026-06-27 13:02:17 +08:00 |
|
ryan
|
3d0b91fe23
|
feat: data models and database migration
|
2026-06-27 12:59:33 +08:00 |
|
ryan
|
976ec3ca70
|
feat: project scaffold, config loading, skeleton main
|
2026-06-27 12:57:11 +08:00 |
|