11package  main
22
3- import  "log" 
3+ import  (
4+ 	"flag" 
5+ 	"fmt" 
6+ 	"log" 
7+ 	"net/http" 
8+ 	"os" 
9+ 	"time" 
10+ )
411
512type  apis  struct  {
613	users      string 
@@ -14,3 +21,45 @@ type application struct {
1421	infoLog  * log.Logger 
1522	apis     apis 
1623}
24+ 
25+ func  main () {
26+ 
27+ 	// command line flags 
28+ 	serverAddr  :=  flag .String ("serverAddr" , "" , "HTTP server network address" )
29+ 	serverPort  :=  flag .Int ("serverPort" , 8000 , "HTTP server network port" )
30+ 	usersAPI  :=  flag .String ("userAPI" , "http://localhost:4000/api/users/" , "Users API" )
31+ 	moviesAPI  :=  flag .String ("moviesAPI" , "http://localhost:4000/api/movies" , "Movies API" )
32+ 	showtimesAPI  :=  flag .String ("showtimesAPI" , "http://localhost:4000/api/showtimes/" , "Showtimes API" )
33+ 	bookingsAPI  :=  flag .String ("bookingsAPI" , "http://localhost:4000/api/bookings/" , "Bookings API" )
34+ 
35+ 	// create loggers 
36+ 	infoLog  :=  log .New (os .Stdout , "INFO\t " , log .Ldate | log .Ltime )
37+ 	errLog  :=  log .New (os .Stderr , "ERROR\t " , log .Ldate | log .Ltime | log .Lshortfile )
38+ 
39+ 	// init app instance 
40+ 	app  :=  & application {
41+ 		infoLog : infoLog ,
42+ 		errLog :  errLog ,
43+ 		apis : apis {
44+ 			users :     * usersAPI ,
45+ 			movies :    * moviesAPI ,
46+ 			showtimes : * showtimesAPI ,
47+ 			bookings :  * bookingsAPI ,
48+ 		},
49+ 	}
50+ 
51+ 	// init server 
52+ 	serverURI  :=  fmt .Sprintf ("%s:%d" , * serverAddr , * serverPort )
53+ 	srv  :=  & http.Server {
54+ 		Addr :         serverURI ,
55+ 		ErrorLog :     errLog ,
56+ 		Handler :      app .routes (),
57+ 		IdleTimeout :  time .Minute ,
58+ 		ReadTimeout :  5  *  time .Second ,
59+ 		WriteTimeout : 10  *  time .Second ,
60+ 	}
61+ 
62+ 	infoLog .Printf ("Starting server on %s\n " , serverURI )
63+ 	err  :=  srv .ListenAndServe ()
64+ 	errLog .Fatal (err )
65+ }
0 commit comments