topfans/backend/proto/moderation.proto
2026-06-22 17:19:48 +08:00

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;
}