-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
69 lines (52 loc) · 1.24 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
import (
"context"
"fmt"
"log"
"math/rand"
"os"
"time"
"github.com/pegov/fluff/db"
"github.com/pegov/fluff/handler"
"github.com/gin-gonic/gin"
_ "github.com/jackc/pgx/v5/stdlib"
"github.com/jmoiron/sqlx"
"github.com/redis/go-redis/v9"
)
func SetupRouter() *gin.Engine {
pgxDb, err := sqlx.Connect("pgx", "postgres://postgres:postgres@127.0.0.1:5432/fluff")
if err != nil {
log.Fatalln(err)
}
pgxDb.DB.SetMaxOpenConns(10)
rOptions, err := redis.ParseURL("redis://127.0.0.1:6379/1")
if err != nil {
log.Fatalln(err)
}
rdb := redis.NewClient(rOptions)
if err := rdb.Ping(context.Background()).Err(); err != nil {
log.Fatalln(err)
}
repo := db.NewLinkRepo(pgxDb, rdb)
r := gin.Default()
r.GET("/api/links", handler.GetAllLinks(repo))
r.POST("/api/links", handler.CreateLink(repo))
r.GET("/api/links/:short", handler.GetLink(repo))
r.DELETE("/api/links/:short", handler.DeleteLink(repo))
r.GET("/:short", handler.RedirectToLink(repo))
return r
}
func main() {
host, ok := os.LookupEnv("HOST")
if !ok {
host = "0.0.0.0"
}
port, ok := os.LookupEnv("PORT")
if !ok {
port = "8080"
}
bindAddr := fmt.Sprintf("%v:%v", host, port)
rand.Seed(time.Now().UnixNano())
r := SetupRouter()
r.Run(bindAddr)
}