87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
|
|
"resume-platform/internal/handler"
|
|
"resume-platform/internal/router"
|
|
"resume-platform/internal/security"
|
|
"resume-platform/pkg/config"
|
|
"resume-platform/pkg/logger"
|
|
)
|
|
|
|
func Run(ctx context.Context) error {
|
|
cfg, err := config.LoadConfig()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to load config: %w", err)
|
|
}
|
|
|
|
if err := initLogger(cfg); err != nil {
|
|
return fmt.Errorf("failed to initialize logger: %w", err)
|
|
}
|
|
|
|
if err := initDataDir(); err != nil {
|
|
return fmt.Errorf("failed to initialize data directory: %w", err)
|
|
}
|
|
|
|
logger.Infof("Configuration loaded - AdminPath: %s, Mode: %s", cfg.Auth.AdminPath, cfg.Server.Mode)
|
|
|
|
container, err := NewServiceContainer(cfg)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to initialize service container: %w", err)
|
|
}
|
|
|
|
handler.SetResumeRepository(container.Repo)
|
|
handler.LoadTokens()
|
|
|
|
if err := initSecurity(cfg); err != nil {
|
|
return fmt.Errorf("failed to initialize security: %w", err)
|
|
}
|
|
|
|
if err := container.InitResumeAgent(ctx, cfg); err != nil {
|
|
logger.Warnf("Failed to initialize Resume Agent: %v", err)
|
|
}
|
|
|
|
if err := startServer(ctx, cfg, container); err != nil {
|
|
return fmt.Errorf("failed to start server: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func initLogger(cfg *config.Config) error {
|
|
return logger.Init(logger.Config{
|
|
Level: cfg.Log.Level,
|
|
Output: cfg.Log.Output,
|
|
})
|
|
}
|
|
|
|
func initDataDir() error {
|
|
return os.MkdirAll("./data", 0755)
|
|
}
|
|
|
|
func initSecurity(cfg *config.Config) error {
|
|
security.InitCaptcha(160, 50)
|
|
return nil
|
|
}
|
|
|
|
func startServer(ctx context.Context, cfg *config.Config, container *ServiceContainer) error {
|
|
r := router.NewRouter(
|
|
container.ResumeHandler,
|
|
container.AdminHandler,
|
|
container.AIHandler,
|
|
container.DocumentHandler,
|
|
container.ChatHandler,
|
|
container.IMHandler,
|
|
container.KnowledgeHandler,
|
|
cfg,
|
|
)
|
|
engine := r.Setup()
|
|
|
|
addr := fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port)
|
|
logger.Infof("Server starting on %s", addr)
|
|
|
|
return engine.Run(addr)
|
|
} |