// main package main import ( "flag" "fmt" "log" "net/http" "officeHours/config" "officeHours/controllers" "officeHours/repositories" "officeHours/sqldb" "officeHours/templating" "os" ) func main() { configFile := flag.String( "config", "config/config.json", "File path to the configuration file") flag.Parse() if *configFile == "" { flag.Usage() os.Exit(1) } var conf config.Config err := config.ReadConfigFile(*configFile, &conf) if err != nil { log.Fatalf("%s: %s", "Reading JSON config file into config structure", err) } // serve static files staticHandler := http.FileServer(http.Dir("./static")) // parse templates if err = templating.InitTemplates(); err != nil { log.Fatal(err.Error()) } // database connection db, err := sqldb.Connect(conf) if err != nil { log.Fatal(err.Error()) } // Create repos roomRepo := repositories.NewRoomRepo(db) courseRepo := repositories.NewCourseRepo(db) tutorRepo := repositories.NewTutorRepo(db) officeHourRepo := repositories.NewOfficeHourRepo(db, roomRepo, tutorRepo, courseRepo, conf) requestRepo := repositories.NewRequestRepo(db, officeHourRepo, conf) h := controllers.NewBaseHandler(roomRepo, officeHourRepo, courseRepo, tutorRepo, requestRepo, conf) http.HandleFunc("/getByRoom", h.GetByRoomHandler) http.HandleFunc("/getByCourse", h.GetByCourseHandler) http.HandleFunc("/addOfficeHour", h.AddOfficeHourHandler) http.HandleFunc("/confirmRequest", h.ConfirmRequestHandler) http.HandleFunc("/deleteOfficeHour", h.DeleteOfficeHourHandler) http.HandleFunc("/", h.RootHandler) http.Handle("/static/", http.StripPrefix("/static/", staticHandler)) err = http.ListenAndServe(fmt.Sprintf("%s:%d", conf.Server.ListenAddress, conf.Server.ListenPort), nil) log.Fatal(err.Error()) }