Skip to content

Commit d33a96b

Browse files
committed
refactor(htycommons): PushInfo envelope with extra map; read reject_reason in htyuc
Made-with: Cursor
1 parent 6b18d0f commit d33a96b

2 files changed

Lines changed: 19 additions & 19 deletions

File tree

htycommons/src/models.rs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ use std::fmt::Debug;
22
use chrono::NaiveDateTime;
33
use serde::de::DeserializeOwned;
44
use serde::Serialize;
5+
use serde_json::Map;
6+
use serde_json::Value;
57
use crate::db::CommonTask;
68
use crate::{impl_jsonb_boilerplate, impl_typed_jsonb_boilerplate};
79
use diesel::sql_types::Jsonb;
@@ -10,6 +12,8 @@ use diesel::pg::Pg;
1012
// use diesel::helper_types::IsNull;
1113
use std::io::Write;
1214

15+
/// Push notification envelope stored as Jsonb. Domain keys (课程/打卡/计划等) live in [`extra`]
16+
/// so AuthCore stays business-agnostic; flat Json round-trips with legacy rows.
1317
#[derive(AsExpression, FromSqlRow, Debug, Default, Serialize, Deserialize, PartialEq, Clone)]
1418
#[diesel(sql_type = Jsonb)]
1519
pub struct PushInfo {
@@ -19,32 +23,16 @@ pub struct PushInfo {
1923
pub comment_id: Option<String>,
2024
pub comment_msg: Option<String>,
2125
pub comment_time: Option<String>,
22-
pub daka_id: Option<String>,
23-
pub end_by: Option<String>,
24-
pub first: Option<String>, // in wx template
2526
pub hty_id2: Option<String>,
2627
pub hty_id: Option<String>,
27-
pub jihua_id: Option<String>,
28-
#[serde(alias = "kecheng_id")]
29-
pub clazz_id: Option<String>,
30-
#[serde(alias = "kecheng_name")]
31-
pub clazz_name: Option<String>,
32-
pub lianxi_id: Option<String>,
3328
pub notify_type: Option<String>,
34-
pub piyue_id: Option<String>,
35-
pub qumu_name: Option<String>,
36-
pub qumu_section_name: Option<String>,
3729
pub ref_id: Option<String>,
3830
pub ref_type: Option<String>,
39-
pub reject_reason: Option<String>,
40-
pub remark: Option<String>,
41-
pub resource_note_group_id: Option<String>,
4231
pub serial: Option<String>,
43-
pub start_from: Option<String>,
44-
pub student_name: Option<String>, // list合并后的所有学生姓名,逗号分隔,发给小程序接口发通知用。
45-
pub teacher_name: Option<String>, // list合并后的所有老师姓名,逗号分隔,发给小程序接口发通知用。
4632
pub to_role_id: Option<String>,
4733
pub from_app_id: Option<String>,
34+
#[serde(flatten)]
35+
pub extra: Map<String, Value>,
4836
}
4937

5038
impl_jsonb_boilerplate!(PushInfo);

htyuc/src/notifications.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,20 @@ use chrono::Datelike;
1111
use tracing::debug;
1212
use htycommons::db::{DbState, extract_conn, fetch_db_conn, UNREAD};
1313
use htycommons::models::PushInfo;
14+
use serde_json::Value;
1415
use htyuc_models::send_tongzhi;
1516
use crate::{AppFromTo, CommonTongzhiContent, HtyApp, HtyRole, HtyTemplateData, HtyTongzhi, HtyUser, push_wx_message, TongzhiMeta, UserAppInfo};
1617

18+
fn push_info_extra_string(info: &PushInfo, key: &str) -> Option<String> {
19+
info.extra.get(key).and_then(|v| match v {
20+
Value::Null => None,
21+
Value::String(s) => Some(s.clone()),
22+
Value::Number(n) => Some(n.to_string()),
23+
Value::Bool(b) => Some(b.to_string()),
24+
Value::Array(_) | Value::Object(_) => Some(v.to_string()),
25+
})
26+
}
27+
1728
#[allow(dead_code)]
1829
fn build_wx_push_message_for_teacher_register(
1930
type_notify: &String,
@@ -572,7 +583,8 @@ pub async fn raw_notify(
572583
send_tongzhi!(tongzhi, to_app, push_message, db_pool);
573584
}
574585
"reject_register" => {
575-
let reject_reason = push_info_copy.reject_reason.clone().unwrap_or_default();
586+
let reject_reason =
587+
push_info_extra_string(&push_info_copy, "reject_reason").unwrap_or_default();
576588
let push_message = build_wx_push_message_for_reject_register(
577589
&notify_type,
578590
&user1_id,

0 commit comments

Comments
 (0)