Files

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)
}