Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion backend/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
.env
.env
progress_wall.db
4 changes: 3 additions & 1 deletion backend/README_dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ backend/
├── controllers/ # 控制器层
│ └── ...
├── database/ # 数据库连接
│ └── database.go
| |- seed.go # 初始权限组设定
| |- migrate.go # 数据库迁移(自动建表)
│ └── database.go # 数据库连接
├── middleware/ # 中间件
│ └── ...
├── models/ # 数据模型
Expand Down
53 changes: 53 additions & 0 deletions backend/database/database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package database

import (
"fmt"
"log"
"progress-wall-backend/config"

"gorm.io/driver/mysql"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)

// InitDB 初始化数据库连接
func InitDB(cfg *config.Config) (*gorm.DB, error) {
var db *gorm.DB
var err error

// 配置GORM日志
dbConfig := &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
}

switch cfg.DB.Type {
case "mysql":
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
cfg.DB.User, cfg.DB.Password, cfg.DB.Host, cfg.DB.Port, cfg.DB.Name)
db, err = gorm.Open(mysql.Open(dsn), dbConfig)
if err != nil {
return nil, fmt.Errorf("MySQL数据库连接失败: %w", err)
}
case "sqlite":
db, err = gorm.Open(sqlite.Open(cfg.DB.Name+".db"), dbConfig)
if err != nil {
return nil, fmt.Errorf("SQLite数据库连接失败: %w", err)
}
default:
return nil, fmt.Errorf("不支持的数据库类型: %s", cfg.DB.Type)
}

// 配置连接池
sqlDB, err := db.DB()
if err != nil {
return nil, fmt.Errorf("获取数据库连接实例失败: %w", err)
}

// 设置连接池参数
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)

log.Printf("数据库连接成功: %s", cfg.DB.Type)
return db, nil
}
44 changes: 44 additions & 0 deletions backend/database/migrate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package database

import (
"log"
"progress-wall-backend/models"

"gorm.io/gorm"
)

// Migrate 执行数据库迁移
func Migrate(db *gorm.DB) error {
log.Println("开始执行数据库迁移...")

// 迁移所有模型
err := db.AutoMigrate(
// 用户和权限相关
&models.User{},
&models.UserPermission{},
&models.UserPermissionGroup{},
&models.UserPermissionGroupUser{},
&models.UserPermissionGroup{},

// 项目和看板相关
&models.Project{},
&models.ProjectMember{},
&models.Board{},

// 任务相关
&models.Column{},
&models.Task{},
&models.Comment{},
&models.Attachment{},
&models.Label{},
&models.TaskLabel{},
)

if err != nil {
log.Printf("数据库迁移失败: %v", err)
return err
}

log.Println("数据库迁移完成")
return nil
}
90 changes: 90 additions & 0 deletions backend/database/seed.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package database

import (
"fmt"
"log"
"progress-wall-backend/models"

"gorm.io/gorm"
)

// Seed 初始化基础数据
func Seed(db *gorm.DB) error {
log.Println("开始初始化基础数据...")

// 创建默认用户
if err := createDefaultUsers(db); err != nil {
return err
}

// 创建默认权限
if err := createDefaultPermissions(db); err != nil {
return err
}

log.Println("基础数据初始化完成")
return nil
}

// createDefaultUsers 创建默认用户
// 该函数负责在系统初始化时创建默认的管理员用户和普通用户
// 参数: db - 数据库连接实例
// 返回: error - 如果创建失败则返回错误,否则返回nil
func createDefaultUsers(db *gorm.DB) error {
// 检查是否已存在默认用户
var count int64
db.Model(&models.User{}).Count(&count)
if count > 0 {
log.Println("用户表不为空,跳过默认用户创建")
return nil
}

// 创建默认管理员用户
adminUser := models.User{
ID: 1,
Username: "admin",
Email: "admin@example.com",
Password: "admin123", // TODO: 等待JWT完成后替换为加密密码
Nickname: "系统管理员",
Status: models.UserStatusEnabled,
}

if err := db.Create(&adminUser).Error; err != nil {
return fmt.Errorf("创建默认管理员用户失败: %w", err)
}

// 创建默认普通用户
guestUser := models.User{
ID: 2,
Username: "guest",
Email: "guest@example.com",
Password: "guest123", // TODO: 等待JWT完成后替换为加密密码
Nickname: "访客用户",
Status: models.UserStatusEnabled,
}

if err := db.Create(&guestUser).Error; err != nil {
return fmt.Errorf("创建默认访客用户失败: %w", err)
}

log.Println("默认用户创建成功: admin, guest")
return nil
}

// createDefaultPermissions 创建默认权限组
// 该函数负责在系统初始化时创建默认的权限组,包括管理员权限组和访客权限组
// 参数: db - 数据库连接实例
// 返回: error - 如果创建失败则返回错误,否则返回nil
func createDefaultPermissions(db *gorm.DB) error {
adminPermissionGroup := models.UserPermissionGroup{
GroupName: "admin",
PermissionStrings: "*",
}
db.Create(&adminPermissionGroup)
guestPermissionGroup := models.UserPermissionGroup{
GroupName: "guest",
PermissionStrings: "users.list;users.detail",
}
db.Create(&guestPermissionGroup)
return nil
}
Loading