|
1 | 1 | package apiserver
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "github.com/dannycrief/go-http-rest-api/interanal/app/store" |
5 |
| - "github.com/gorilla/mux" |
6 |
| - "github.com/sirupsen/logrus" |
7 |
| - "io" |
| 4 | + "database/sql" |
| 5 | + "github.com/dannycrief/go-http-rest-api/interanal/app/store/sqlstore" |
8 | 6 | "net/http"
|
9 | 7 | )
|
10 | 8 |
|
11 |
| -//APIServer ... |
12 |
| -type APIServer struct { |
13 |
| - config *Config |
14 |
| - logger *logrus.Logger |
15 |
| - router *mux.Router |
16 |
| - store *store.Store |
17 |
| -} |
18 |
| - |
19 |
| -//New ... |
20 |
| -func New(config *Config) *APIServer { |
21 |
| - return &APIServer{ |
22 |
| - config: config, |
23 |
| - logger: logrus.New(), |
24 |
| - router: mux.NewRouter(), |
25 |
| - } |
26 |
| -} |
27 |
| - |
28 | 9 | //Start ...
|
29 |
| -func (s *APIServer) Start() error { |
30 |
| - if err := s.configureLogger(); err != nil { |
31 |
| - return err |
| 10 | +func Start(config *Config) error { |
| 11 | + db, err := newDB(config.DatabaseURL) |
| 12 | + if err != nil { |
| 13 | + return nil |
32 | 14 | }
|
33 | 15 |
|
34 |
| - s.configureRouter() |
35 |
| - |
36 |
| - if err := s.configureStore(); err != nil { |
37 |
| - return err |
38 |
| - } |
| 16 | + defer db.Close() |
39 | 17 |
|
40 |
| - s.logger.Info("starting api server") |
| 18 | + store := sqlstore.New(db) |
| 19 | + s := newServer(store) |
41 | 20 |
|
42 |
| - return http.ListenAndServe(s.config.BindAddr, s.router) |
| 21 | + return http.ListenAndServe(config.BindAddr, s) |
43 | 22 | }
|
44 | 23 |
|
45 |
| -//configureLogger... |
46 |
| -func (s *APIServer) configureLogger() error { |
47 |
| - level, err := logrus.ParseLevel(s.config.LogLevel) |
| 24 | +func newDB(databaseURL string) (*sql.DB, error) { |
| 25 | + db, err := sql.Open("postgres", databaseURL) |
48 | 26 | if err != nil {
|
49 |
| - return err |
50 |
| - } |
51 |
| - |
52 |
| - s.logger.SetLevel(level) |
53 |
| - |
54 |
| - return nil |
55 |
| -} |
56 |
| -//configureRouter ... |
57 |
| -func (s *APIServer) configureRouter() { |
58 |
| - s.router.HandleFunc("/hello", s.handleHello()) |
59 |
| -} |
60 |
| - |
61 |
| -func (s *APIServer) configureStore() error { |
62 |
| - st := store.New(s.config.Store) |
63 |
| - if err := st.Open(); err != nil { |
64 |
| - return err |
| 27 | + return nil, err |
65 | 28 | }
|
66 | 29 |
|
67 |
| - s.store = st |
68 |
| - return nil |
69 |
| -} |
70 |
| - |
71 |
| -//handleHello ... |
72 |
| -func (s *APIServer) handleHello() http.HandlerFunc { |
73 |
| - type request struct { |
74 |
| - name string |
| 30 | + if err := db.Ping(); err != nil { |
| 31 | + return nil, err |
75 | 32 | }
|
76 | 33 |
|
77 |
| - return func(w http.ResponseWriter, r *http.Request) { |
78 |
| - io.WriteString(w, "Hello") |
79 |
| - } |
| 34 | + return db, nil |
80 | 35 | }
|
81 |
| - |
0 commit comments