v2.0: 3-Raum-System - Hauptraum, Saal A, Saal B mit 18 Tischen, Raum-Buchungen, API-Doku
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"reservation-system/backend/internal/api"
|
||||
"reservation-system/backend/internal/auth"
|
||||
"reservation-system/backend/internal/db"
|
||||
"reservation-system/backend/internal/email"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Initialize JWT
|
||||
jwtSecret := os.Getenv("JWT_SECRET")
|
||||
if jwtSecret == "" {
|
||||
jwtSecret = "your-secret-key-change-in-production"
|
||||
}
|
||||
auth.InitJWTSecret(jwtSecret)
|
||||
|
||||
// Initialize database
|
||||
dbPath := os.Getenv("DB_PATH")
|
||||
if dbPath == "" {
|
||||
dbPath = "/data/reservations.db"
|
||||
}
|
||||
|
||||
database, err := db.New(dbPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to initialize database: %v", err)
|
||||
}
|
||||
defer database.Close()
|
||||
|
||||
// Create default admin user if none exists
|
||||
createDefaultUser(database)
|
||||
|
||||
// Start email processor
|
||||
emailProcessor := email.NewEmailProcessor(database)
|
||||
emailProcessor.Start()
|
||||
defer emailProcessor.Stop()
|
||||
|
||||
// Setup API handlers
|
||||
handler := api.NewHandler(database)
|
||||
mux := http.NewServeMux()
|
||||
handler.RegisterRoutes(mux)
|
||||
|
||||
// Static files
|
||||
fs := http.FileServer(http.Dir("/app/frontend"))
|
||||
mux.Handle("/", fs)
|
||||
|
||||
// Start server
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "8080"
|
||||
}
|
||||
|
||||
log.Printf("Server starting on port %s", port)
|
||||
if err := http.ListenAndServe(":"+port, corsMiddleware(mux)); err != nil {
|
||||
log.Fatalf("Server failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func createDefaultUser(database *db.DB) {
|
||||
adminUser, _ := database.GetUserByUsername("admin")
|
||||
if adminUser == nil {
|
||||
hashedPassword, _ := bcrypt.GenerateFromPassword([]byte("admin"), bcrypt.DefaultCost)
|
||||
user := &db.models.User{
|
||||
Username: "admin",
|
||||
Password: string(hashedPassword),
|
||||
IsAdmin: true,
|
||||
}
|
||||
if err := database.CreateUser(user); err != nil {
|
||||
log.Printf("Failed to create default user: %v", err)
|
||||
} else {
|
||||
log.Println("Created default admin user (admin/admin)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func corsMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
|
||||
|
||||
if r.Method == "OPTIONS" {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
return
|
||||
}
|
||||
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user