package main import ( "context" "fmt" "log" "os" "os/signal" "syscall" "ticket-pimp/internal/controller" "ticket-pimp/internal/domain" "ticket-pimp/internal/services" "ticket-pimp/client/discord" "ticket-pimp/client/telegram" "github.com/jackc/pgx/v5/pgxpool" ) func main() { log.Print("started") config := domain.InitConfig("develop.env") run(config) } func run(conf domain.Config) { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill, syscall.SIGTERM) defer cancel() // -- DB connection init -- START conn, err := pgxpool.New( ctx, fmt.Sprintf( "postgresql://%s:%s@%s:%s/%s", conf.DB.User, conf.DB.Pass, conf.DB.Host, conf.DB.Port, conf.DB.Name, )) if err != nil { log.Fatalf("DB connection failed: %v", err) } // -- DB connection init -- END gitService := services.NewGit(conf.Git) cloudService := services.NewCloud(conf.Cloud) codaService := services.NewCodaClient(conf.Coda) // Инициализация контроллера: controller := controller.NewWorkflowController( gitService, cloudService, codaService, conn, ) go func() { opts := discord.DiscordOptions{ Controller: controller, AppConfig: &conf, } if err := discord.Run(conf, opts); err != nil { log.Fatalf("discord bot cannot be runned: %v", err) } }() opts := telegram.TelegramOptions{ // TicketsRepo: db, GitService: gitService, CloudService: cloudService, Coda: codaService, AppConfig: &conf, } if err := telegram.Run(ctx, opts); err != nil { log.Fatalf("telegram bot cannot be runned: %v", err) defer os.Exit(1) } }