topfans/backend/proto/activity.proto

301 lines
7.9 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 topfans.activity;
option go_package = "github.com/topfans/backend/pkg/proto/activity;activity";
import "proto/common.proto";
import "google/api/annotations.proto";
// ==================== 活动相关消息 ====================
// 活动信息
message Activity {
int64 id = 1;
string activity_type = 2;
string title = 3;
string theme = 17; // 中文主题
string description = 4;
int64 star_id = 5;
int64 start_time = 6;
int64 end_time = 7;
int64 target_progress = 8;
int64 current_progress = 9;
string status = 10;
string current_stage = 11; // 当前阶段: early/mid/late/completed
repeated ActivityItem items = 12;
string cover_image = 13; // 封面图
string banner_image = 14; // 横幅图
string current_stage_background = 15; // 当前阶段背景图
string current_stage_title = 16; // 当前阶段标题
int64 overall_end_time = 18; // 整体活动结束时间
string icon = 19; // 活动图标
}
// 活动道具
message ActivityItem {
int64 id = 1;
string item_type = 2;
string item_name = 3;
string icon_url = 4;
int32 crystal_cost = 5;
int32 contribution_points = 6;
}
// 活动道具列表响应
message ActivityItemsResponse {
repeated ActivityItem items = 1;
}
// 购买道具请求
message PurchaseItemRequest {
int64 activity_id = 1;
string item_type = 2;
int32 quantity = 3;
int64 star_id = 4;
int64 user_id = 5; // 当前用户ID
}
// 购买道具响应
message PurchaseItemResponse {
topfans.common.BaseResponse base = 1;
int64 total_crystal_spent = 2; // 本次消费水晶
int64 total_contribution = 3; // 本次获得贡献点
int64 current_progress = 4; // 当前活动进度
int64 remaining_balance = 5; // 剩余水晶余额
}
// 单个购买项(用于批量购买)
message PurchaseItem {
string item_type = 1;
int32 quantity = 2;
}
// 批量购买道具请求
message BatchPurchaseItemRequest {
int64 activity_id = 1;
repeated PurchaseItem items = 2; // 购买项列表
int64 star_id = 3;
int64 user_id = 4; // 当前用户ID
}
// 批量购买道具响应
message BatchPurchaseItemResponse {
topfans.common.BaseResponse base = 1;
int64 total_crystal_spent = 2; // 本次消费水晶
int64 total_contribution = 3; // 本次获得贡献点
int64 current_progress = 4; // 当前活动进度
int64 remaining_balance = 5; // 剩余水晶余额
int32 success_count = 6; // 成功购买数量
int32 fail_count = 7; // 失败购买数量
repeated PurchaseFailItem fails = 8; // 失败的项
}
// 购买失败的项
message PurchaseFailItem {
string item_type = 1;
string reason = 2;
}
// 贡献点排名请求
message ContributionRankingRequest {
int64 activity_id = 1;
int64 star_id = 2;
int32 page = 3;
int32 page_size = 4;
int64 user_id = 5; // 当前用户ID用于获取自己的排名
}
// 贡献点排名项
message ContributionRankingItem {
int32 rank = 1;
int64 user_id = 2;
string nickname = 3;
string avatar_url = 4;
int64 total_contribution = 5;
int64 total_crystal_spent = 6;
}
// 贡献点排名响应
message ContributionRankingResponse {
topfans.common.BaseResponse base = 1;
repeated ContributionRankingItem items = 2;
MyContribution my_contribution = 3;
int32 page = 4;
int32 page_size = 5;
int32 total = 6;
}
// 我的贡献信息
message MyContribution {
int32 rank = 1;
int64 total_contribution = 2;
int64 total_crystal_spent = 3;
string status = 4; // ranked/unranked
string nickname = 5;
string avatar_url = 6;
}
// 活动列表请求
message GetActivityListRequest {
int64 star_id = 1;
string status = 2; // 可选: pending/active/completed/expired
int32 page = 3;
int32 page_size = 4;
}
// 活动列表响应
message GetActivityListResponse {
topfans.common.BaseResponse base = 1;
repeated Activity activities = 2;
int32 page = 3;
int32 page_size = 4;
int32 total = 5;
}
// 进度信息请求
message GetProgressRequest {
int64 activity_id = 1;
}
// 进度信息响应
message GetProgressResponse {
topfans.common.BaseResponse base = 1;
int64 activity_id = 2;
int64 current_progress = 3;
int64 target_progress = 4;
string current_stage = 5; // early/mid/late/completed
int64 end_time = 6;
string status = 7; // pending/active/completed/expired
}
// ==================== 铸造活动MintingActivity相关消息 ====================
// 铸造活动信息用于运营banner
message MintingActivity {
int64 id = 1;
string title = 2;
string description = 3;
string cover_image = 4;
int64 star_id = 5;
string route = 6;
bool is_active = 7;
int64 created_at = 8;
int64 updated_at = 9;
}
// 获取铸造活动列表请求
message GetMintingActivitiesRequest {
int64 star_id = 1; // 可选,不传则返回所有
int32 page = 2;
int32 page_size = 3;
}
// 获取铸造活动列表响应
message GetMintingActivitiesResponse {
topfans.common.BaseResponse base = 1;
repeated MintingActivity activities = 2;
int32 page = 3;
int32 page_size = 4;
int32 total = 5;
}
// 获取最新贡献记录请求(用于实时显示)
message GetLatestContributionsRequest {
int64 activity_id = 1;
int64 since_timestamp = 2; // 时间戳筛选,返回此时间之后的新记录
int64 since_id = 3; // ID筛选配合since_timestamp使用
int32 limit = 4; // 返回数量默认5最大20
}
// 单条贡献记录
message ContributionRecord {
int64 id = 1;
int64 user_id = 2;
string nickname = 3;
string avatar_url = 4;
int64 star_id = 5;
int64 item_id = 6;
string item_type = 7;
string item_name = 8;
string item_icon = 9;
int32 quantity = 10;
int32 combo_count = 11;
int64 created_at = 12;
}
// 获取最新贡献记录响应
message GetLatestContributionsResponse {
topfans.common.BaseResponse base = 1;
repeated ContributionRecord records = 2;
}
// ==================== 活动服务 ====================
service ActivityService {
// 获取活动列表
rpc GetActivityList(GetActivityListRequest) returns (GetActivityListResponse) {
option (google.api.http) = {
get: "/api/v1/activities"
};
}
// 获取活动详情
rpc GetActivity(GetProgressRequest) returns (Activity) {
option (google.api.http) = {
get: "/api/v1/activities/{activity_id}"
};
}
// 获取活动道具列表
rpc GetActivityItems(GetProgressRequest) returns (ActivityItemsResponse) {
option (google.api.http) = {
get: "/api/v1/activities/{activity_id}/items"
};
}
// 获取活动进度
rpc GetProgress(GetProgressRequest) returns (GetProgressResponse) {
option (google.api.http) = {
get: "/api/v1/activities/{activity_id}/progress"
};
}
// 购买道具
rpc PurchaseItem(PurchaseItemRequest) returns (PurchaseItemResponse) {
option (google.api.http) = {
post: "/api/v1/activities/{activity_id}/purchase"
body: "*"
};
}
// 批量购买道具
rpc BatchPurchaseItem(BatchPurchaseItemRequest) returns (BatchPurchaseItemResponse) {
option (google.api.http) = {
post: "/api/v1/activities/{activity_id}/batch-purchase"
body: "*"
};
}
// 获取贡献点排名
rpc GetContributionRanking(ContributionRankingRequest) returns (ContributionRankingResponse) {
option (google.api.http) = {
get: "/api/v1/activities/{activity_id}/ranking"
};
}
// 获取铸造活动列表用于运营banner
rpc GetMintingActivities(GetMintingActivitiesRequest) returns (GetMintingActivitiesResponse) {
option (google.api.http) = {
get: "/api/v1/minting-activities"
};
}
// 获取最新贡献记录(用于实时显示)
rpc GetLatestContributions(GetLatestContributionsRequest) returns (GetLatestContributionsResponse) {
option (google.api.http) = {
get: "/api/v1/activities/{activity_id}/contributions/latest"
};
}
}