文章
一、文章结构
和文章有关的内容有两个表,一个是 文章表
该表仅存储文章的一些基本信息,不包括文章内容。另一个表是 文章内容
表,该表存储文章的内容,而文章的内容又分为 PUBLISHED(已发布 / 正文)
和 DRAFT(草稿)
。
1.区分两个表中的状态
同时要注意区分 文章表
中的 status(状态)
和 文章内容表
中的状态,二者都有 PUBLISHED(已发布)
与 DRAFT(草稿)
。
文章表
中的PUBLISHED
代表该文章已经发布,可以在博客页中显示,DRAFT
表示当前文章是草稿状态,不会在博客页中显示。文章内容表
中的PUBLISHED(正文)
表示当前文章的正文内容,一个文章只会有一个处于PUBLISHED
状态的文章,该状态的文章内容就是博客页展示的文章内容,DRAFT(草稿)
表示当前文章的草稿内容,一个文章可以有多个草稿,草稿内容不会在博客页展示,仅在后台页面可以看到,你可以选择将哪个草稿内容转为博客正文。
在文章相关接口中,修改文章
、获取文章
等接口仅仅是获取文章的信息,并不包括文章内容,如果想要获取文章内容,需要使用接口 获取文章内容
或 获取文章草稿
。
二、表结构
1.文章表
/**
* 文章表
*/
object Posts : Table("post") {
/** 文章 ID **/
val postId = long("post_id").autoIncrement()
/** 标题 **/
val title = varchar("title", 256)
/** 是否自动生成摘要 **/
val autoGenerateExcerpt = bool("auto_generate_excerpt")
/** 摘要 **/
val excerpt = varchar("excerpt", 1024, "utf8mb4_general_ci")
/** 别名 **/
val slug = varchar("slug", 128, "utf8mb4_general_ci").uniqueIndex()
/** 封面 **/
val cover = varchar("cover", 512).nullable()
/** 是否允许评论 **/
val allowComment = bool("allow_comment")
/** 是否置顶 **/
val pinned = bool("pinned")
/** 状态 **/
val status = enumerationByName("status", 24, PostStatus::class)
/** 可见性 **/
val visible = enumerationByName("visible", 24, PostVisible::class)
/** 密码 **/
val password = varchar("password", 64).nullable()
/** 访问量 **/
val visit = integer("visit").default(0)
/** 创建时间 **/
val createTime = long("create_time")
/** 最后修改时间 **/
val lastModifyTime = long("last_modify_time").nullable()
override val primaryKey = PrimaryKey(postId)
}
2.文章内容表
/**
* 文章内容表
*/
object PostContents : Table("post_content") {
/** 文章内容 ID **/
val postContentId = long("post_content_id").autoIncrement()
/** 文章 ID **/
val postId = long("post_id").references(Posts.postId)
/** 内容 **/
val content = text("content", "utf8mb4_general_ci")
/** HTML(由 content 解析得来) **/
val html = text("html", "utf8mb4_general_ci")
/** 状态 **/
val status = enumerationByName("status", 24, PostContentStatus::class)
/** 草稿名 **/
val draftName = varchar("draft_name", 256).nullable()
/** 最后修改时间 **/
val lastModifyTime = long("last_modify_time").nullable()
override val primaryKey = PrimaryKey(postContentId)
}
三、枚举类
1.状态枚举类
/**
* 文章状态枚举类
*/
enum class PostStatus {
/** 已发布 **/
PUBLISHED,
/** 草稿 **/
DRAFT,
/** 已删除 **/
DELETED
}
2.可见性枚举类
/**
* 文章可见性枚举类
*/
enum class PostVisible {
/** 可见 **/
VISIBLE,
/** 隐藏 **/
HIDDEN
}
3.排序枚举类
/**
* 文章排序枚举类
*/
enum class PostSort {
/** 创建时间降序 **/
CREATE_DESC,
/** 创建时间升序 **/
CREATE_ASC,
/** 最后修改时间降序 **/
MODIFY_DESC,
/** 最后修改时间升序 **/
MODIFY_ASC,
/** 访问量降序 **/
VISIT_DESC,
/** 访问量升序 **/
VISIT_ASC,
/** 置顶排序 **/
PINNED
}
修改于 11 天前