tagliatelle

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

main.go (1707B)


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