53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"memora-api/internal/bootstrap"
|
|
"memora-api/internal/handler"
|
|
"memora-api/internal/router"
|
|
"memora-api/internal/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type App struct {
|
|
engine *gin.Engine
|
|
addr string
|
|
}
|
|
|
|
func New(configPath string) (*App, error) {
|
|
cfg, err := bootstrap.LoadConfig(configPath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("加载配置失败: %w", err)
|
|
}
|
|
|
|
db, err := bootstrap.InitDB(cfg)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("连接数据库失败: %w", err)
|
|
}
|
|
|
|
if err := bootstrap.AutoMigrate(db); err != nil {
|
|
return nil, fmt.Errorf("数据库迁移失败: %w", err)
|
|
}
|
|
|
|
wordService := service.NewWordService(db)
|
|
authService := service.NewAuthService(db)
|
|
wordHandler := handler.NewWordHandler(wordService)
|
|
authHandler := handler.NewAuthHandler(authService)
|
|
engine := router.New(wordHandler, authHandler)
|
|
|
|
return &App{
|
|
engine: engine,
|
|
addr: fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port),
|
|
}, nil
|
|
}
|
|
|
|
func (a *App) Run() error {
|
|
return a.engine.Run(a.addr)
|
|
}
|
|
|
|
func (a *App) Addr() string {
|
|
return a.addr
|
|
}
|