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" "github.com/jackc/pgx/v5/stdlib" migrate "github.com/rubenv/sql-migrate" ) const ( envfile = "../develop.env" migrationfile = "../internal/storage/migrate" ) func main() { log.Print("started") config := domain.InitConfig(envfile) 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 connString := fmt.Sprintf( "postgresql://%s:%s@%s:%s/%s", conf.DB.User, conf.DB.Pass, conf.DB.Host, conf.DB.Port, conf.DB.Name, ) conn, err := pgxpool.New( ctx, connString) if err != nil { log.Fatalf("DB connection failed: %v", err) } // -- DB connection init -- END // Aply migrations: dbConnConfig, err := pgxpool.ParseConfig(connString) if err != nil { log.Fatalf("unable to parse connString: %v", err) } migrations := &migrate.FileMigrationSource{ Dir: migrationfile, } db := stdlib.OpenDB(*dbConnConfig.ConnConfig) const dialect = "postgres" n, err := migrate.Exec(db, dialect, migrations, migrate.Up) if err != nil { log.Fatalf("unable to handle migrations: %v", err) } fmt.Printf("Applied %d migrations!\n", n) // 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, Config: &conf, } if err := discord.Run(conf, opts); err != nil { log.Fatalf("discord bot cannot be runned: %v", err) } }() opts := telegram.TelegramOptions{ GitService: gitService, CloudService: cloudService, Coda: codaService, AppConfig: &conf, Controller: controller, } if err := telegram.Run(ctx, opts); err != nil { log.Fatalf("telegram bot cannot be runned: %v", err) defer os.Exit(1) } }