syntax = "proto3";
package cloud;
option go_package = "bsm/full/module/base/cloud/pb;cloud";
import "protobuf/blocks.proto";

// 笔记服务
service Note {
  // 创建笔记
  rpc CreateNote(CreateNoteRequest) returns (blocks.StatusReply);
  // 获取笔记详情
  rpc GetNote(blocks.IdentRequest) returns (CloudNoteItem);
  // 更新笔记
  rpc UpdateNote(CloudNoteItem) returns (blocks.StatusReply);
  // 删除笔记
  rpc DeleteNote(blocks.IdentRequest) returns (blocks.StatusReply);
  // 获取笔记列表
  rpc ListNotes(blocks.FetchRequest) returns (ListNotesResponse);
  // 置顶/取消置顶笔记
  rpc TogglePin(TogglePinRequest) returns (blocks.StatusReply);
  // 增加浏览次数
  rpc IncrementViews(blocks.IdentRequest) returns (blocks.StatusReply);
  // 搜索笔记
  rpc SearchNotes(blocks.FetchRequest) returns (ListNotesResponse);

  // 上传附件
  rpc InsertAttachment(NoteAttachmentItem) returns (blocks.StatusReply);
  // 删除附件
  rpc DeleteAttachment(blocks.IdentRequest) returns (blocks.StatusReply);
}

// 请求消息定义
message CreateNoteRequest {
  uint64 cloud_id = 1;
  string cloud_identity = 2;
  string title = 3;                   // 标题
  string content = 4;                 // 内容
  string category = 5;                // 分类
  string tags = 6;                    // 标签，逗号分隔
  bool is_markdown = 7;               // 是否是markdown格式
  bool is_pinned = 8;                 // 是否是置顶
  bool is_private = 9;                // 是否是私有
}

message ListNotesResponse {
  repeated CloudNoteItem notes = 1;
  int64 total = 2;
}

message TogglePinRequest {
  uint64 id = 1;
  bool is_pinned = 2;
}


// 知识笔记模型
message CloudNoteItem {
  uint64 id = 1;
  string identity = 2;
  string title = 3;                   // 标题
  string content = 4;                 // 内容
  string category = 5;                // 分类
  string tags = 6;                    // 标签，逗号分隔
  bool is_markdown = 7;               // 是否是markdown格式
  bool is_pinned = 8;                 // 是否是置顶
  bool is_private = 9;                // 是否是私有
  int32 views = 10;                   // 浏览次数
  string created_at = 11;
  string updated_at = 12;

  // 关联关系
  repeated NoteAttachmentItem attachments = 13;
}


// 笔记附件模型
message NoteAttachmentItem {
  uint64 id = 1;
  uint64 note_id = 2;                 // 笔记ID
  string file_name = 3;               // 文件名
  string file_path = 4;               // 文件路径
  int64 file_size = 5;                // 文件大小
  string mime_type = 6;               // 文件类型
  string created_at = 7; // 创建时间
}
