syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto";
option go_package = "./office;office";
package office;

message CommonResp{
  int32  errCode = 1;
  string errMsg = 2;
}

message TagUser {
  string userID = 1;
  string userName = 2;
}

message Tag {
  string tagID = 1;
  string tagName = 2;
  repeated TagUser userList = 3;
}

message GetUserTagsReq{
  string userID = 1;
  string operationID = 2;
}

message GetUserTagsResp{
  CommonResp commonResp = 1;
  repeated Tag tags = 2;
}

message CreateTagReq {
  string tagName = 1;
  string userID = 2;
  repeated string userIDList = 3;
  string operationID = 4;
}

message CreateTagResp {
  CommonResp commonResp = 1;
}

message DeleteTagReq {
  string userID = 1;
  string tagID = 2;
  string operationID = 3;
}

message DeleteTagResp {
  CommonResp commonResp = 1;
}

message SetTagReq {
 string userID = 1;
 string tagID = 2;
 string newName = 3;
 repeated string increaseUserIDList = 4;
 repeated string reduceUserIDList = 5;
 string operationID = 6;
}

message SetTagResp {
  CommonResp commonResp = 1;
}

message SendMsg2TagReq {
  repeated string tagList = 1;
  repeated string UserList = 2;
  repeated string GroupList = 3;
  string sendID = 4;
  int32 senderPlatformID = 5;
  string content = 6;
  string operationID = 7;
}

message SendMsg2TagResp {
  CommonResp commonResp = 1;
}

message GetTagSendLogsReq {
  server_api_params.RequestPagination Pagination = 1;
  string userID = 2;
  string operationID = 3;
}

message TagSendLog {
  repeated TagUser userList = 1;
  string content = 2;
  int64 sendTime = 3;
}

message GetTagSendLogsResp {
  CommonResp commonResp = 1;
  server_api_params.ResponsePagination Pagination = 2;
  repeated TagSendLog tagSendLogs = 3;
}

message GetUserTagByIDReq {
  string userID = 1;
  string tagID = 2;
  string operationID = 3;
}

message GetUserTagByIDResp {
  CommonResp commonResp = 1;
  Tag tag = 2;
}

/// WorkMoment

message LikeUser {
  string userID = 1;
  string userName = 2;
}

message Comment {
  string userID = 1;
  string userName = 2;
  string replyUserID = 3;
  string replyUserName = 4;
  string contentID = 5;
  string content = 6;
  int32 createTime = 7;
}

message WorkMoment {
  string workMomentID = 1;
  string userID = 2;
  string content = 3;
  repeated LikeUser likeUsers = 4;
  repeated Comment comments = 5;
  repeated string whoCanSeeUserIDList = 6;
  repeated string whoCantSeeUserIDList = 7;
  bool isPrivate = 8;
  bool isPublic = 9;
  int32 CreateTime = 10;
}

message CreateOneWorkMomentReq {
  WorkMoment workMoment = 1;
  string userID = 2;
  string operationID = 3;
}

message CreateOneWorkMomentResp {
  CommonResp commonResp = 1;
}

message DeleteOneWorkMomentReq {
  string workMomentID = 1;
  string userID = 2;
  string operationID = 3;
}

message DeleteOneWorkMomentResp {
  CommonResp commonResp = 1;
}

message LikeOneWorkMomentReq {
  string userID = 1;
  string WorkMomentID = 2;
  string operationID = 3;
}

message LikeOneWorkMomentResp {
  CommonResp commonResp = 1;
}

message CommentOneWorkMomentReq {
  string userID = 1;
  string workMomentID = 2;
  string replyUserID = 3;
  string content = 4;
  string operationID = 5;
}

message CommentOneWorkMomentResp {
  CommonResp commonResp = 1;
}

message GetUserWorkMomentsReq {
  string userID = 1;
  server_api_params.RequestPagination Pagination = 2;
  string operationID = 3;
}

message GetUserWorkMomentsResp {
  CommonResp commonResp = 1;
  repeated WorkMoment workMoments = 2;
  server_api_params.ResponsePagination Pagination = 3;
}

message GetUserFriendWorkMomentsReq {
  string userID = 1;
  server_api_params.RequestPagination Pagination = 2;
  string operationID = 3;
}

message GetUserFriendWorkMomentsResp {
  CommonResp commonResp = 1;
  repeated WorkMoment workMoments = 2;
  server_api_params.ResponsePagination Pagination = 3;
}

message CommentsMsg {
  Comment comment = 1;
  string workMomentID = 2;
  string content = 3;
}

message GetUserWorkMomentsCommentsMsgReq {
  string userID = 1;
  string operationID = 2;
  server_api_params.RequestPagination Pagination = 3;
}

message GetUserWorkMomentsCommentsMsgResp {
  CommonResp commonResp = 1;
  repeated CommentsMsg commentsMsgs = 2;
  server_api_params.ResponsePagination Pagination = 3;
}

message ClearUserWorkMomentsCommentsMsgReq {
  string userID = 1;
  string operationID = 2;
}

message ClearUserWorkMomentsCommentsMsgResp {
  CommonResp commonResp = 1;
}

message SetUserWorkMomentsLevelReq {
  string userID = 1;
  int32 level = 2;
  string operationID = 3;
}

message SetUserWorkMomentsLevelResp {
  CommonResp commonResp = 1;
}

service OfficeService {
  rpc GetUserTags(GetUserTagsReq) returns(GetUserTagsResp);
  rpc CreateTag(CreateTagReq) returns(CreateTagResp);
  rpc DeleteTag(DeleteTagReq) returns(DeleteTagResp);
  rpc SetTag(SetTagReq) returns(SetTagResp);
  rpc SendMsg2Tag(SendMsg2TagReq) returns(SendMsg2TagResp);
  rpc GetTagSendLogs(GetTagSendLogsReq) returns(GetTagSendLogsResp);
  rpc GetUserTagByID(GetUserTagByIDReq) returns(GetUserTagByIDResp);

  rpc CreateOneWorkMoment(CreateOneWorkMomentReq) returns(CreateOneWorkMomentResp);
  rpc DeleteOneWorkMoment(DeleteOneWorkMomentReq) returns(DeleteOneWorkMomentResp);
  rpc LikeOneWorkMoment(LikeOneWorkMomentReq) returns(LikeOneWorkMomentResp);
  rpc CommentOneWorkMoment(CommentOneWorkMomentReq) returns(CommentOneWorkMomentResp);
  /// user self
  rpc GetUserWorkMoments(GetUserWorkMomentsReq) returns(GetUserWorkMomentsResp);
  /// users friend
  rpc GetUserFriendWorkMoments(GetUserFriendWorkMomentsReq) returns(GetUserFriendWorkMomentsResp);
  rpc GetUserWorkMomentsCommentsMsg(GetUserWorkMomentsCommentsMsgReq) returns(GetUserWorkMomentsCommentsMsgResp);
  rpc ClearUserWorkMomentsCommentsMsg(ClearUserWorkMomentsCommentsMsgReq) returns(ClearUserWorkMomentsCommentsMsgResp);
  rpc SetUserWorkMomentsLevel(SetUserWorkMomentsLevelReq) returns(SetUserWorkMomentsLevelResp);
}