package svc import ( "database/sql" "log" "git.cialloo.com/CiallooWeb/ServerStatistics/app/internal/config" _ "github.com/lib/pq" // PostgreSQL driver ) type ServiceContext struct { Config config.Config DB *sql.DB } func NewServiceContext(c config.Config) *ServiceContext { // Initialize database connection db, err := sql.Open("postgres", c.Database.DSN) if err != nil { log.Fatalf("Failed to connect to database: %v", err) } // Test the connection if err := db.Ping(); err != nil { log.Fatalf("Failed to ping database: %v", err) } log.Println("Database connection established successfully") // Create tables if they don't exist if err := createTables(db); err != nil { log.Fatalf("Failed to create tables: %v", err) } return &ServiceContext{ Config: c, DB: db, } } func createTables(db *sql.DB) error { // Create server table serverTableQuery := ` CREATE TABLE IF NOT EXISTS server ( id SERIAL PRIMARY KEY, name VARCHAR(64) NOT NULL, ip VARCHAR(64) NOT NULL, port INTEGER NOT NULL, category VARCHAR(64) NOT NULL, bot_count INTEGER NOT NULL, human_count INTEGER NOT NULL, mapname VARCHAR(64) NOT NULL, last_update TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE (ip, port) );` if _, err := db.Exec(serverTableQuery); err != nil { return err } log.Println("Database tables created successfully") return nil }