251 lines
6.8 KiB
Protocol Buffer
251 lines
6.8 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package topfans.task;
|
|
|
|
option go_package = "github.com/topfans/backend/pkg/proto/task;task";
|
|
|
|
import "proto/common.proto";
|
|
import "google/api/annotations.proto";
|
|
|
|
// ==================== 每日任务 ====================
|
|
|
|
message DailyTaskItem {
|
|
string task_key = 1;
|
|
int64 star_id = 2;
|
|
string name = 3;
|
|
string description = 4;
|
|
int64 crystal_reward = 5;
|
|
int64 exp_reward = 6;
|
|
string status = 7; // pending/completed/claimed
|
|
bool can_claim = 8;
|
|
}
|
|
|
|
message GetDailyTasksRequest {
|
|
int64 star_id = 1;
|
|
}
|
|
|
|
message GetDailyTasksResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
int64 star_id = 2;
|
|
repeated DailyTaskItem tasks = 3;
|
|
}
|
|
|
|
message ReportEventRequest {
|
|
string event_type = 1; // 如 "daily_browse_asset", "daily_login"
|
|
int64 star_id = 2;
|
|
}
|
|
|
|
message ReportEventResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
bool success = 2;
|
|
string task_key = 3;
|
|
bool task_completed = 4;
|
|
string message = 5;
|
|
}
|
|
|
|
message ClaimDailyTaskRequest {
|
|
string task_key = 1;
|
|
int64 star_id = 2;
|
|
}
|
|
|
|
message ClaimDailyTaskResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
bool success = 2;
|
|
int64 crystal_balance = 3;
|
|
int64 experience = 4;
|
|
}
|
|
|
|
message ClaimAllDailyTasksRequest {
|
|
int64 star_id = 1;
|
|
}
|
|
|
|
message ClaimAllDailyTasksResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
int32 claimed_count = 2;
|
|
int64 crystal_balance = 3;
|
|
int64 experience = 4;
|
|
repeated string claimed_task_keys = 5;
|
|
}
|
|
|
|
// ==================== 引导任务 ====================
|
|
|
|
message OnboardingStage {
|
|
int32 stage = 1;
|
|
string name = 2;
|
|
repeated string required_task_keys = 3;
|
|
int64 crystal_reward = 4;
|
|
int64 exp_reward = 5;
|
|
string status = 6; // pending/completed/in_progress
|
|
bool is_current = 7;
|
|
bool all_tasks_completed = 8; // 该阶段所有任务是否完成
|
|
}
|
|
|
|
message CompleteGuideRequest {
|
|
string task_key = 1;
|
|
repeated OnboardingStage stages = 2; // 前端传入的阶段配置,首次调用时存储
|
|
}
|
|
|
|
message CompleteGuideResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
int64 user_id = 2;
|
|
int32 current_stage = 3;
|
|
string status = 4; // pending/in_progress/completed
|
|
repeated OnboardingStage stages = 5;
|
|
}
|
|
|
|
message GetOnboardingStatusRequest {}
|
|
|
|
message GetOnboardingStatusResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
int64 user_id = 2;
|
|
int32 current_stage = 3;
|
|
string status = 4;
|
|
repeated OnboardingStage stages = 5;
|
|
}
|
|
|
|
message AdvanceStageRequest {
|
|
int32 target_stage = 1;
|
|
}
|
|
|
|
message AdvanceStageResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
int32 current_stage = 2;
|
|
string status = 3;
|
|
repeated OnboardingStage stages = 4;
|
|
}
|
|
|
|
message ClaimOnboardingRewardRequest {
|
|
int32 stage = 1;
|
|
}
|
|
|
|
message ClaimOnboardingRewardResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
bool success = 2;
|
|
string crystal_balance = 3; // 使用 string 避免 Dubbo int64 序列化 bug
|
|
string experience = 4; // 使用 string 避免 Dubbo int64 序列化 bug
|
|
}
|
|
|
|
// ==================== 展示收益 ====================
|
|
|
|
message ExhibitionRevenueItem {
|
|
int64 id = 1;
|
|
int64 star_id = 2;
|
|
int64 exhibition_id = 3;
|
|
int64 asset_id = 4;
|
|
int64 slot_id = 5;
|
|
string slot_type = 6; // own/friend
|
|
int64 crystal_amount = 7;
|
|
int64 cycle_start_time = 8;
|
|
int64 cycle_end_time = 9;
|
|
string status = 10; // claimable/claimed/failed
|
|
bool can_claim = 11;
|
|
}
|
|
|
|
message GetExhibitionRevenueRequest {
|
|
int64 star_id = 1;
|
|
string status = 2; // 可选筛选
|
|
int32 page = 3;
|
|
int32 page_size = 4;
|
|
}
|
|
|
|
message GetExhibitionRevenueResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
repeated ExhibitionRevenueItem items = 2;
|
|
int64 total = 3;
|
|
int32 page = 4;
|
|
int32 page_size = 5;
|
|
}
|
|
|
|
message ClaimExhibitionRevenueRequest {
|
|
int64 revenue_id = 1;
|
|
int64 star_id = 2;
|
|
}
|
|
|
|
message ClaimExhibitionRevenueResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
bool success = 2;
|
|
}
|
|
|
|
message ClaimAllExhibitionRevenueRequest {
|
|
int64 star_id = 1;
|
|
}
|
|
|
|
message ClaimAllExhibitionRevenueResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
int32 claimed_count = 2;
|
|
}
|
|
|
|
// ==================== 内部RPC服务 ====================
|
|
|
|
message InitUserTasksRequest {
|
|
int64 user_id = 1;
|
|
int64 star_id = 2;
|
|
}
|
|
|
|
message InitUserTasksResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
bool success = 2;
|
|
}
|
|
|
|
message OnExhibitionCompletedRequest {
|
|
int64 exhibition_id = 1;
|
|
int64 asset_id = 2;
|
|
int64 slot_id = 3;
|
|
int64 occupier_uid = 4;
|
|
int64 occupier_star_id = 5;
|
|
int64 slot_owner_uid = 6;
|
|
int64 crystal_amount = 7;
|
|
int64 start_time = 8;
|
|
int64 expire_at = 9;
|
|
}
|
|
|
|
message OnExhibitionCompletedResponse {
|
|
topfans.common.BaseResponse base = 1;
|
|
int64 revenue_record_id = 2;
|
|
}
|
|
|
|
// ==================== Mobile API Service ====================
|
|
|
|
service TaskMobileService {
|
|
rpc GetDailyTasks(GetDailyTasksRequest) returns (GetDailyTasksResponse) {
|
|
option (google.api.http) = { get: "/api/tasks/daily"; };
|
|
}
|
|
rpc ReportEvent(ReportEventRequest) returns (ReportEventResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/report-event"; body: "*"; };
|
|
}
|
|
rpc ClaimDailyTask(ClaimDailyTaskRequest) returns (ClaimDailyTaskResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/daily/claim"; body: "*"; };
|
|
}
|
|
rpc ClaimAllDailyTasks(ClaimAllDailyTasksRequest) returns (ClaimAllDailyTasksResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/daily/claim-all"; body: "*"; };
|
|
}
|
|
rpc CompleteGuide(CompleteGuideRequest) returns (CompleteGuideResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/guide/complete"; body: "*"; };
|
|
}
|
|
rpc GetOnboardingStatus(GetOnboardingStatusRequest) returns (GetOnboardingStatusResponse) {
|
|
option (google.api.http) = { get: "/api/tasks/onboarding/status"; };
|
|
}
|
|
rpc AdvanceStage(AdvanceStageRequest) returns (AdvanceStageResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/onboarding/advance-stage"; body: "*"; };
|
|
}
|
|
rpc ClaimOnboardingReward(ClaimOnboardingRewardRequest) returns (ClaimOnboardingRewardResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/onboarding/claim-reward"; body: "*"; };
|
|
}
|
|
rpc GetExhibitionRevenue(GetExhibitionRevenueRequest) returns (GetExhibitionRevenueResponse) {
|
|
option (google.api.http) = { get: "/api/tasks/exhibition-revenue"; };
|
|
}
|
|
rpc ClaimExhibitionRevenue(ClaimExhibitionRevenueRequest) returns (ClaimExhibitionRevenueResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/exhibition-revenue/claim"; body: "*"; };
|
|
}
|
|
rpc ClaimAllExhibitionRevenue(ClaimAllExhibitionRevenueRequest) returns (ClaimAllExhibitionRevenueResponse) {
|
|
option (google.api.http) = { post: "/api/tasks/exhibition-revenue/claim-all"; body: "*"; };
|
|
}
|
|
}
|
|
|
|
// ==================== Internal RPC Service ====================
|
|
|
|
service TaskInternalService {
|
|
rpc InitUserTasks(InitUserTasksRequest) returns (InitUserTasksResponse);
|
|
rpc OnExhibitionCompleted(OnExhibitionCompletedRequest) returns (OnExhibitionCompletedResponse);
|
|
}
|