topfans/backend/proto/social.proto
zerosaturation dcd8cd4527 feat: 实现我的作品统计接口(点赞/展出)
- 新增 GET /api/v1/me/liked-assets 接口
- 新增 GET /api/v1/me/exhibited-assets 接口
- 新增 GetMyLikedAssets 和 GetMyExhibitedAssets RPC 方法
- 新增 ExhibitedAssetItemDTO 和 GetMyExhibitedAssetsResponseDTO
- 前端新增 getUserLikedAssetsApi 和 getUserExhibitedAssetsApi(暂不实现)
- 更新设计文档,标记他人作品统计接口为暂不实现

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 13:35:21 +08:00

456 lines
15 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.social;
option go_package = "github.com/topfans/backend/pkg/proto/social;social";
import "proto/common.proto";
import "google/api/annotations.proto";
// ==================== 社交域(包含好友等功能)====================
// 好友请求信息
message FriendRequest {
int64 id = 1; // 请求ID
int64 from_user_id = 2; // 发送者用户ID
int64 to_user_id = 3; // 接收者用户ID
int64 star_id = 4; // 明星ID粉丝身份
string message = 5; // 请求附带消息
string status = 6; // 状态pending, accepted, rejected, expired
int64 created_at = 7; // 创建时间(毫秒时间戳)
int64 expires_at = 8; // 过期时间(毫秒时间戳)
int64 processed_at = 9; // 处理时间(毫秒时间戳,可选)
// 扩展字段:包含用户信息(用于列表展示)
string from_user_nickname = 10; // 发送者昵称
string from_user_avatar = 11; // 发送者头像
string to_user_nickname = 12; // 接收者昵称
string to_user_avatar = 13; // 接收者头像
int32 from_user_fan_level = 14; // 发送者粉丝等级
int32 to_user_fan_level = 15; // 接收者粉丝等级
}
// 好友关系信息
message Friendship {
int64 id = 1; // 关系ID
int64 user_id = 2; // 用户ID
int64 friend_id = 3; // 好友用户ID
int64 star_id = 4; // 明星ID粉丝身份
string status = 5; // 状态accepted, blocked
string remark = 6; // 备注名(可选)
int32 intimacy = 7; // 亲密度(预留字段)
int64 created_at = 8; // 创建时间(毫秒时间戳)
// 扩展字段:好友信息(用于列表展示)
string friend_nickname = 9; // 好友昵称
string friend_avatar = 10; // 好友头像
int32 friend_fan_level = 11; // 好友粉丝等级
int32 friend_social = 12; // 好友的好友数量
}
// ==================== 好友请求相关消息 ====================
// 发送好友请求
message SendFriendRequestRequest {
int64 friend_user_id = 1; // 好友用户ID要添加的用户ID
string message = 2; // 请求附带消息(可选)
string nickname = 3; // 昵称(用于按昵称搜索,与 friend_user_id 二选一)
bool search_mode = 4; // 搜索模式true=仅搜索返回匹配用户false=正常发送请求)
}
message SendFriendRequestResponse {
topfans.common.BaseResponse base = 1;
int64 request_id = 2; // 创建的请求ID
string status = 3; // 请求状态
int64 created_at = 4; // 创建时间
int64 expires_at = 5; // 过期时间
repeated FanProfileSearchResult matched_users = 6; // 匹配的用户列表(仅 search_mode=true 时返回)
}
// 获取好友请求列表
message GetFriendRequestsRequest {
string type = 1; // 请求类型received收到的, sent发出的
string status = 2; // 状态筛选pending, accepted, rejected, expired, all可选
int32 page = 3; // 页码从1开始
int32 page_size = 4; // 每页数量
}
message GetFriendRequestsResponse {
topfans.common.BaseResponse base = 1;
repeated FriendRequest items = 2; // 请求列表
int64 total = 3; // 总数
int32 page = 4; // 当前页码
int32 page_size = 5; // 每页数量
}
// 处理好友请求(接受/拒绝)
message HandleFriendRequestRequest {
int64 request_id = 1; // 请求ID
string action = 2; // 操作accept接受, reject拒绝
}
message HandleFriendRequestResponse {
topfans.common.BaseResponse base = 1;
string action = 2; // 执行的操作
bool friendship_created = 3; // 是否创建了好友关系(仅 accept 时有值)
int64 processed_at = 4; // 处理时间
}
// ==================== 好友关系相关消息 ====================
// 获取好友列表
message GetFriendListRequest {
string keyword = 1; // 搜索关键词(搜索昵称或备注,可选)
int32 page = 2; // 页码从1开始
int32 page_size = 3; // 每页数量
}
message GetFriendListResponse {
topfans.common.BaseResponse base = 1;
repeated Friendship items = 2; // 好友列表
int64 total = 3; // 总数
int32 page = 4; // 当前页码
int32 page_size = 5; // 每页数量
}
// 删除好友
message DeleteFriendRequest {
int64 friend_user_id = 1; // 好友用户ID
}
message DeleteFriendResponse {
topfans.common.BaseResponse base = 1;
bool success = 2; // 是否成功
}
// 设置好友备注
message SetFriendRemarkRequest {
int64 friend_user_id = 1; // 好友用户ID
string remark = 2; // 备注名
}
message SetFriendRemarkResponse {
topfans.common.BaseResponse base = 1;
string remark = 2; // 更新后的备注名
}
// 检查好友关系
message CheckFriendshipRequest {
int64 user_id = 1; // 用户ID
int64 friend_user_id = 2; // 好友用户ID
}
message CheckFriendshipResponse {
topfans.common.BaseResponse base = 1;
bool is_friend = 2; // 是否为好友
}
// 获取好友数量
message GetFriendCountRequest {
// 空请求,从 Token 中获取 user_id 和 star_id
}
message GetFriendCountResponse {
topfans.common.BaseResponse base = 1;
int64 count = 2; // 好友数量
}
// 查找用户信息(用于加好友)
message SearchUserForFriendRequest {
int64 friend_fan_profile_id = 1; // 粉丝档案ID
}
message SearchUserForFriendResponse {
topfans.common.BaseResponse base = 1;
FanProfileSearchResult user = 2; // 用户信息及关系状态
}
// 粉丝档案搜索结果
message FanProfileSearchResult {
int64 fan_profile_id = 1; // 粉丝档案ID
int64 user_id = 2; // 用户ID
string nickname = 3; // 昵称
string avatar = 4; // 头像URL
int32 fan_level = 5; // 粉丝等级
string relationship_status = 6; // 关系状态stranger, friend, pending_sent, pending_received, rejected
bool can_send_request = 7; // 是否可以发送好友请求
int64 cooldown_ends_at = 8; // 冷静期结束时间(毫秒时间戳,仅当 relationship_status=rejected 时有值)
}
// ==================== 随机用户相关消息 ====================
// 随机用户信息
message RandomUser {
int64 user_id = 1; // 用户ID
string nickname = 2; // 昵称
}
// 获取随机用户
message GetRandomUsersRequest {
int32 count = 1; // 返回数量默认1最大100
}
message GetRandomUsersResponse {
topfans.common.BaseResponse base = 1;
repeated RandomUser users = 2; // 随机用户列表
}
// ==================== 分页用户相关消息 ====================
// 分页用户信息
message PagedUser {
int64 user_id = 1; // 用户ID
int64 gallery_owner_id = 2; // 展馆所有者ID等于user_id
string nickname = 3; // 昵称
int32 level = 4; // 粉丝等级
int32 shared_booth_slots_remaining = 5; // 剩余共享展位数
}
// 获取分页用户列表请求
message GetUsersPagedRequest {
int32 page = 1; // 页码从1开始默认1
int32 page_size = 2; // 每页数量默认20最大100
}
// 获取分页用户列表响应
message GetUsersPagedResponse {
topfans.common.BaseResponse base = 1;
repeated PagedUser users = 2; // 用户列表
int64 total = 3; // 总数
int32 page = 4; // 当前页码
int32 page_size = 5; // 每页数量
}
// ==================== 资产点赞相关消息 ====================
// 点赞资产请求
message LikeAssetRequest {
int64 asset_id = 1; // 资产ID
}
// 点赞资产响应
message LikeAssetResponse {
topfans.common.BaseResponse base = 1;
int64 asset_id = 2; // 资产ID
int32 new_like_count = 3; // 更新后的点赞数
bool is_liked = 4; // 是否已点赞true
}
// 取消点赞请求
message UnlikeAssetRequest {
int64 asset_id = 1; // 资产ID
}
// 取消点赞响应
message UnlikeAssetResponse {
topfans.common.BaseResponse base = 1;
int64 asset_id = 2; // 资产ID
int32 new_like_count = 3; // 更新后的点赞数
bool is_liked = 4; // 是否已点赞false
}
// 检查是否已点赞请求
message CheckAssetLikeRequest {
int64 asset_id = 1; // 资产ID
}
// 检查是否已点赞响应
message CheckAssetLikeResponse {
topfans.common.BaseResponse base = 1;
bool is_liked = 2; // 是否已点赞
}
// ==================== 我的作品相关消息 ====================
// 获取我点赞的作品列表请求
message GetMyLikedAssetsRequest {
int32 page = 1; // 页码默认1
int32 page_size = 2; // 每页数量默认20最大100
}
// 获取我点赞的作品列表响应
message GetMyLikedAssetsResponse {
topfans.common.BaseResponse base = 1;
LikedAssetsData data = 2;
}
// 点赞作品数据
message LikedAssetsData {
repeated LikedAssetItem items = 1; // 作品列表
int32 page = 2; // 当前页码
int32 page_size = 3; // 每页数量
int64 total = 4; // 总数量
bool has_more = 5; // 是否有更多
}
// 点赞作品项
message LikedAssetItem {
int64 asset_id = 1; // 资产ID
string name = 2; // 藏品名称
string cover_url = 3; // 封面图URL
int32 like_count = 4; // 实时点赞数
int64 liked_at = 5; // 点赞时间(毫秒时间戳)
int64 earnings = 6; // 当前可领取收益
}
// 获取我今日点赞的作品列表请求(暂不实现)
message GetMyTodayLikedAssetsRequest {
int32 page = 1; // 页码默认1
int32 page_size = 2; // 每页数量默认20最大100
}
// 获取我今日点赞的作品列表响应(暂不实现)
message GetMyTodayLikedAssetsResponse {
topfans.common.BaseResponse base = 1;
LikedAssetsData data = 2;
}
// 获取我本周点赞的作品列表请求(暂不实现)
message GetMyWeekLikedAssetsRequest {
int32 page = 1; // 页码默认1
int32 page_size = 2; // 每页数量默认20最大100
}
// 获取我本周点赞的作品列表响应(暂不实现)
message GetMyWeekLikedAssetsResponse {
topfans.common.BaseResponse base = 1;
LikedAssetsData data = 2;
}
// ==================== 社交服务(包含好友等功能)====================
service SocialService {
// ========== 好友请求相关 ==========
// 发送好友请求
rpc SendFriendRequest(SendFriendRequestRequest) returns (SendFriendRequestResponse) {
option (google.api.http) = {
post: "/api/v1/friends/requests"
body: "*"
};
}
// 获取好友请求列表
rpc GetFriendRequests(GetFriendRequestsRequest) returns (GetFriendRequestsResponse) {
option (google.api.http) = {
get: "/api/v1/friends/requests"
};
}
// 处理好友请求(接受/拒绝)
rpc HandleFriendRequest(HandleFriendRequestRequest) returns (HandleFriendRequestResponse) {
option (google.api.http) = {
post: "/api/v1/friends/requests/{request_id}/handle"
body: "*"
};
}
// ========== 好友关系相关 ==========
// 获取好友列表
rpc GetFriendList(GetFriendListRequest) returns (GetFriendListResponse) {
option (google.api.http) = {
get: "/api/v1/friends"
};
}
// 删除好友
rpc DeleteFriend(DeleteFriendRequest) returns (DeleteFriendResponse) {
option (google.api.http) = {
delete: "/api/v1/friends/{friend_user_id}"
};
}
// 设置好友备注
rpc SetFriendRemark(SetFriendRemarkRequest) returns (SetFriendRemarkResponse) {
option (google.api.http) = {
put: "/api/v1/friends/{friend_user_id}/remark"
body: "*"
};
}
// 检查好友关系
rpc CheckFriendship(CheckFriendshipRequest) returns (CheckFriendshipResponse) {
option (google.api.http) = {
get: "/api/v1/friends/check/{user_id}/{friend_user_id}"
};
}
// 获取好友数量
rpc GetFriendCount(GetFriendCountRequest) returns (GetFriendCountResponse) {
option (google.api.http) = {
get: "/api/v1/friends/count"
};
}
// 查找用户信息(用于加好友)
rpc SearchUserForFriend(SearchUserForFriendRequest) returns (SearchUserForFriendResponse) {
option (google.api.http) = {
get: "/api/v1/users/search"
};
}
// ========== 随机用户相关 ==========
// 获取随机用户(同一明星下的随机用户)
rpc GetRandomUsers(GetRandomUsersRequest) returns (GetRandomUsersResponse) {
option (google.api.http) = {
get: "/api/v1/social/random-users"
};
}
// 获取分页用户列表(同一明星身份下)
rpc GetUsersPaged(GetUsersPagedRequest) returns (GetUsersPagedResponse) {
option (google.api.http) = {
get: "/api/v1/social/users"
};
}
// ========== 资产点赞相关 ==========
// 点赞资产
rpc LikeAsset(LikeAssetRequest) returns (LikeAssetResponse) {
option (google.api.http) = {
post: "/api/v1/social/assets/{asset_id}/like"
};
}
// 取消点赞
rpc UnlikeAsset(UnlikeAssetRequest) returns (UnlikeAssetResponse) {
option (google.api.http) = {
delete: "/api/v1/social/assets/{asset_id}/like"
};
}
// 检查是否已点赞
rpc CheckAssetLike(CheckAssetLikeRequest) returns (CheckAssetLikeResponse) {
option (google.api.http) = {
get: "/api/v1/social/assets/{asset_id}/like"
};
}
// ========== 我的作品相关 ==========
// 获取我点赞的作品列表
rpc GetMyLikedAssets(GetMyLikedAssetsRequest) returns (GetMyLikedAssetsResponse) {
option (google.api.http) = {
get: "/api/v1/me/liked-assets"
};
}
// 获取我今日点赞的作品列表(暂不实现)
rpc GetMyTodayLikedAssets(GetMyTodayLikedAssetsRequest) returns (GetMyTodayLikedAssetsResponse) {
option (google.api.http) = {
get: "/api/v1/me/today-liked-assets"
};
}
// 获取我本周点赞的作品列表(暂不实现)
rpc GetMyWeekLikedAssets(GetMyWeekLikedAssetsRequest) returns (GetMyWeekLikedAssetsResponse) {
option (google.api.http) = {
get: "/api/v1/me/week-liked-assets"
};
}
}