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 }