Skip to content

Commit 24f771d

Browse files
committed
setup project
- simple route with chi - get env with caarlos0/env - add Makefile for dev
1 parent bb9883f commit 24f771d

File tree

6 files changed

+98
-0
lines changed

6 files changed

+98
-0
lines changed

Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export PORT := 8081
2+
3+
.PHONY: dev
4+
dev:
5+
@go run ./cmd/api

cmd/api/main.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/http"
7+
"sandbox-go-api-sqlboiler-rest-auth/internal/config"
8+
"sandbox-go-api-sqlboiler-rest-auth/internal/routes"
9+
)
10+
11+
func main() {
12+
cfg, err := config.NewEnvConfig()
13+
if err != nil {
14+
log.Fatalln(err)
15+
return
16+
}
17+
18+
r := routes.NewRouter()
19+
20+
log.Printf("server is running on port %v", cfg.Port)
21+
err = http.ListenAndServe(fmt.Sprintf(":%s", cfg.Port), r)
22+
if err != nil {
23+
log.Fatalln("cannot run server:", err)
24+
return
25+
}
26+
}

go.mod

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
module sandbox-go-api-sqlboiler-rest-auth
22

33
go 1.17
4+
5+
require (
6+
github.com/caarlos0/env/v6 v6.7.1 // indirect
7+
github.com/go-chi/chi/v5 v5.0.4 // indirect
8+
github.com/go-chi/render v1.0.1 // indirect
9+
)

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
github.com/caarlos0/env/v6 v6.7.1 h1:2r2GyonA8aJX6lDEhwFfpxwAX8Z3mvbE1X6vhaSzEyU=
2+
github.com/caarlos0/env/v6 v6.7.1/go.mod h1:FE0jGiAnQqtv2TenJ4KTa8+/T2Ss8kdS5s1VEjasoN0=
3+
github.com/go-chi/chi/v5 v5.0.4 h1:5e494iHzsYBiyXQAHHuI4tyJS9M3V84OuX3ufIIGHFo=
4+
github.com/go-chi/chi/v5 v5.0.4/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
5+
github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8=
6+
github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns=

internal/config/config.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package config
2+
3+
import "github.com/caarlos0/env/v6"
4+
5+
type EnvConfig struct {
6+
Port string `env:"PORT,required"`
7+
}
8+
9+
func NewEnvConfig() (*EnvConfig, error) {
10+
config := EnvConfig{}
11+
if err := env.Parse(&config); err != nil {
12+
return &config, err
13+
}
14+
return &config, nil
15+
}

internal/routes/routes.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package routes
2+
3+
import (
4+
"net/http"
5+
"time"
6+
7+
"github.com/go-chi/render"
8+
9+
"github.com/go-chi/chi/v5"
10+
"github.com/go-chi/chi/v5/middleware"
11+
)
12+
13+
type Health struct {
14+
OK bool `json:"ok"`
15+
}
16+
17+
func (h *Health) Render(_ http.ResponseWriter, _ *http.Request) error {
18+
return nil
19+
}
20+
21+
func NewRouter() *chi.Mux {
22+
r := chi.NewRouter()
23+
r.Use(middleware.RequestID)
24+
r.Use(middleware.RealIP)
25+
r.Use(middleware.Logger)
26+
r.Use(middleware.Recoverer)
27+
r.Use(middleware.Timeout(60 * time.Second))
28+
r.Use(render.SetContentType(render.ContentTypeJSON))
29+
30+
r.Route("/api/", func(r chi.Router) {
31+
r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
32+
err := render.Render(w, r, &Health{OK: true})
33+
if err != nil {
34+
http.Error(w, http.StatusText(500), 500)
35+
return
36+
}
37+
})
38+
})
39+
return r
40+
}

0 commit comments

Comments
 (0)