数据库字段含义说明
其实我们在后端的 src/models
文件夹下对每一个字段都进行了注释,可以清楚的查看
在看文档时,不妨先看看代码,这里照搬一份 models
文件夹
Comment Model
CommentModel
typescript
const CommentSchema = new mongoose.Schema<CommentAttributes>(
{
// 评论的 ID,从 1 开始且要求唯一,在用户发评论时自动增加
cid: { type: Number, unique: true },
// 评论所属的回复 ID,标识了这个评论是属于哪个回复的
rid: { type: Number, required: true },
// 评论所属的话题 ID,标识了这个评论是哪个话题底下的
tid: { type: Number, required: true },
// 评论者的 uid,和用户关联,标识了这是谁发的评论
c_uid: { type: Number, required: true, ref: 'user' },
// 被评论者的 uid,和用户关联,标识了这个评论是发给谁的
to_uid: { type: Number, required: true, ref: 'user' },
// 评论的内容,纯文字,无富文本
content: { type: String, default: '' },
// 评论点赞计数
likes_count: { type: Number, default: 0 },
// 评论点踩计数
dislikes_count: { type: Number, default: 0 },
// 评论的点赞数组,存放了点赞用户的 uid
likes: { type: [Number], default: [] },
// 评论的点踩数,存放了点踩用户的 uid
dislikes: { type: [Number], default: [] },
},
// 时间戳,自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
Expenditure Model
ExpenditureModel
typescript
const ExpenditureSchema = new mongoose.Schema<ExpenditureAttributes>(
{
// 支持的 id,从 1 开始,在支出发成的时候自动生成
eid: { type: Number, unique: true },
// 支出的原因
reason: { type: String, default: '' },
// 支出的时间
time: { type: Number, default: Date.now() },
// 支出的金额
amount: { type: Number, default: 0 },
},
// 支出的时间戳,创建时自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
Income Model
IncomeModel
typescript
const IncomeSchema = new mongoose.Schema<IncomeAttributes>(
{
// 单条收入的 id,从 1 开始且唯一,在收入创建时自动加一
iid: { type: Number, unique: true },
// 收入发生的原因
reason: { type: String, default: '' },
// 收入发生的时间
time: { type: Number, default: Date.now() },
// 收入发生的金额
amount: { type: Number, default: 0 },
},
// 收入的时间戳,自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
Non Moe Model
NonMoeModel
typescript
const NonMoeSchema = new mongoose.Schema<NonMoeAttributes>(
{
// 不萌记录的 ID,从 1 开始,在创建记录的时候自动生成
nid: { type: Number, unique: true },
// 用户 ID,这条记录是对谁的记录
uid: { type: Number, required: true },
// 用户名
name: { type: String, require: true },
// 不萌记录的描述,发生了什么不萌行为
description: { type: String, required: true },
// 不萌记录发生的时间
time: { type: Number, default: Date.now() },
// 发生不萌行为的后果
result: { type: String, required: true },
},
// 时间戳,自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
Reply Model
ReplyModel
typescript
const ReplySchema = new mongoose.Schema<ReplyAttributes>(
{
// 回复的 ID,从 1 开始且唯一,自动生成
rid: { type: Number, unique: true },
// 回复所属话题的 ID,标志了该条回复是属于哪个话题的
tid: { type: Number, required: true },
// 回复人的 uid,标识了这个回复是谁发的
r_uid: { type: Number, required: true },
// 被回复人的 uid,标志了这个回复是回给谁的
to_uid: { type: Number, required: true },
// 回复的楼层数,标志了这个回复属于该话题的几楼
floor: { type: Number, default: 0 },
// 被回复的人的楼层数,方便点击跳转
to_floor: { type: Number, default: 0 },
// 回复的 tag,可选,字符串数组
tags: { type: [String], default: [] },
// 回复发布的时间
time: { type: Number, default: 0 },
// 回复被再次编辑的时间
edited: { type: Number, default: 0 },
// 回复的内容
content: { type: String, default: '' },
// 回复被推的时间
upvote_time: { type: Number, default: 0 },
// 回复的点赞计数
likes_count: { type: Number, default: 0 },
// 回复的评论计数
comments_count: { type: Number, default: 0 },
// 回复被推数组,存放了推回复用户的 uid
upvotes: { type: [Number], default: [] },
// 回复的点赞数组,存放了点赞用户的 uid
likes: { type: [Number], default: [] },
// 回复的点踩数组,存放了点踩用户的 uid
dislikes: { type: [Number], default: [] },
// 回复的分享数组,存放了分享用户的 uid
share: { type: [Number], default: [] },
// 回复的评论数组,存放了回复底下评论的 uid
comment: { type: [String], default: [] },
},
// 时间戳,自动创建
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
Tag Model
TagModel
typescript
const TagSchema = new mongoose.Schema<TagAttributes>(
{
// 单个 tag 的 ID,从 1 开始自动递增且唯一
tag_id: { type: Number, unique: true },
// tag 所在的话题或者回复的 id
tid: { type: Number, require: true },
// tag 所在的回复 id,为 0 的就是楼主话题的 tag
rid: { type: Number, default: 0 },
// tag 的名字
name: { type: String, require: true },
// tag 所属话题的分类
category: { type: [String], default: [] },
},
// 时间戳,自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
Topic Model
TopicModel
typescript
const TopicSchema = new mongoose.Schema<TopicAttributes>(
{
// 话题的 ID,在创建话题的时候自动生成,从 1 开始
tid: { type: Number, unique: true },
// 话题的标题
title: { type: String, required: true },
// 话题的内容,富文本
content: { type: String, required: true },
// 发帖人的 uid
uid: { type: Number, required: true, ref: 'user' },
// 话题的 tag,为一个字符串数组
tags: { type: [String], required: true },
// 话题的分类,暂时有一个或两个
category: { type: [String], required: true },
// 话题发布的时间
time: { type: Number, default: Date.now() },
// 话题的热度,有专门的热度计算公式
popularity: { type: Number, default: 0 },
// 话题被查看的次数
views: { type: Number, default: 0 },
// 话题的评论数
comments: { type: Number, default: 0 },
// 话题被推的时间
upvote_time: { type: Number, default: 0 },
// 话题的被推计数
upvotes_count: { type: Number, default: 0 },
// 话题的回复计数
replies_count: { type: Number, default: 0 },
// 话题的点赞计数
likes_count: { type: Number, default: 0 },
// 话题的分享计数
share_count: { type: Number, default: 0 },
// 话题的被踩计数
dislikes_count: { type: Number, default: 0 },
// 话题的被推数组,存放了用户的 uid
upvotes: { type: [Number], default: [] },
// 话题下方回复的 ID,存放了回复的 rid
replies: { type: [Number], default: [] },
// 话题的点赞数,存放了点赞用户的 uid
likes: { type: [Number], default: [] },
// 话题的分享数,存放了分享用户的 uid
share: { type: [Number], default: [] },
// 话题的点踩数,存放了点踩用户的 uid
dislikes: { type: [Number], default: [] },
// 话题的状态,0 正常,1 封禁, 2 被删除
status: { type: Number, default: 0 },
// 话题被再次编辑的时间
edited: { type: Number, default: 0 },
},
// 时间戳,自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
Update Log Model
UpdateLogModel
typescript
const UpdateLogSchema = new mongoose.Schema<UpdateLogAttributes>(
{
// 单个更新日志的 id,唯一,从 1 递增
upid: { type: Number, unique: true },
// 更新日志的记录内容
description: { type: String, required: true, default: '' },
// 更新的时间
time: { type: Number, required: false, default: Date.now() },
// 更新的版本
version: { type: String, required: false, default: '' },
},
// 时间戳,自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)
User Model
UserModel
typescript
const UserSchema = new mongoose.Schema<UserAttributes>(
{
// 用户 ID,从 1 开始递增且唯一
uid: { type: Number, unique: true },
// 用户名,唯一,允许数字字母汉字和 _ ~
name: { type: String, required: true },
// 用户邮箱
email: { type: String, required: true },
// 用户密码,已加密
password: { type: String, required: true },
// 用户的注册 ip,可选
ip: { type: String, default: '' },
// 用户头像的图片地址
avatar: { type: String, default: '' },
// 用户的角色,游客:0,普通用户:1,管理员:2,超级管理员:3
roles: { type: Number, default: 1 },
// 用户的状态,0:正常,1:封禁
status: { type: Number, default: 0 },
// 用户的注册时间
time: { type: Number, default: Date.now() },
// 用户的萌萌点
moemoepoint: { type: Number, default: 1007 },
// 用户的签名
bio: { type: String, default: '' },
// 用户的被推数
upvote: { type: Number, default: 0 },
// 用户的被赞数
like: { type: Number, default: 0 },
// 用户的被踩数
dislike: { type: Number, default: 0 },
// 用户今日发表的话题,每日发布上限 萌萌点 / 10 个,12 点重置
daily_topic_count: { type: Number, default: 0 },
// 用户的好友计数
friend_count: { type: Number, default: 0 },
// 用户关注的用户计数
followed_count: { type: Number, default: 0 },
// 用户的关注者计数
follower_count: { type: Number, default: 0 },
// 用户发表的话题计数
topic_count: { type: Number, default: 0 },
// 用户发表的回复计数
reply_count: { type: Number, default: 0 },
// 用户发表的评论计数
comment_count: { type: Number, default: 0 },
// 用户的好友数组,存放了用户好友的 uid
friend: { type: [Number], default: [] },
// 用户关注的用户
followed: { type: [Number], default: [] },
// 用户的关注者
follower: { type: [Number], default: [] },
// 用户发表的话题 ID,存放了用户发布话题的 tid
topic: { type: [Number], default: [] },
// 用户发表的回复 ID
reply: { type: [Number], default: [] },
// 用户发表的评论 ID
comment: { type: [Number], default: [] },
// 用户点赞的话题 ID
like_topic: { type: [Number], default: [] },
// 用户点踩的话题 ID
dislike_topic: { type: [Number], default: [] },
// 用户推的话题 ID
upvote_topic: { type: [Number], default: [] },
// 用户回复的话题 ID
reply_topic: { type: [Number], default: [] },
},
// 时间戳,自动生成
{ timestamps: { createdAt: 'created', updatedAt: 'updated' } }
)