Files
Edu/packages/shared-proto/proto/msg.proto
SpecialX 7b7abbb309 feat(msg): 完整实现 msg 消息服务
包含 channels/preferences/templates/grpc/kafka/outbox/push/redis 等完整实现
2026-07-10 19:09:52 +08:00

278 lines
7.5 KiB
Protocol Buffer
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
syntax = "proto3";
package next_edu_cloud.msg.v1;
// Msg 服务契约P5 沟通通知中台)。
//
// 三服务:
// - NotificationService通知发送 / 列表 / 已读 / 检索 / 撤回
// - NotificationPreferenceService用户通知偏好
// - NotificationTemplateService通知模板 CRUD + 渲染
//
// 仲裁依据coord-final-decisions.md M1gRPC 50056 启用)+ msg_contract.md §1.1
// ============================================================
// NotificationService
// ============================================================
service NotificationService {
rpc SendNotification(SendNotificationRequest) returns (Notification);
rpc BatchSendNotification(BatchSendNotificationRequest) returns (BatchSendNotificationResponse);
rpc ListNotifications(ListNotificationsRequest) returns (ListNotificationsResponse);
rpc GetUnreadCount(GetUnreadCountRequest) returns (GetUnreadCountResponse);
rpc MarkAsRead(MarkAsReadRequest) returns (Empty);
rpc BatchMarkAsRead(BatchMarkAsReadRequest) returns (Empty);
rpc MarkAllAsRead(MarkAllAsReadRequest) returns (Empty);
rpc SearchNotifications(SearchNotificationsRequest) returns (SearchNotificationsResponse);
rpc RecallNotification(RecallNotificationRequest) returns (RecallNotificationResponse);
}
// ============================================================
// NotificationPreferenceService
// ============================================================
service NotificationPreferenceService {
rpc GetPreferences(GetPreferencesRequest) returns (GetPreferencesResponse);
rpc UpdatePreferences(UpdatePreferencesRequest) returns (Empty);
}
// ============================================================
// NotificationTemplateService
// ============================================================
service NotificationTemplateService {
rpc CreateTemplate(CreateTemplateRequest) returns (NotificationTemplate);
rpc GetTemplate(GetTemplateRequest) returns (NotificationTemplate);
rpc ListTemplates(ListTemplatesRequest) returns (ListTemplatesResponse);
rpc UpdateTemplate(UpdateTemplateRequest) returns (NotificationTemplate);
rpc DeleteTemplate(DeleteTemplateRequest) returns (Empty);
rpc RenderTemplate(RenderTemplateRequest) returns (RenderedNotification);
}
// ============================================================
// Notification 聚合
// ============================================================
message Notification {
string id = 1;
string user_id = 2;
string type = 3;
string title = 4;
string content = 5;
string channel = 6;
bool is_read = 7;
int64 created_at = 8;
// 扩展字段P5
string status = 9;
string related_entity_type = 10;
string related_entity_id = 11;
string group_id = 12;
string sender_id = 13;
string template_id = 14;
string event_id = 15;
int64 read_at = 16;
int64 updated_at = 17;
map<string, string> metadata = 18;
}
// ============================================================
// SendNotification
// ============================================================
message SendNotificationRequest {
string user_id = 1;
string type = 2;
string title = 3;
string content = 4;
string channel = 5;
map<string, string> metadata = 6;
string related_entity_type = 7;
string related_entity_id = 8;
string group_id = 9;
string sender_id = 10;
string template_id = 11;
string event_id = 12;
}
message BatchSendNotificationRequest {
repeated SendNotificationRequest items = 1;
string group_id = 2;
}
message BatchSendNotificationResponse {
repeated string ids = 1;
repeated BatchSendFailure failed = 2;
}
message BatchSendFailure {
string user_id = 1;
string error = 2;
}
// ============================================================
// ListNotifications
// ============================================================
message ListNotificationsRequest {
string user_id = 1;
bool only_unread = 2;
string type = 3;
int32 page = 4;
int32 page_size = 5;
}
message ListNotificationsResponse {
repeated Notification notifications = 1;
int32 total = 2;
}
// ============================================================
// GetUnreadCount
// ============================================================
message GetUnreadCountRequest {
string user_id = 1;
}
message GetUnreadCountResponse {
int32 count = 1;
}
// ============================================================
// MarkAsRead
// ============================================================
message MarkAsReadRequest {
string id = 1;
string user_id = 2;
}
message BatchMarkAsReadRequest {
repeated string ids = 1;
string user_id = 2;
}
message MarkAllAsReadRequest {
string user_id = 1;
int64 before = 2;
}
// ============================================================
// SearchNotifications
// ============================================================
message SearchNotificationsRequest {
string user_id = 1;
string query = 2;
string type = 3;
int32 page = 4;
int32 page_size = 5;
}
message SearchNotificationsResponse {
repeated Notification notifications = 1;
int32 total = 2;
}
// ============================================================
// RecallNotification
// ============================================================
message RecallNotificationRequest {
string group_id = 1;
string reason = 2;
}
message RecallNotificationResponse {
int32 recalled_count = 1;
}
// ============================================================
// NotificationPreference
// ============================================================
message NotificationPreference {
string id = 1;
string user_id = 2;
string type = 3;
repeated string channels = 4;
int32 frequency_limit = 5;
string quiet_hours_start = 6;
string quiet_hours_end = 7;
string quiet_hours_timezone = 8;
bool enabled = 9;
int64 created_at = 10;
int64 updated_at = 11;
}
message GetPreferencesRequest {
string user_id = 1;
}
message GetPreferencesResponse {
repeated NotificationPreference preferences = 1;
}
message UpdatePreferencesRequest {
string user_id = 1;
repeated NotificationPreference preferences = 2;
}
// ============================================================
// NotificationTemplate
// ============================================================
message NotificationTemplate {
string id = 1;
string code = 2;
string type = 3;
string title_template = 4;
string content_template = 5;
repeated string default_channels = 6;
repeated string variables = 7;
string locale = 8;
string status = 9;
int64 created_at = 10;
int64 updated_at = 11;
}
message CreateTemplateRequest {
string code = 1;
string type = 2;
string title_template = 3;
string content_template = 4;
repeated string default_channels = 5;
repeated string variables = 6;
string locale = 7;
}
message GetTemplateRequest {
string id = 1;
}
message ListTemplatesRequest {
string type = 1;
string status = 2;
}
message ListTemplatesResponse {
repeated NotificationTemplate templates = 1;
}
message UpdateTemplateRequest {
string id = 1;
string title_template = 2;
string content_template = 3;
repeated string default_channels = 4;
repeated string variables = 5;
string status = 6;
}
message DeleteTemplateRequest {
string id = 1;
}
message RenderTemplateRequest {
string code = 1;
map<string, string> variables = 2;
string locale = 3;
}
message RenderedNotification {
string title = 1;
string content = 2;
}
// ============================================================
// Empty
// ============================================================
message Empty {}