package main import ( "database/sql" "flag" "html/template" "log/slog" "net/http" "os" // _ "github.com/go-sql-driver/mysql" "github.com/defencedigital/ded-web/internal/models" // _ "github.com/lib/pq" ) type application struct { logger *slog.Logger operations *models.OperationModel organisations *models.OrganisationModel persons *models.PersonModel engagementStrategies *models.EngagementStrategyModel templateCache map[string]*template.Template } func main() { addr := flag.String("addr", ":4000", "HTTP network port") // This uses "ded-db" in the connection string; this should be the name of the container running postgres. // If not running this app inside a container, use "localhost". //dsn := flag.String("dsn", "postgresql://postgres:secret@ded-db?sslmode=disable", "PostgreSQL data source name") flag.Parse() logger := slog.New(slog.NewTextHandler(os.Stdout, nil)) // Database connection //db, err := openDB(*dsn) //if err != nil { // logger.Error(err.Error()) // os.Exit(1) //} // //defer db.Close() // initialise the new template cache... templateCache, err := newTemplateCache() if err != nil { logger.Error(err.Error()) os.Exit(1) } app := &application{ logger: logger, //operations: &models.OperationModel{DB: db}, //organisations: &models.OrganisationModel{DB: db}, //persons: &models.PersonModel{DB: db}, //engagementStrategies: &models.EngagementStrategyModel{DB: db}, templateCache: templateCache, } // mux := http.NewServeMux() // mux.HandleFunc("/", home) // log.Print("starting server on :4000") logger.Info("starting server", "addr", *addr) err = http.ListenAndServe(*addr, app.routes()) logger.Error(err.Error()) os.Exit(1) } // openDB wraps sql.Open() and returns a sql.DB connection pool // for a given DSN. func openDB(dsn string) (*sql.DB, error) { db, err := sql.Open("postgres", dsn) if err != nil { return nil, err } err = db.Ping() if err != nil { db.Close() return nil, err } return db, nil }