Files
gitpm/internal/models/database.go
huxunan 885fad6c64 Initial commit: Gitea Project Management System
Features:
- Complete project management system with Epic/Story/Task hierarchy
- Vue.js 3 + Element Plus frontend with kanban board
- Go backend with Gin framework and GORM
- OAuth2 integration with Gitea
- Docker containerization with MySQL
- RESTful API for project, task, and user management
- JWT authentication and authorization
- Responsive web interface with dashboard
2025-09-22 14:53:53 +08:00

60 lines
1.1 KiB
Go

package models
import (
"fmt"
"time"
"giteapm/config"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var DB *gorm.DB
func InitDB(cfg config.DatabaseConfig) (*gorm.DB, error) {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
cfg.Username, cfg.Password, cfg.Host, cfg.Port, cfg.Database, cfg.Charset)
var err error
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
return nil, fmt.Errorf("连接数据库失败: %v", err)
}
sqlDB, err := DB.DB()
if err != nil {
return nil, fmt.Errorf("获取底层数据库连接失败: %v", err)
}
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
if err := autoMigrate(); err != nil {
return nil, fmt.Errorf("数据库迁移失败: %v", err)
}
return DB, nil
}
func autoMigrate() error {
return DB.AutoMigrate(
&User{},
&Project{},
&ProjectMember{},
&Epic{},
&Story{},
&Task{},
&GiteaRelation{},
&Sprint{},
&Comment{},
&Tag{},
&EntityTag{},
&TimeLog{},
&WebhookConfig{},
)
}