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 }