本章对我们项目的数据结构和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);
}