syntax = "proto3";

import "google/protobuf/timestamp.proto";
import "gogoproto/gogo.proto";
// import "validate/validate.proto";
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
import "api/v1/user.proto";

package api.v1;

option go_package = "moredoc/api/v1;v1";
option java_multiple_files = true;
option java_package = "api.v1";

// 评论
message Comment {
  google.protobuf.Timestamp created_at = 1
      [ (gogoproto.stdtime) = true ]; // 创建时间
  google.protobuf.Timestamp updated_at = 2
      [ (gogoproto.stdtime) = true ]; // 更新时间
  int64 id = 3;                       // 评论ID
  int64 parent_id = 4;                // 父评论ID
  string content = 5;                 // 评论内容
  int64 document_id = 6;              // 文档ID
  int32 status = 7;                   // 状态，见 web/utils/enum.js 枚举
  int32 comment_count = 8;            // 回复数量
  int64 user_id = 9;                  // 用户ID
  User user = 10;                     // 用户信息
  string document_title = 11;         // 文档标题
}

// 审核评论，修改评论状态
message CheckCommentRequest {
  repeated int64 id = 1; // 评论ID
  int32 status = 2;      // 状态，见 web/utils/enum.js 枚举
}

// 删除评论请求
message DeleteCommentRequest { repeated int64 id = 1; }

// 获取评论请求
message GetCommentRequest { int64 id = 1; }

// 获取评论列表请求
message ListCommentRequest {
  int64 page = 1;                // 页码
  int64 size = 2;                // 每页数量
  string wd = 3;                 // 搜索关键词
  repeated string field = 4;     // 查询的数据字段
  string order = 5;              // 排序字段
  repeated int32 status = 6;     // 状态，见 web/utils/enum.js 枚举
  int64 document_id = 7;         // 文档ID
  int64 user_id = 8;             // 用户ID
  repeated int64 parent_id = 9;  // 父评论ID
  bool with_document_title = 10; // 是否返回文档标题
}

// 获取评论列表响应
message ListCommentReply {
  int64 total = 1;              // 总数
  repeated Comment comment = 2; // 评论列表
}

// 创建评论请求
message CreateCommentRequest {
  int64 document_id = 1; // 文档ID
  int64 parent_id = 2;   // 父评论ID
  string content = 3;    // 评论内容
  string captcha_id = 4; // 验证码ID
  string captcha = 5;    // 验证码
}

// 评论服务
service CommentAPI {

  // 创建评论
  rpc CreateComment(CreateCommentRequest) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      post : '/api/v1/comment',
      body : '*',
    };
  }

  // 更新评论，仅限管理员操作
  rpc UpdateComment(Comment) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      put : '/api/v1/comment',
      body : '*',
    };
  }

  // 管理员或用户自己删除自己的评论
  rpc DeleteComment(DeleteCommentRequest) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete : '/api/v1/comment',
    };
  }

  // 获取单个评论
  rpc GetComment(GetCommentRequest) returns (Comment) {
    option (google.api.http) = {
      get : '/api/v1/comment',
    };
  }

  // 获取评论列表
  rpc ListComment(ListCommentRequest) returns (ListCommentReply) {
    option (google.api.http) = {
      get : '/api/v1/comment/list',
    };
  }

  // 审核评论
  rpc CheckComment(CheckCommentRequest) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      post : '/api/v1/comment/check',
      body : '*',
    };
  }
}