Files
sundynix-micro-be/app/plant/rpc/pb/plant.proto
T
2026-05-23 13:55:05 +08:00

878 lines
19 KiB
Protocol Buffer

syntax = "proto3";
package plant;
option go_package = "./plant";
// ========== 通用 ==========
message CommonResp {
int64 code = 1;
string msg = 2;
}
message IdReq {
string id = 1;
}
message IdsReq {
repeated string ids = 1;
}
message PageReq {
int32 current = 1;
int32 pageSize = 2;
}
// ========== 用户Profile ==========
message PlantUserProfile {
string id = 1;
string userId = 2;
string nickName = 3;
string avatarId = 4;
string levelId = 5;
int64 currentSunlight = 6;
int64 totalSunlight = 7;
int64 plantCount = 8;
int64 careCount = 9;
int64 postCount = 10;
int64 waterCount = 11;
int64 fertilizeCount = 12;
int64 repotCount = 13;
int64 pruneCount = 14;
int64 photoCount = 15;
}
message GetProfileReq {
string userId = 1;
}
message UpdateProfileReq {
string userId = 1;
string nickName = 2;
string avatarId = 3;
}
// 我的徽章
message UserBadgeInfo {
string id = 1;
string badgeId = 2;
string badgeName = 3;
string dimension = 4;
int32 tier = 5;
string awardedAt = 6;
}
message UserBadgeListResp {
repeated UserBadgeInfo list = 1;
}
// 我的收藏
message UserStarInfo {
string id = 1;
string targetId = 2;
string type = 3;
string createdAt = 4;
}
message UserStarListResp {
repeated UserStarInfo list = 1;
int64 total = 2;
}
// ========== 我的植物 ==========
message PlantInfo {
string id = 1;
string userId = 2;
string name = 3;
string plantTime = 4;
int32 status = 5;
string placement = 6;
string potMaterial = 7;
string potSize = 8;
string sunlight = 9;
string plantingMaterial = 10;
repeated string imgIds = 11;
int64 createdAt = 12;
}
message CreatePlantReq {
string userId = 1;
string name = 2;
string plantTime = 3;
string placement = 4;
string potMaterial = 5;
string potSize = 6;
string sunlight = 7;
string plantingMaterial = 8;
repeated string imgIds = 9;
}
message UpdatePlantReq {
string id = 1;
string name = 2;
int32 status = 3;
string placement = 4;
string potMaterial = 5;
string potSize = 6;
string sunlight = 7;
string plantingMaterial = 8;
repeated string imgIds = 9;
}
message PlantListReq {
string userId = 1;
int32 current = 2;
int32 pageSize = 3;
string name = 4;
}
message PlantListResp {
repeated PlantInfo list = 1;
int64 total = 2;
}
message PlantDetailResp {
PlantInfo plant = 1;
repeated CarePlanInfo carePlans = 2;
repeated GrowthRecordInfo growthRecords = 3;
}
// ========== 养护计划/任务 ==========
message CarePlanInfo {
string id = 1;
string plantId = 2;
string name = 3;
string icon = 4;
string targetAction = 5;
int32 period = 6;
}
message AddCarePlanReq {
string userId = 1;
string plantId = 2;
string name = 3;
string icon = 4;
string targetAction = 5;
int32 period = 6;
}
// 养护任务 status: 1=待完成 2=已完成 3=已过期
message CareTaskInfo {
string id = 1;
string plantId = 2;
string planId = 3;
string name = 4;
string icon = 5;
string targetAction = 6;
string dueDate = 7;
int32 status = 8;
}
message CareTaskListResp {
repeated CareTaskInfo list = 1;
int64 total = 2;
}
// ========== 养护记录 ==========
message AddCareRecordReq {
string userId = 1;
string plantId = 2;
string planId = 3;
string action = 4;
string note = 5;
}
// ========== 成长记录 ==========
message GrowthRecordInfo {
string id = 1;
string plantId = 2;
string content = 3;
int64 createdAt = 4;
}
message AddGrowthRecordReq {
string userId = 1;
string plantId = 2;
string content = 3;
repeated string imgIds = 4;
}
// ========== 百科 ==========
message WikiInfo {
string id = 1;
string name = 2;
string latinName = 3;
string aliases = 4;
string genus = 5;
int32 difficulty = 6;
int32 isHot = 7;
string growthHabit = 8;
string lightIntensity = 9;
string optimalTempPeriod = 10;
int64 createdAt = 11;
string classId = 12;
string distributionArea = 13;
string lifeCycle = 14;
repeated string classIds = 15;
repeated string ossIds = 16;
repeated string relatedWikiIds = 17;
bool isVectorSynced = 18;
bool isStar = 19;
string reproductionMethod = 20;
string pestsDiseases = 21;
string lightType = 22;
string stem = 23;
string fruit = 24;
string foliageType = 25;
string foliageColor = 26;
string foliageShape = 27;
int32 height = 28;
string floweringPeriod = 29;
string floweringColor = 30;
string floweringShape = 31;
int32 floweringDiameter = 32;
}
message WikiListReq {
int32 current = 1;
int32 pageSize = 2;
string name = 3;
string classId = 4;
int32 isHot = 5;
}
message WikiListResp {
repeated WikiInfo list = 1;
int64 total = 2;
}
message WikiDetailResp {
WikiInfo wiki = 1;
}
message CreateWikiReq {
string name = 1;
string latinName = 2;
string aliases = 3;
string genus = 4;
int32 difficulty = 5;
int32 isHot = 6;
string growthHabit = 7;
string lightIntensity = 8;
string optimalTempPeriod = 9;
string classId = 10;
string distributionArea = 11;
string lifeCycle = 12;
repeated string classIds = 13;
repeated string ossIds = 14;
repeated string relatedWikiIds = 15;
string reproductionMethod = 16;
string pestsDiseases = 17;
string lightType = 18;
string stem = 19;
string fruit = 20;
string foliageType = 21;
string foliageColor = 22;
string foliageShape = 23;
int32 height = 24;
string floweringPeriod = 25;
string floweringColor = 26;
string floweringShape = 27;
int32 floweringDiameter = 28;
}
message UpdateWikiReq {
string id = 1;
string name = 2;
string latinName = 3;
string aliases = 4;
string genus = 5;
int32 difficulty = 6;
int32 isHot = 7;
string growthHabit = 8;
string lightIntensity = 9;
string optimalTempPeriod = 10;
string classId = 11;
string distributionArea = 12;
string lifeCycle = 13;
repeated string classIds = 14;
repeated string ossIds = 15;
repeated string relatedWikiIds = 16;
string reproductionMethod = 17;
string pestsDiseases = 18;
string lightType = 19;
string stem = 20;
string fruit = 21;
string foliageType = 22;
string foliageColor = 23;
string foliageShape = 24;
int32 height = 25;
string floweringPeriod = 26;
string floweringColor = 27;
string floweringShape = 28;
int32 floweringDiameter = 29;
}
message WikiClassInfo {
string id = 1;
string name = 2;
string ossId = 3;
}
message WikiClassListResp {
repeated WikiClassInfo list = 1;
}
message CreateWikiClassReq {
string name = 1;
string icon = 2;
}
message UpdateWikiClassReq {
string id = 1;
string name = 2;
string icon = 3;
}
message ToggleStarReq {
string userId = 1;
string targetId = 2;
string type = 3;
}
// ========== OCR ==========
message ClassifyLogInfo {
string id = 1;
string userId = 2;
string imageUrl = 3;
string result = 4;
string createdAt = 5;
}
message ClassifyLogListResp {
repeated ClassifyLogInfo list = 1;
int64 total = 2;
}
// ========== 社区帖子 ==========
message PostInfo {
string id = 1;
string userId = 2;
string title = 3;
string content = 4;
int32 viewCount = 5;
int32 commentCount = 6;
int32 likeCount = 7;
int32 starCount = 8;
string location = 9;
int64 createdAt = 10;
string topicId = 11;
}
message CreatePostReq {
string userId = 1;
string title = 2;
string content = 3;
string location = 4;
repeated string imgIds = 5;
string topicId = 6;
}
message PostListReq {
int32 current = 1;
int32 pageSize = 2;
string keyword = 3;
string topicId = 4;
string userId = 5;
}
message PostListResp {
repeated PostInfo list = 1;
int64 total = 2;
}
message PostDetailResp {
PostInfo post = 1;
repeated PostCommentInfo comments = 2;
}
message PostCommentInfo {
string id = 1;
string userId = 2;
string content = 3;
string parentId = 4;
int64 createdAt = 5;
}
message CommentPostReq {
string userId = 1;
string postId = 2;
string content = 3;
string parentId = 4;
}
message LikePostReq {
string userId = 1;
string postId = 2;
}
// ========== 话题 ==========
message TopicInfo {
string id = 1;
string name = 2;
int32 postCount = 3;
string icon = 4;
string desc = 5;
string title = 6;
string remark = 7;
string startTime = 8;
string endTime = 9;
}
message TopicListResp {
repeated TopicInfo list = 1;
}
message CreateTopicReq {
string name = 1;
string icon = 2;
string desc = 3;
string title = 4;
string remark = 5;
string startTime = 6;
string endTime = 7;
}
message UpdateTopicReq {
string id = 1;
string name = 2;
string icon = 3;
string desc = 4;
string title = 5;
string remark = 6;
string startTime = 7;
string endTime = 8;
}
// ========== 兑换商城 ==========
message ExchangeItemInfo {
string id = 1;
string name = 2;
string desc = 3;
string imgId = 4;
int64 cost = 5;
int32 stock = 6;
int32 status = 7;
}
message ExchangeItemListReq {
int32 current = 1;
int32 pageSize = 2;
int32 status = 3;
}
message ExchangeItemListResp {
repeated ExchangeItemInfo list = 1;
int64 total = 2;
}
message CreateExchangeOrderReq {
string userId = 1;
string itemId = 2;
int32 quantity = 3;
string recipientName = 4;
string phone = 5;
string address = 6;
}
message CreateExchangeItemReq {
string name = 1;
string desc = 2;
string imgId = 3;
int64 cost = 4;
int32 stock = 5;
string type = 6;
int64 costSunlight = 7;
int32 limitPerUser = 8;
int32 sort = 9;
string startTime = 10;
string endTime = 11;
string imageId = 12;
}
message UpdateExchangeItemReq {
string id = 1;
string name = 2;
string desc = 3;
string imgId = 4;
int64 cost = 5;
int32 stock = 6;
int32 status = 7;
string type = 8;
int64 costSunlight = 9;
int32 limitPerUser = 10;
int32 sort = 11;
string startTime = 12;
string endTime = 13;
string imageId = 14;
}
message ExchangeOrderInfo {
string id = 1;
string userId = 2;
string itemId = 3;
string itemName = 4;
int64 cost = 5;
int32 status = 6;
string address = 7;
string createdAt = 8;
int32 quantity = 9;
string itemType = 10;
string recipientName = 11;
string phone = 12;
string trackingNo = 13;
string remark = 14;
string completedAt = 15;
}
message ExchangeOrderListReq {
int32 current = 1;
int32 pageSize = 2;
string userId = 3;
int32 status = 4;
}
message ExchangeOrderListResp {
repeated ExchangeOrderInfo list = 1;
int64 total = 2;
}
message UpdateExchangeOrderReq {
string id = 1;
int32 status = 2;
string trackingNo = 3;
string remark = 4;
}
message MediaCheckCallbackReq {
string traceId = 1;
string postId = 2;
string ossId = 3;
string userId = 4;
int32 status = 5;
int32 type = 6;
string errMsg = 7;
}
// ========== 快捷养护 ==========
message QuickCareReq {
string userId = 1;
string plantId = 2;
string name = 3;
string icon = 4;
string remark = 5;
}
// ========== Banner ==========
message BannerInfo {
string id = 1;
string title = 2;
string imageId = 3;
int32 sort = 4;
int32 isActive = 5;
string targetUrl = 6;
string createdAt = 7;
}
message BannerListReq {
int32 current = 1;
int32 pageSize = 2;
string title = 3;
int32 isActive = 4;
}
message BannerListResp {
repeated BannerInfo list = 1;
int64 total = 2;
}
message CreateBannerReq {
string title = 1;
string imageId = 2;
int32 sort = 3;
int32 isActive = 4;
string targetUrl = 5;
}
message UpdateBannerReq {
string id = 1;
string title = 2;
string imageId = 3;
int32 sort = 4;
int32 isActive = 5;
string targetUrl = 6;
}
message SaveAiChatHistoryReq {
string userId = 1;
string question = 2;
string answer = 3;
}
message SyncWikiVectorReq {
string wikiId = 1;
}
// ========== 配置 ==========
message LevelConfigInfo {
string id = 1;
int32 level = 2;
string title = 3;
int64 minSunlight = 4;
string perks = 5;
}
message LevelConfigListResp {
repeated LevelConfigInfo list = 1;
}
message CreateLevelConfigReq {
int32 level = 1;
string title = 2;
int64 minSunlight = 3;
string perks = 4;
}
message UpdateLevelConfigReq {
string id = 1;
int32 level = 2;
string title = 3;
int64 minSunlight = 4;
string perks = 5;
}
message BadgeConfigInfo {
string id = 1;
string name = 2;
string description = 3;
string dimension = 4;
string groupId = 5;
int32 tier = 6;
string targetAction = 7;
int64 threshold = 8;
int64 rewardSunlight = 9;
string iconId = 10;
int32 sort = 11;
}
message BadgeConfigListReq {
int32 current = 1;
int32 pageSize = 2;
string dimension = 3;
}
message BadgeConfigListResp {
repeated BadgeConfigInfo list = 1;
int64 total = 2;
}
message CreateBadgeConfigReq {
string name = 1;
string description = 2;
string dimension = 3;
string groupId = 4;
int32 tier = 5;
string targetAction = 6;
int64 threshold = 7;
int64 rewardSunlight = 8;
string iconId = 9;
int32 sort = 10;
}
message UpdateBadgeConfigReq {
string id = 1;
string name = 2;
string description = 3;
string dimension = 4;
string groupId = 5;
int32 tier = 6;
string targetAction = 7;
int64 threshold = 8;
int64 rewardSunlight = 9;
string iconId = 10;
int32 sort = 11;
}
// ========== 完成任务 ==========
message CompleteTaskReq {
string userId = 1;
string taskId = 2;
string remark = 3;
}
message TaskCompletionResult {
bool isLevelUp = 1;
LevelConfigInfo currentLevel = 2;
bool isGetBadge = 3;
BadgeConfigInfo newBadge = 4;
int64 rewardSunlight = 5;
}
// ========== 徽章树 ==========
message BadgeGroupInfo {
string groupId = 1;
string dimension = 2;
repeated BadgeConfigInfo badges = 3;
}
message BadgeConfigTreeResp {
repeated BadgeGroupInfo groups = 1;
}
// ========== AI ==========
message AiQuotaResp {
int64 remaining = 1;
int64 total = 2;
int64 used = 3;
int64 limit = 4;
}
message AiChatHistoryInfo {
string id = 1;
string userId = 2;
string question = 3;
string answer = 4;
string createdAt = 5;
}
message AiChatHistoryReq {
string userId = 1;
int32 current = 2;
int32 pageSize = 3;
}
message AiChatHistoryResp {
repeated AiChatHistoryInfo list = 1;
int64 total = 2;
}
// ========== 服务定义 ==========
service PlantService {
// 用户Profile
rpc GetUserProfile(GetProfileReq) returns (PlantUserProfile);
rpc UpdateUserProfile(UpdateProfileReq) returns (CommonResp);
rpc GetMyBadges(GetProfileReq) returns (UserBadgeListResp);
rpc GetMyStars(GetProfileReq) returns (UserStarListResp);
// 我的植物
rpc CreatePlant(CreatePlantReq) returns (CommonResp);
rpc UpdatePlant(UpdatePlantReq) returns (CommonResp);
rpc DeletePlant(IdsReq) returns (CommonResp);
rpc GetPlantList(PlantListReq) returns (PlantListResp);
rpc GetPlantDetail(IdReq) returns (PlantDetailResp);
// 养护
rpc AddCarePlan(AddCarePlanReq) returns (CommonResp);
rpc DeleteCarePlan(IdsReq) returns (CommonResp);
rpc GetTodayTaskList(GetProfileReq) returns (CareTaskListResp);
rpc CompleteTask(CompleteTaskReq) returns (TaskCompletionResult);
rpc AddCareRecord(AddCareRecordReq) returns (CommonResp);
rpc AddGrowthRecord(AddGrowthRecordReq) returns (CommonResp);
// 百科
rpc GetWikiList(WikiListReq) returns (WikiListResp);
rpc GetWikiDetail(IdReq) returns (WikiDetailResp);
rpc CreateWiki(CreateWikiReq) returns (CommonResp);
rpc UpdateWiki(UpdateWikiReq) returns (CommonResp);
rpc DeleteWiki(IdsReq) returns (CommonResp);
rpc SyncWikiVector(SyncWikiVectorReq) returns (CommonResp);
rpc DeleteWikiVector(SyncWikiVectorReq) returns (CommonResp);
rpc SyncAllWikiVector(PageReq) returns (CommonResp);
rpc GetWikiClassList(IdReq) returns (WikiClassListResp);
rpc CreateWikiClass(CreateWikiClassReq) returns (CommonResp);
rpc UpdateWikiClass(UpdateWikiClassReq) returns (CommonResp);
rpc DeleteWikiClass(IdsReq) returns (CommonResp);
rpc ToggleWikiStar(ToggleStarReq) returns (CommonResp);
// OCR
rpc GetMyClassifyLog(GetProfileReq) returns (ClassifyLogListResp);
rpc DeleteClassifyLog(IdsReq) returns (CommonResp);
// 社区
rpc CreatePost(CreatePostReq) returns (CommonResp);
rpc DeletePost(IdsReq) returns (CommonResp);
rpc GetPostList(PostListReq) returns (PostListResp);
rpc GetPostDetail(IdReq) returns (PostDetailResp);
rpc CommentPost(CommentPostReq) returns (CommonResp);
rpc LikePost(LikePostReq) returns (CommonResp);
rpc StarPost(LikePostReq) returns (CommonResp);
rpc MediaCheckCallback(MediaCheckCallbackReq) returns (CommonResp);
// 话题
rpc GetTopicList(IdReq) returns (TopicListResp);
rpc GetTopicDetail(IdReq) returns (TopicInfo);
rpc CreateTopic(CreateTopicReq) returns (CommonResp);
rpc UpdateTopic(UpdateTopicReq) returns (CommonResp);
rpc DeleteTopic(IdsReq) returns (CommonResp);
// 兑换
rpc GetExchangeItemList(ExchangeItemListReq) returns (ExchangeItemListResp);
rpc GetExchangeItemDetail(IdReq) returns (ExchangeItemInfo);
rpc CreateExchangeItem(CreateExchangeItemReq) returns (CommonResp);
rpc UpdateExchangeItem(UpdateExchangeItemReq) returns (CommonResp);
rpc DeleteExchangeItem(IdsReq) returns (CommonResp);
rpc CreateExchangeOrder(CreateExchangeOrderReq) returns (CommonResp);
rpc GetMyExchangeOrders(ExchangeOrderListReq) returns (ExchangeOrderListResp);
rpc GetExchangeOrderList(ExchangeOrderListReq) returns (ExchangeOrderListResp);
rpc UpdateExchangeOrder(UpdateExchangeOrderReq) returns (CommonResp);
// 配置
rpc GetLevelConfigList(PageReq) returns (LevelConfigListResp);
rpc GetLevelConfigDetail(IdReq) returns (LevelConfigInfo);
rpc CreateLevelConfig(CreateLevelConfigReq) returns (CommonResp);
rpc UpdateLevelConfig(UpdateLevelConfigReq) returns (CommonResp);
rpc DeleteLevelConfig(IdsReq) returns (CommonResp);
rpc GetBadgeConfigList(BadgeConfigListReq) returns (BadgeConfigListResp);
rpc GetBadgeConfigDetail(IdReq) returns (BadgeConfigInfo);
rpc GetBadgeConfigTree(IdReq) returns (BadgeConfigTreeResp);
rpc CreateBadgeConfig(CreateBadgeConfigReq) returns (CommonResp);
rpc UpdateBadgeConfig(UpdateBadgeConfigReq) returns (CommonResp);
rpc DeleteBadgeConfig(IdsReq) returns (CommonResp);
rpc GetWikiClassDetail(IdReq) returns (WikiClassInfo);
// AI
rpc GetAiChatHistory(AiChatHistoryReq) returns (AiChatHistoryResp);
rpc SaveAiChatHistory(SaveAiChatHistoryReq) returns (CommonResp);
rpc DeleteAiChatHistory(IdsReq) returns (CommonResp);
rpc ClearAiChatHistory(GetProfileReq) returns (CommonResp);
rpc GetAiChatQuota(GetProfileReq) returns (AiQuotaResp);
// 快捷养护
rpc QuickCare(QuickCareReq) returns (CommonResp);
// Banner
rpc CreateBanner(CreateBannerReq) returns (CommonResp);
rpc UpdateBanner(UpdateBannerReq) returns (CommonResp);
rpc DeleteBanner(IdsReq) returns (CommonResp);
rpc GetBannerList(BannerListReq) returns (BannerListResp);
rpc GetActiveBannerList(PageReq) returns (BannerListResp);
}