ADD: added dockerfiles and a logger for the backend

This commit is contained in:
hwinkel
2025-12-15 13:30:41 +01:00
parent 7ec17e1e8b
commit 435ad8e6e6
12 changed files with 183 additions and 19 deletions

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"log"
"studia/internal/config"
"studia/internal/logger"
_ "github.com/lib/pq" // Import the PostgreSQL driver
)
@@ -22,7 +23,7 @@ func New(cfg *config.Config) *sql.DB {
WHERE table_schema = 'public'
`)
if err != nil {
log.Println("failed to query existing tables:", err)
logger.Log.Error().Err(err).Msg("Failed to query existing tables")
}
missing := checkTables(expectedTables, existing)
@@ -32,7 +33,7 @@ func New(cfg *config.Config) *sql.DB {
// Here you would normally run migrations to create the missing tables
// For simplicity, we just log the missing tables
} else {
log.Println("All expected tables are present.")
logger.Log.Info().Msg("All expected tables are present.")
}
return db
@@ -41,7 +42,7 @@ func New(cfg *config.Config) *sql.DB {
func setupDatabase(cfg *config.Config) *sql.DB {
// Database connection setup logic here
log.Println(cfg)
logger.Log.Println(cfg)
switch cfg.DatabaseDriver {
case "postgres":
// Setup Postgres connection

View File

@@ -0,0 +1,46 @@
// internal/logger/logger.go
package logger
import (
"io"
"os"
"time"
"github.com/rs/zerolog"
)
var Log zerolog.Logger
// Init initializes the global logger.
// It configures console output, timestamps, and log level from environment.
func Init() {
// Determine output writer
consoleWriter := zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: time.RFC3339,
}
// You can switch to JSON output by replacing with os.Stdout directly:
// writer := os.Stdout
// Create the global logger
Log = zerolog.New(consoleWriter).
Level(zerolog.TraceLevel).With().Caller().Logger().
With().
Timestamp().
Logger()
// Set log level from environment variable, default to InfoLevel
level := zerolog.InfoLevel
if lvlStr, ok := os.LookupEnv("LOG_LEVEL"); ok {
if parsedLevel, err := zerolog.ParseLevel(lvlStr); err == nil {
level = parsedLevel
}
}
zerolog.SetGlobalLevel(level)
}
// SetOutput allows changing output (e.g., to a file)
func SetOutput(w io.Writer) {
Log = Log.Output(w)
}

View File

@@ -1,12 +1,10 @@
package server
import (
"fmt"
"log"
"os"
"studia/internal/auth"
"studia/internal/config"
"studia/internal/database"
"studia/internal/logger"
"time"
"github.com/gin-contrib/cors"
@@ -21,18 +19,18 @@ func StartServer(cfg *config.Config) {
// 2. CORS-Konfiguration
// Lese die Frontend-URL aus den Umgebungsvariablen
frontendURL := os.Getenv("FRONTEND_URL")
// frontendURL := os.Getenv("FRONTEND_URL")
// Lokaler Fallback (wichtig für die Entwicklung)
allowedOrigins := []string{
"http://localhost:5173", // Gängiger Vite-Dev-Port
}
if frontendURL != "" {
allowedOrigins = append(allowedOrigins, frontendURL)
fmt.Printf("CORS: Erlaubte Produktiv-URL hinzugefügt: %s\n", frontendURL)
if cfg.FrontendURL != "" {
allowedOrigins = append(allowedOrigins, cfg.FrontendURL)
logger.Log.Printf("CORS: Erlaubte Produktiv-URL hinzugefügt: %s\n", cfg.FrontendURL)
} else {
log.Println("ACHTUNG: FRONTEND_URL fehlt in den Umgebungsvariablen. Nur lokale URLs erlaubt.")
logger.Log.Error().Msg("ACHTUNG: FRONTEND_URL fehlt in den Umgebungsvariablen. Nur lokale URLs erlaubt.")
}
// CORS