164 lines
4.0 KiB
Protocol Buffer
164 lines
4.0 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package github.com.topfans.backend.pkg.proto.moderation;
|
|
|
|
option go_package = "github.com/topfans/backend/pkg/proto/moderation;moderation";
|
|
|
|
// ModerationService - 客户端举报与反馈 API (spec §5.1)
|
|
// 端口 20011 (接续 aiChatService 20008 + 3, 由 Plan A 修订)
|
|
service ModerationService {
|
|
// 举报分类
|
|
rpc GetReportCategories(GetReportCategoriesRequest) returns (GetReportCategoriesResponse);
|
|
rpc GetFeedbackCategories(GetFeedbackCategoriesRequest) returns (GetFeedbackCategoriesResponse);
|
|
|
|
// 举报
|
|
rpc SubmitReport(SubmitReportRequest) returns (SubmitReportResponse);
|
|
rpc ListMyReports(ListMyReportsRequest) returns (ListMyReportsResponse);
|
|
rpc GetReport(GetReportRequest) returns (GetReportResponse);
|
|
|
|
// 反馈
|
|
rpc SubmitFeedback(SubmitFeedbackRequest) returns (SubmitFeedbackResponse);
|
|
rpc ListMyFeedbacks(ListMyFeedbacksRequest) returns (ListMyFeedbacksResponse);
|
|
rpc GetFeedback(GetFeedbackRequest) returns (GetFeedbackResponse);
|
|
}
|
|
|
|
// ====== 举报 ======
|
|
|
|
message SubmitReportRequest {
|
|
int64 reporter_id = 1;
|
|
string target_type = 2; // asset | user_profile
|
|
int64 target_id = 3;
|
|
string category_code = 4; // 举报分类 code
|
|
string description = 5; // <= 500
|
|
bool is_anonymous = 6;
|
|
repeated string evidence_keys = 7; // OSS keys, <= 5
|
|
string client_ip = 8;
|
|
string device_fp = 9;
|
|
}
|
|
|
|
message SubmitReportResponse {
|
|
int64 report_id = 1;
|
|
string status = 2; // pending | auto_hidden
|
|
bool auto_hidden = 3;
|
|
bool target_hidden = 4; // 本次 auto-hide 是否执行了 UPDATE
|
|
int64 claimed_by = 5;
|
|
int64 claimed_at = 6;
|
|
int64 created_at = 7;
|
|
}
|
|
|
|
message ListMyReportsRequest {
|
|
int64 reporter_id = 1;
|
|
string status = 2; // 可选过滤
|
|
int32 page = 3;
|
|
int32 page_size = 4;
|
|
}
|
|
|
|
message ReportSummary {
|
|
int64 id = 1;
|
|
string target_type = 2;
|
|
int64 target_id = 3;
|
|
string category_code = 4;
|
|
string status = 5;
|
|
int64 created_at = 6;
|
|
int64 resolved_at = 7;
|
|
string resolved_action = 8;
|
|
}
|
|
|
|
message ListMyReportsResponse {
|
|
repeated ReportSummary reports = 1;
|
|
int32 total = 2;
|
|
}
|
|
|
|
message GetReportRequest {
|
|
int64 reporter_id = 1;
|
|
int64 id = 2;
|
|
}
|
|
|
|
message GetReportResponse {
|
|
ReportSummary report = 1;
|
|
string description = 2;
|
|
repeated EvidenceSummary evidence = 3;
|
|
string target_snapshot_json = 4;
|
|
}
|
|
|
|
message EvidenceSummary {
|
|
string oss_key = 1;
|
|
string oss_url = 2;
|
|
}
|
|
|
|
// ====== 反馈 ======
|
|
|
|
message SubmitFeedbackRequest {
|
|
int64 user_id = 1;
|
|
int64 star_id = 2;
|
|
string category_code = 3;
|
|
string title = 4; // <= 100
|
|
string content = 5;
|
|
string contact = 6; // <= 320
|
|
bool is_anonymous = 7;
|
|
repeated string evidence_keys = 8;
|
|
}
|
|
|
|
message SubmitFeedbackResponse {
|
|
int64 feedback_id = 1;
|
|
string status = 2;
|
|
int64 claimed_by = 3;
|
|
int64 claimed_at = 4;
|
|
int64 created_at = 5;
|
|
}
|
|
|
|
message ListMyFeedbacksRequest {
|
|
int64 user_id = 1;
|
|
string status = 2;
|
|
int32 page = 3;
|
|
int32 page_size = 4;
|
|
}
|
|
|
|
message FeedbackSummary {
|
|
int64 id = 1;
|
|
string category_code = 2;
|
|
string title = 3;
|
|
string status = 4;
|
|
int64 created_at = 5;
|
|
int64 replied_at = 6;
|
|
}
|
|
|
|
message ListMyFeedbacksResponse {
|
|
repeated FeedbackSummary feedbacks = 1;
|
|
int32 total = 2;
|
|
}
|
|
|
|
message GetFeedbackRequest {
|
|
int64 user_id = 1;
|
|
int64 id = 2;
|
|
}
|
|
|
|
message GetFeedbackResponse {
|
|
FeedbackSummary feedback = 1;
|
|
string content = 2;
|
|
string reply_content = 3;
|
|
repeated EvidenceSummary evidence = 4;
|
|
}
|
|
|
|
// ====== 分类 ======
|
|
|
|
message GetReportCategoriesRequest {}
|
|
|
|
message GetFeedbackCategoriesRequest {}
|
|
|
|
message CategoryItem {
|
|
string code = 1;
|
|
string name = 2;
|
|
string description = 3;
|
|
int32 severity = 4;
|
|
int32 sort_order = 5;
|
|
}
|
|
|
|
message GetReportCategoriesResponse {
|
|
repeated CategoryItem categories = 1;
|
|
}
|
|
|
|
message GetFeedbackCategoriesResponse {
|
|
repeated CategoryItem categories = 1;
|
|
}
|