1
1
package main
2
2
3
- import "log"
3
+ import (
4
+ "flag"
5
+ "fmt"
6
+ "log"
7
+ "net/http"
8
+ "os"
9
+ "time"
10
+ )
4
11
5
12
type apis struct {
6
13
users string
@@ -14,3 +21,45 @@ type application struct {
14
21
infoLog * log.Logger
15
22
apis apis
16
23
}
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