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