Skip to content

Commit 78b1bb5

Browse files
committed
Updated .gitignore and untracked some files
1 parent 125958e commit 78b1bb5

File tree

6 files changed

+154
-1
lines changed

6 files changed

+154
-1
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
apiserver
2+
!cmd/apiserver/
3+
!interanal/app/apiserver/
24

35
# Created by .ignore support plugin (hsz.mobi)
46
### Go template

cmd/apiserver/main.go

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"github.com/BurntSushi/toml"
6+
"github.com/dannycrief/go-http-rest-api/interanal/app/apiserver"
7+
"log"
8+
)
9+
10+
var (
11+
configPath string
12+
)
13+
14+
func init() {
15+
flag.StringVar(&configPath, "config-path", "configs/apiserver.toml", "path to config file")
16+
}
17+
18+
func main() {
19+
flag.Parse()
20+
21+
22+
config := apiserver.NewConfig()
23+
_, err := toml.DecodeFile(configPath, config)
24+
if err != nil {
25+
log.Fatal(err)
26+
}
27+
28+
s := apiserver.New(config)
29+
if err := s.Start(); err != nil {
30+
log.Fatal(err)
31+
}
32+
}

interanal/app/apiserver/apiserver.go

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package apiserver
2+
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"
8+
"net/http"
9+
)
10+
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+
//Start ...
29+
func (s *APIServer) Start() error {
30+
if err := s.configureLogger(); err != nil {
31+
return err
32+
}
33+
34+
s.configureRouter()
35+
36+
if err := s.configureStore(); err != nil {
37+
return err
38+
}
39+
40+
s.logger.Info("starting api server")
41+
42+
return http.ListenAndServe(s.config.BindAddr, s.router)
43+
}
44+
45+
//configureLogger...
46+
func (s *APIServer) configureLogger() error {
47+
level, err := logrus.ParseLevel(s.config.LogLevel)
48+
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
65+
}
66+
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
75+
}
76+
77+
return func(w http.ResponseWriter, r *http.Request) {
78+
io.WriteString(w, "Hello")
79+
}
80+
}
81+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package apiserver
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"net/http"
6+
"net/http/httptest"
7+
"testing"
8+
)
9+
10+
func TestAPIServer_HandlerHello(t *testing.T) {
11+
s := New(NewConfig())
12+
rec := httptest.NewRecorder()
13+
req, _ := http.NewRequest(http.MethodGet, "/hello", nil)
14+
s.handleHello().ServeHTTP(rec, req)
15+
assert.Equal(t, rec.Body.String(), "Hello")
16+
}

interanal/app/apiserver/config.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package apiserver
2+
3+
import (
4+
"github.com/dannycrief/go-http-rest-api/interanal/app/store"
5+
)
6+
7+
//Config ...
8+
type Config struct {
9+
BindAddr string `toml:"bind_addr"`
10+
LogLevel string `toml:"log_level"`
11+
Store *store.Config
12+
}
13+
14+
//NewConfig ...
15+
func NewConfig() *Config {
16+
return &Config{
17+
BindAddr: ":8080",
18+
LogLevel: "debug",
19+
Store: store.NewConfig(),
20+
}
21+
22+
}

interanal/app/model/user_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func TestUser_Validate(t *testing.T) {
2525
u := model.TestUser(t)
2626
u.Password = ""
2727
u.EncryptedPassword = "encryptedpassword"
28-
28+
2929
return u
3030
},
3131
isValid: true,

0 commit comments

Comments
 (0)