cleanup file structure, dockerize app

This commit is contained in:
KS Jannette
2026-05-19 03:37:56 -04:00
parent 4042ba87f5
commit 8cfde57cab
18 changed files with 262 additions and 98 deletions

View File

@@ -1,29 +1,22 @@
package config
package os
import (
"github.com/pkg/errors"
"context"
stdlib "os"
"os/signal"
"syscall"
"github.com/kelseyhightower/envconfig"
"go.uber.org/zap"
)
// Config represents the application configuration.
type Config struct {
API struct {
Port int `envconfig:"API_PORT" default:"3000"`
ReadTimeout int `envconfig:"API_READ_TIMEOUT" default:"7"`
WriteTimeout int `envconfig:"API_WRITE_TIMEOUT" default:"5"`
IdleTimeout int `envconfig:"API_IDLE_TIMEOUT" default:"5"`
Timeout int `envconfig:"API_TIMEOUT" default:"5"`
}
}
// NewConfig creates a new initialised application Config.
func NewConfig() (*Config, error) {
var config Config
if err := envconfig.Process("", &config); err != nil {
return nil, errors.Wrap(err, "error parsing config")
}
return &config, nil
// SignalListener listens for SIGINT and SIGTERM and cancels the root context.
func SignalListener(logger *zap.Logger, cancel context.CancelFunc) {
sigCh := make(chan stdlib.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
go func() {
sig := <-sigCh
logger.Info("received shutdown signal", zap.String("signal", sig.String()))
cancel()
}()
}