tagliatelle

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

main.go (1675B)


      1 package main
      2 
      3 import (
      4 	"flag"
      5 	"fmt"
      6 	"log"
      7 	"net/http"
      8 	"os"
      9 	"path/filepath"
     10 
     11 	"tagliatelle/internal/app"
     12 )
     13 
     14 func main() {
     15 	// CLI flags
     16 	dataDir := flag.String("d", ".", "Data directory (stores tagliatelle.db and uploads/ subfolder)")
     17 	port := flag.String("p", "8080", "Port to listen on")
     18 	flag.Parse()
     19 
     20 	// Derive paths from -d
     21 	dbPath := filepath.Join(*dataDir, "tagliatelle.db")
     22 	uploadDir := filepath.Join(*dataDir, "uploads")
     23 	serverPort := fmt.Sprintf(":%s", *port)
     24 
     25 	// Create necessary directories
     26 	if err := os.MkdirAll(uploadDir, 0755); err != nil {
     27 		log.Fatalf("Failed to create upload directory: %v", err)
     28 	}
     29 	os.MkdirAll("static", 0755)
     30 
     31 	// Initialize database
     32 	var err error
     33 	app.DB, err = app.InitDatabase(dbPath)
     34 	if err != nil {
     35 		log.Fatalf("Failed to initialize database: %v", err)
     36 	}
     37 	defer app.DB.Close()
     38 
     39 	// Load config from database (gallery size, items per page, aliases, sed rules)
     40 	app.Cfg, err = app.LoadConfig(app.DB)
     41 	if err != nil {
     42 		log.Fatalf("Failed to load config from database: %v", err)
     43 	}
     44 
     45 	// Inject runtime values (not stored in DB)
     46 	app.Cfg.DatabasePath = dbPath
     47 	app.Cfg.UploadDir = uploadDir
     48 	app.Cfg.ServerPort = serverPort
     49 
     50 	// Initialize templates
     51 	app.Tmpl, err = app.InitTemplates()
     52 	if err != nil {
     53 		log.Fatalf("Failed to load templates: %v", err)
     54 	}
     55 
     56 	// Register all routes
     57 	app.RegisterRoutes()
     58 
     59 	// Start server
     60 	log.Printf("Server started at http://localhost%s", app.Cfg.ServerPort)
     61 	log.Printf("Database: %s", app.Cfg.DatabasePath)
     62 	log.Printf("Upload directory: %s", app.Cfg.UploadDir)
     63 
     64 	if err := http.ListenAndServe(app.Cfg.ServerPort, nil); err != nil {
     65 		log.Fatalf("Server failed to start: %v", err)
     66 	}
     67 }