You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
59 lines
1.2 KiB
// Code scaffolded by goctl. Safe to edit.
|
|
// goctl 1.9.2
|
|
|
|
package svc
|
|
|
|
import (
|
|
"github.com/youruser/base/internal/config"
|
|
"github.com/youruser/base/internal/middleware"
|
|
"github.com/youruser/base/model"
|
|
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/zeromicro/go-zero/rest"
|
|
)
|
|
|
|
type ServiceContext struct {
|
|
Config config.Config
|
|
Cors rest.Middleware
|
|
Log rest.Middleware
|
|
Auth rest.Middleware
|
|
// 数据库连接
|
|
DB *gorm.DB
|
|
}
|
|
|
|
func NewServiceContext(c config.Config) *ServiceContext {
|
|
// 创建数据库连接
|
|
dsn := c.MySQL.DSN
|
|
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
panic("Failed to connect database: " + err.Error())
|
|
}
|
|
|
|
// 自动迁移表
|
|
err = db.AutoMigrate(&model.User{}, &model.Profile{})
|
|
if err != nil {
|
|
panic("Failed to migrate database: " + err.Error())
|
|
}
|
|
|
|
return &ServiceContext{
|
|
Config: c,
|
|
Cors: middleware.NewCorsMiddleware().Handle,
|
|
Log: middleware.NewLogMiddleware().Handle,
|
|
Auth: middleware.NewAuthMiddleware().Handle,
|
|
DB: db,
|
|
}
|
|
}
|
|
|
|
// Close 关闭资源
|
|
func (s *ServiceContext) Close() error {
|
|
if s.DB != nil {
|
|
sqlDB, err := s.DB.DB()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return sqlDB.Close()
|
|
}
|
|
return nil
|
|
}
|
|
|