A temporary email service written in Go.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
780 B

  1. package database
  2. import (
  3. "database/sql"
  4. "errors"
  5. "fmt"
  6. "os"
  7. _ "github.com/go-sql-driver/mysql"
  8. )
  9. type (
  10. DB struct {
  11. *sql.DB
  12. }
  13. Tx struct {
  14. *sql.Tx
  15. }
  16. )
  17. func Open() (*DB, error) {
  18. // Get database configuration
  19. dbUser := os.Getenv("DB_USER")
  20. dbPassword := os.Getenv("DB_PASSWORD")
  21. dbName := os.Getenv("DB_DB")
  22. dbHost := os.Getenv("DB_HOST")
  23. if dbUser == "" || dbPassword == "" {
  24. return nil, errors.New("Database user or password not set.")
  25. }
  26. if dbHost == "" {
  27. dbHost = "localhost"
  28. }
  29. if dbName == "" {
  30. dbName = "burnermail"
  31. }
  32. db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?charset=utf8mb4&parseTime=true", dbUser, dbPassword, dbHost, dbName))
  33. if err != nil {
  34. return nil, err
  35. }
  36. db.SetMaxOpenConns(250)
  37. return &DB{db}, nil
  38. }