373 lines
12 KiB
Protocol Buffer
373 lines
12 KiB
Protocol Buffer
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; // 请求附带消息(可选)
|
||
}
|
||
|
||
message SendFriendRequestResponse {
|
||
topfans.common.BaseResponse base = 1;
|
||
int64 request_id = 2; // 创建的请求ID
|
||
string status = 3; // 请求状态
|
||
int64 created_at = 4; // 创建时间
|
||
int64 expires_at = 5; // 过期时间
|
||
}
|
||
|
||
// 获取好友请求列表
|
||
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; // 是否已点赞
|
||
}
|
||
|
||
// ==================== 社交服务(包含好友等功能)====================
|
||
|
||
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"
|
||
};
|
||
}
|
||
}
|
||
|