File tree Expand file tree Collapse file tree 7 files changed +65
-23
lines changed Expand file tree Collapse file tree 7 files changed +65
-23
lines changed Original file line number Diff line number Diff line change
1
+ ###
2
+ GET http://localhost:8081/api/status
3
+ Accept: application/json
Original file line number Diff line number Diff line change
1
+ ###
2
+ GET http://localhost:8081/api/v1
3
+ Accept: application/json
Original file line number Diff line number Diff line change 1
1
package main
2
2
3
3
import (
4
+ "database/sql"
4
5
"fmt"
5
6
"log"
6
7
"net/http"
7
8
"sandbox-go-api-sqlboiler-rest-auth/internal/config"
8
9
"sandbox-go-api-sqlboiler-rest-auth/internal/routes"
10
+
11
+ _ "github.com/lib/pq"
9
12
)
10
13
11
14
func main () {
12
- cfg , err := config .NewEnvConfig ()
15
+ cfg , err := config .NewConfig ()
13
16
if err != nil {
14
17
log .Fatalln (err )
15
18
return
16
19
}
20
+ connStr := "host=localhost port=5433 dbname=sandbox user=postgres password=postgres sslmode=disable"
21
+ db , err := sql .Open ("postgres" , connStr )
22
+ if err != nil {
23
+ log .Fatalln ("cannot open the database" )
24
+ }
25
+ defer db .Close ()
17
26
18
- r := routes .NewRouter ()
27
+ r := routes .NewRouter (db )
19
28
20
29
log .Printf ("server is running on port %v" , cfg .Port )
21
30
err = http .ListenAndServe (fmt .Sprintf (":%s" , cfg .Port ), r )
Original file line number Diff line number Diff line change @@ -2,12 +2,12 @@ package config
2
2
3
3
import "github.com/caarlos0/env/v6"
4
4
5
- type EnvConfig struct {
5
+ type Config struct {
6
6
Port string `env:"PORT,required"`
7
7
}
8
8
9
- func NewEnvConfig () (* EnvConfig , error ) {
10
- config := EnvConfig {}
9
+ func NewConfig () (* Config , error ) {
10
+ config := Config {}
11
11
if err := env .Parse (& config ); err != nil {
12
12
return & config , err
13
13
}
Original file line number Diff line number Diff line change
1
+ package routes
2
+
3
+ import (
4
+ "database/sql"
5
+ "log"
6
+ "net/http"
7
+
8
+ "github.com/go-chi/chi/v5"
9
+ )
10
+
11
+ func noVersioningRoutes (db * sql.DB ) chi.Router {
12
+ r := chi .NewRouter ()
13
+ r .Get ("/status" , func (w http.ResponseWriter , r * http.Request ) {
14
+ _ , err := w .Write ([]byte ("working" ))
15
+ if err != nil {
16
+ log .Fatalln (err )
17
+ }
18
+ })
19
+ return r
20
+ }
Original file line number Diff line number Diff line change 1
1
package routes
2
2
3
3
import (
4
- "net/http "
4
+ "database/sql "
5
5
"time"
6
6
7
7
"github.com/go-chi/render"
@@ -10,15 +10,7 @@ import (
10
10
"github.com/go-chi/chi/v5/middleware"
11
11
)
12
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 {
13
+ func NewRouter (db * sql.DB ) * chi.Mux {
22
14
r := chi .NewRouter ()
23
15
r .Use (middleware .RequestID )
24
16
r .Use (middleware .RealIP )
@@ -27,14 +19,9 @@ func NewRouter() *chi.Mux {
27
19
r .Use (middleware .Timeout (60 * time .Second ))
28
20
r .Use (render .SetContentType (render .ContentTypeJSON ))
29
21
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
- })
22
+ r .Route ("/api" , func (r chi.Router ) {
23
+ r .Mount ("/" , noVersioningRoutes (db ))
24
+ r .Mount ("/v1" , v1Routes (db ))
38
25
})
39
26
return r
40
27
}
Original file line number Diff line number Diff line change
1
+ package routes
2
+
3
+ import (
4
+ "database/sql"
5
+ "log"
6
+ "net/http"
7
+
8
+ "github.com/go-chi/chi/v5"
9
+ )
10
+
11
+ func v1Routes (db * sql.DB ) chi.Router {
12
+ r := chi .NewRouter ()
13
+ r .Get ("/" , func (w http.ResponseWriter , r * http.Request ) {
14
+ _ , err := w .Write ([]byte ("v1 index" ))
15
+ if err != nil {
16
+ log .Fatalln (err )
17
+ }
18
+ })
19
+ return r
20
+ }
You can’t perform that action at this time.
0 commit comments