数据结构与Protobuf

71676
2022/09/24 06:28:47

本章对我们项目的数据结构和proto进行定义。

数据结构

CREATE TABLE categories  (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  is_del BOOLEAN NOT NULL DEFAULT FALSE
);

CREATE TABLE topics (
  id BIGSERIAL PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  category_id INT NOT NULL,
  summary VARCHAR(255) NOT NULL,
  content VARCHAR NOT NULL,
  hit INT NOT NULL DEFAULT 0,
  dateline TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  is_del BOOLEAN NOT NULL DEFAULT FALSE
);

CREATE TABLE admins (
  id SERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  password VARCHAR(255) NOT NULL,
  is_del BOOLEAN NOT NULL DEFAULT FALSE
);

proto 定义

分类服务的定义

syntax = "proto3";

package pb;

message Category {
  int32 id = 1;
  string name = 2;
  bool is_del = 3;
}

// --- 创建分类
message CreateCategoryRequest { string name = 1; }
message CreateCategoryReply { int32 id = 1; }

// -- 修改分类
message EditCategoryRequest {
  int32 id = 1;
  string name = 2;
}
message EditCategoryReply {
  int32 id = 1;
  bool ok = 2;
}

// -- 分类列表
message ListCategoryRequest {
  optional string name = 1; // 根据分类名称查找
  optional bool is_del = 2; // 是否删除
}
message ListCategoryReply { repeated Category categories = 1; }

// -- 删除/恢复分类
message ToggleCategoryRequest { int32 id = 1; }
message ToggleCategoryReply {
  int32 id = 1;
  bool is_del = 2;
}

// -- 分类是否存在
message CategoryExistsRequest {
  oneof condition {
    string name = 1;
    int32 id = 2;
  }
}
message CategoryExistsReply { bool exists = 1; }

// -- 分类详情
message GetCategoryRequest {
  int32 id = 1;
  optional bool is_del = 2;
}
message GetCategoryReply { optional Category category = 1; }

service CategoryService {
  // 创建分类
  rpc CreateCategory(CreateCategoryRequest) returns (CreateCategoryReply);
  // 修改分类
  rpc EditCategory(EditCategoryRequest) returns (EditCategoryReply);
  // 分类列表
  rpc ListCategory(ListCategoryRequest) returns (ListCategoryReply);
  // 删除/恢复分类
  rpc ToggleCategory(ToggleCategoryRequest) returns (ToggleCategoryReply);
  // 分类是否存在
  rpc CategoryExists(CategoryExistsRequest) returns (CategoryExistsReply);
  // 获取分类详情
  rpc GetCategory(GetCategoryRequest) returns (GetCategoryReply);
}

文章服务的定义

管理员服务的定义

syntax = "proto3";

package pb;

message Admin {
  int32 id = 1;
  string email = 2;
  optional string password = 3;
  bool is_del = 4;
}

// -- 添加管理员
message CreateAdminRequest {
  string email = 1;
  string password = 2;
}
message CreateAdminReply { int32 id = 1; }
// -- 管理员列表
message ListAdminRequest {
  optional string email = 1; // 根据EMAIL进行查找
  optional bool is_del = 2;  // 是否删除
}
message ListAdminReply { repeated Admin admins = 1; }
// -- 修改管理员
message EditAdminRequest {
  int32 id = 1;
  string email = 2;
  string password = 3;              // 现用密码
  optional string new_password = 4; // 如果有密码,则修改密码
}
message EditAdminReply {
  int32 id = 1;
  bool ok = 2;
}
// -- 删除/恢复管理员
message ToggleAdminRequest { int32 id = 1; }
message ToggleAdminReply {
  int32 id = 1;
  bool is_del = 2;
}
// -- 管理员是否存在
message AdminExistsRequest {
  oneof condition {
    string email = 1;
    int32 id = 2;
  }
}
message AdminExistsReply { bool exists = 1; }
// -- 获取管理员
message GetAdminRequest {
  message ByAuth {
    string email = 1;
    string password = 2;
  }
  message ById {
    int32 id = 1;
    optional bool is_del = 2;
  }
  oneof condition {
    ById by_id = 1;     // 通过ID直接获取
    ByAuth by_auth = 2; // 通过登录信息获取
  }
}
message GetAdminReply { optional Admin admin = 1; }

service AdminService {
  // 添加管理员
  rpc CreateAdmin(CreateAdminRequest) returns (CreateAdminReply);
  // 管理员列表
  rpc ListAdmin(ListAdminRequest) returns (ListAdminReply);
  // 修改管理员
  rpc EditAdmin(EditAdminRequest) returns (EditAdminReply);
  // 删除/恢复管理员
  rpc ToggleAdmin(ToggleAdminRequest) returns (ToggleAdminReply);
  // 管理员是否存在
  rpc AdminExists(AdminExistsRequest) returns (AdminExistsReply);
  // 获取管理员
  rpc GetAdmin(GetAdminRequest) returns (GetAdminReply);
}