feat: add config loader
Docker Build and Push / Build and Push Docker Image (push) Successful in 13m50s
Docker Build and Push / Build and Push Docker Image (push) Successful in 13m50s
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
)
|
||||
|
||||
type Config interface {
|
||||
Addr() string
|
||||
Port() string
|
||||
DatabaseURL() string
|
||||
}
|
||||
type config struct {
|
||||
addr string
|
||||
port string
|
||||
databaseURL string
|
||||
}
|
||||
|
||||
func (c *config) Addr() string {
|
||||
return c.addr
|
||||
}
|
||||
|
||||
func (c *config) Port() string {
|
||||
return c.port
|
||||
}
|
||||
|
||||
func (c *config) DatabaseURL() string {
|
||||
return c.databaseURL
|
||||
}
|
||||
|
||||
func parse() (*config, error) {
|
||||
domain := getenv("ADDRESS", "0.0.0.0")
|
||||
sshPort := getenv("PORT", "8080")
|
||||
databaseURL := getenv("DATABASE_URL", "")
|
||||
|
||||
if databaseURL == "" {
|
||||
return nil, fmt.Errorf("DATABASE_URL environment variable not set")
|
||||
}
|
||||
|
||||
return &config{
|
||||
addr: domain,
|
||||
port: sshPort,
|
||||
databaseURL: databaseURL,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func loadEnvFile() error {
|
||||
if _, err := os.Stat(".env"); err == nil {
|
||||
return godotenv.Load(".env")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getenv(key, def string) string {
|
||||
if v := os.Getenv(key); v != "" {
|
||||
return v
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
func MustLoad() (Config, error) {
|
||||
if err := loadEnvFile(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cfg, err := parse()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
@@ -11,12 +11,12 @@ import (
|
||||
|
||||
type Server struct {
|
||||
addr string
|
||||
port uint16
|
||||
port string
|
||||
repository *repository.Queries
|
||||
jwt *jwt.JWT
|
||||
}
|
||||
|
||||
func New(addr string, port uint16, repository *repository.Queries, jwt *jwt.JWT) *Server {
|
||||
func New(addr string, port string, repository *repository.Queries, jwt *jwt.JWT) *Server {
|
||||
return &Server{
|
||||
addr: addr,
|
||||
port: port,
|
||||
@@ -55,7 +55,7 @@ func router(repository *repository.Queries, jwt *jwt.JWT) *http.ServeMux {
|
||||
func (s *Server) Start() error {
|
||||
r := router(s.repository, s.jwt)
|
||||
hs := &http.Server{
|
||||
Addr: fmt.Sprintf("%s:%d", s.addr, s.port),
|
||||
Addr: fmt.Sprintf("%s:%s", s.addr, s.port),
|
||||
Handler: middleware.Handler(middleware.CORS(r)),
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user