first commit
This commit is contained in:
346
doc/db.dbml
Normal file
346
doc/db.dbml
Normal file
@@ -0,0 +1,346 @@
|
||||
Project Management {
|
||||
database_type: 'Postgresql'
|
||||
Note: '''
|
||||
# Management Database
|
||||
'''
|
||||
}
|
||||
|
||||
Table "sys_user" {
|
||||
"id" SERIAL [not null, increment]
|
||||
"uuid" uuid [not null]
|
||||
"email" VARCHAR(100) [not null, note: '邮箱地址']
|
||||
"username" VARCHAR(100) [not null, note: '用户名称']
|
||||
"hashed_password" bytea [not null, note: '加密密码']
|
||||
"salt" VARCHAR(20) [not null, note: '密码盐值']
|
||||
"avatar" VARCHAR(200) [not null, note: '头像']
|
||||
"gender" INT [not null, default: 0, note: '性别']
|
||||
"department_id" INT [not null, default: 0, note: '部门']
|
||||
"role_id" INT [not null, default: 0, note: '角色']
|
||||
"status" INT [not null, default: 0, note: '状态']
|
||||
"change_password_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '密码修改时间']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
uuid [unique]
|
||||
username [unique]
|
||||
email [unique]
|
||||
status
|
||||
}
|
||||
}
|
||||
|
||||
Table "sys_user_login_log" {
|
||||
"id" BIGSERIAL [not null, increment]
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"email" VARCHAR(100) [not null, note: '邮箱地址']
|
||||
"username" VARCHAR(100) [not null, note: '用户名称']
|
||||
"user_uuid" uuid [not null, note: '用户uuid']
|
||||
"is_success" Boolean [not null, note: '是否登陆成功']
|
||||
"message" VARCHAR(300) [not null, note: '登陆消息']
|
||||
"referer_url" VARCHAR(500) [not null, note: '上一个链接']
|
||||
"url" VARCHAR(500) [not null, note: '链接']
|
||||
"os" VARCHAR(50) [not null, note: '系统']
|
||||
"ip" VARCHAR(20) [not null, note: 'ip']
|
||||
"browser" VARCHAR(100) [not null, note: '浏览器']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
created_at
|
||||
email
|
||||
username
|
||||
}
|
||||
}
|
||||
|
||||
Table "sys_audit_log" {
|
||||
"id" BIGSERIAL [not null, increment]
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"email" VARCHAR(100) [not null, note: '邮箱地址']
|
||||
"username" VARCHAR(100) [not null, note: '用户名称']
|
||||
"user_uuid" uuid [not null, note: '用户uuid']
|
||||
"start_at" TIMESTAMPTZ [not null, note: '请求开始时间']
|
||||
"end_at" TIMESTAMPTZ [not null, note: '请求结束时间']
|
||||
"duration" VARCHAR(10) [not null, note: '请求总时间']
|
||||
"url" VARCHAR(500) [not null, note: '请求链接']
|
||||
"method" VARCHAR(50) [not null, note: '请求类型']
|
||||
"parameters" VARCHAR [not null, note: '请求参数']
|
||||
"referer_url" VARCHAR(500) [not null, note: '上一个链接']
|
||||
"os" VARCHAR(50) [not null, note: '系统']
|
||||
"ip" VARCHAR(20) [not null, note: 'ip']
|
||||
"browser" VARCHAR(100) [not null, note: '浏览器']
|
||||
"remark" VARCHAR(300) [not null, note: '备注']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
created_at
|
||||
email
|
||||
username
|
||||
}
|
||||
}
|
||||
|
||||
Table "sessions" {
|
||||
"token" TEXT [not null, note: 'token']
|
||||
"data" BYTEA [not null, note: 'data']
|
||||
"expiry" TIMESTAMPTZ [not null, note: 'expiry']
|
||||
|
||||
Indexes {
|
||||
token [pk]
|
||||
expiry
|
||||
}
|
||||
}
|
||||
|
||||
Table "sys_department" {
|
||||
"id" SERIAL [not null, increment]
|
||||
"name" VARCHAR(200) [not null, note: '部门名称']
|
||||
"parent_id" INT [not null, note: '上级id']
|
||||
"parent_path" VARCHAR(500) [not null, note: '树路径']
|
||||
"status" INT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
name [unique]
|
||||
status
|
||||
}
|
||||
}
|
||||
|
||||
Table "sys_role" {
|
||||
"id" SERIAL [not null, increment]
|
||||
"name" VARCHAR(200) [not null, note: '名称']
|
||||
"display_name" VARCHAR(200) [not null, note: '显示名称']
|
||||
"parent_id" INT [not null, note: '上级id']
|
||||
"parent_path" VARCHAR(500) [not null, note: '树路径']
|
||||
"vip" Boolean [not null, note: '是否vip']
|
||||
"status" INT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
name [unique]
|
||||
display_name [unique]
|
||||
status
|
||||
}
|
||||
}
|
||||
|
||||
Table "sys_menu" {
|
||||
"id" SERIAL [not null, increment]
|
||||
"name" VARCHAR(200) [not null, note: '名称']
|
||||
"display_name" VARCHAR(200) [not null, note: '显示名称']
|
||||
"url" VARCHAR(200) [not null, note: '菜单url']
|
||||
"type" VARCHAR(50) [not null, note: '菜单类型(node, menu, btn)']
|
||||
"parent_id" INT [not null, note: '上级id']
|
||||
"parent_path" VARCHAR(500) [not null, note: '树路径']
|
||||
"avatar" VARCHAR(100) [not null, note: '菜单图标']
|
||||
"style" VARCHAR(100) [not null, note: '菜单样式']
|
||||
"visible" Boolean [not null, note: '是否可见']
|
||||
"is_list" Boolean [not null, note: '是否列表']
|
||||
"status" INT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
url [unique]
|
||||
type
|
||||
parent_id
|
||||
status
|
||||
}
|
||||
}
|
||||
|
||||
Table "sys_role_menu" {
|
||||
"role_id" INT [not null, note: '角色id']
|
||||
"menu_id" INT [not null, note: '菜单id']
|
||||
|
||||
Indexes {
|
||||
role_id menu_id [pk]
|
||||
}
|
||||
}
|
||||
|
||||
Table "sys_config" {
|
||||
"id" SERIAL [not null, increment]
|
||||
"key" VARCHAR(100) [not null, note: '存储键']
|
||||
"value" jsonb [not null, note: '存储值']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
key [unique]
|
||||
}
|
||||
}
|
||||
|
||||
Table "categories" {
|
||||
"id" SERIAL [not null, increment, note: 'ID']
|
||||
"name" VARCHAR(100) [not null, note: '名称']
|
||||
"icon" VARCHAR(300) [not null, default: '', note: '图标']
|
||||
"description" VARCHAR(500) [not null, default: '', note: '描述']
|
||||
"letter" VARCHAR(100) [not null, default: '', note: '拼音']
|
||||
"parent_id" INT [not null, default: 0, note: '父级ID']
|
||||
"parent_path" VARCHAR(500) [not null, default: '', note: '树路径']
|
||||
"status" SMALLINT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
name
|
||||
letter [unique]
|
||||
}
|
||||
}
|
||||
|
||||
Table "customers" {
|
||||
"id" BIGINT [not null, note: 'ID']
|
||||
"name" VARCHAR(100) [not null, note: '名称']
|
||||
"category" INT [not null, default: 0, note: '类别']
|
||||
"source" INT [not null, default: 0, note: '来源']
|
||||
"address" VARCHAR(500) [not null, default: '', note: '地址']
|
||||
"contact_name" VARCHAR(100) [not null, default: '', note: '主要联系人']
|
||||
"contact_phone" VARCHAR(50) [not null, default: '', note: '主要联系人手机']
|
||||
"status" SMALLINT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"created_by" INT [not null, default: 0, note: '创建人']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
"updated_by" INT [not null, default: 0, note: '更新人']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
name
|
||||
}
|
||||
}
|
||||
|
||||
Table "customer_contact" {
|
||||
"id" SERIAL [not null, increment, note: 'ID']
|
||||
"name" VARCHAR(100) [not null, note: '名称']
|
||||
"telephone" VARCHAR(50) [not null, note: '联系方式']
|
||||
"customer_id" BIGINT [not null, note: '客户ID']
|
||||
"status" SMALLINT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"created_by" INT [not null, default: 0, note: '创建人']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
"updated_by" INT [not null, default: 0, note: '更新人']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
name
|
||||
telephone
|
||||
}
|
||||
}
|
||||
|
||||
Table "projects" {
|
||||
"id" BIGINT [not null, note: 'ID']
|
||||
"name" VARCHAR(100) [not null, note: '名称']
|
||||
"start_at" TIMESTAMPTZ [not null, note: '开始时间']
|
||||
"end_at" TIMESTAMPTZ [not null, note: '结束时间']
|
||||
"customer_id" BIGINT [not null, note: '客户ID']
|
||||
"total_money" DECIMAL(10, 2) [not null, default: 0, note: '总金额']
|
||||
"description" VARCHAR(500) [not null, default: '', note: '简介']
|
||||
"apply_at" TIMESTAMPTZ [not null, note: '申请时间']
|
||||
"apply_user_id" INT [not null, note: '申请人']
|
||||
"manager_id" INT [not null, note: '项目经理']
|
||||
"members" VARCHAR(1000) [not null, note: '项目成员']
|
||||
"status" SMALLINT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"created_user_id" INT [not null, default: 0, note: '创建人']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
"updated_user_id" INT [not null, default: 0, note: '更新人']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
name
|
||||
}
|
||||
}
|
||||
|
||||
Table "project_files" {
|
||||
"id" BIGINT [not null, note: 'ID']
|
||||
"name" VARCHAR(100) [not null, note: '名称']
|
||||
"path" VARCHAR(500) [not null, note: '路径']
|
||||
"project_id" BIGINT [not null, note: '项目ID']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"created_user_id" INT [not null, default: 0, note: '创建人']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
name
|
||||
}
|
||||
}
|
||||
|
||||
Table "budgets" {
|
||||
"id" BIGSERIAL [not null, note: 'ID']
|
||||
"project_id" BIGINT [not null, note: '项目ID']
|
||||
"name" VARCHAR(100) [not null, note: '名称']
|
||||
"budget_type" INT [not null, note: '预算类型: 收入/支出']
|
||||
"category" INT [not null, note: '类别']
|
||||
"start_at" TIMESTAMPTZ [not null, note: '开始时间']
|
||||
"end_at" TIMESTAMPTZ [not null, note: '结束时间']
|
||||
"amount" DECIMAL(10, 2) [not null, default: 0, note: '预算金额']
|
||||
"used_amount" DECIMAL(10, 2) [not null, default: 0, note: '已使用金额']
|
||||
"remaining_amount" DECIMAL(10, 2) [not null, default: 0, note: '剩余金额']
|
||||
"remark" VARCHAR(500) [not null, default: '', note: '备注']
|
||||
"status" SMALLINT [not null, default: 0, note: '状态']
|
||||
"sort" INT [not null, default: 0, note: '排序']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"created_user_id" INT [not null, default: 0, note: '创建人']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
"updated_user_id" INT [not null, default: 0, note: '更新人']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
project_id
|
||||
category
|
||||
}
|
||||
}
|
||||
|
||||
Table "incomes" {
|
||||
"id" BIGSERIAL [not null, note: 'ID']
|
||||
"project_id" BIGINT [not null, note: '项目ID']
|
||||
"budget_id" BIGINT [not null, default: 0, note: '预算ID']
|
||||
"amount" DECIMAL(10, 2) [not null, default: 0, note: '收入金额']
|
||||
"income_at" TIMESTAMPTZ [not null, note: '收入时间']
|
||||
"income_type" INT [not null, note: '收入类型']
|
||||
"income_bank" INT [not null, note: '收入银行']
|
||||
"remark" VARCHAR(500) [not null, default: '', note: '备注']
|
||||
"status" SMALLINT [not null, default: 0, note: '状态']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"created_user_id" INT [not null, default: 0, note: '创建人']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
"updated_user_id" INT [not null, default: 0, note: '更新人']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
project_id
|
||||
budget_id
|
||||
income_type
|
||||
}
|
||||
}
|
||||
|
||||
Table "expenses" {
|
||||
"id" BIGSERIAL [not null, note: 'ID']
|
||||
"project_id" BIGINT [not null, note: '项目ID']
|
||||
"budget_id" BIGINT [not null, default: 0, note: '预算ID']
|
||||
"amount" DECIMAL(10, 2) [not null, default: 0, note: '支出金额']
|
||||
"expenses_at" TIMESTAMPTZ [not null, note: '支出时间']
|
||||
"expenses_type" INT [not null, note: '支出类型']
|
||||
"remark" VARCHAR(500) [not null, default: '', note: '备注']
|
||||
"status" SMALLINT [not null, default: 0, note: '状态']
|
||||
"created_at" TIMESTAMPTZ [not null, default: `NOW()`, note: '创建时间']
|
||||
"created_user_id" INT [not null, default: 0, note: '创建人']
|
||||
"updated_at" TIMESTAMPTZ [not null, default: `'0001-01-01 00:00:00+8'`, note: '更新时间']
|
||||
"updated_user_id" INT [not null, default: 0, note: '更新人']
|
||||
|
||||
Indexes {
|
||||
id [pk]
|
||||
project_id
|
||||
budget_id
|
||||
expenses_type
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user