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) wordHandler := handler.NewWordHandler(wordService) engine := router.New(wordHandler) 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 }