-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
98 lines (77 loc) · 2.36 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main
import (
"database/sql"
"github.com/dastardlyjockey/rssagg/internal/database"
"github.com/go-chi/chi"
"github.com/joho/godotenv"
"log"
"net/http"
"os"
"time"
"github.com/go-chi/cors"
_ "github.com/lib/pq"
)
type apiConfig struct {
DB *database.Queries
}
func main() {
//feed, err := urlToFeed("https://wagslane.dev/index.xml")
//if err != nil {
// log.Fatal(err)
//}
//fmt.Println(feed)
godotenv.Load()
portString := os.Getenv("PORT")
if portString == "" {
log.Fatal("PORT is not found in the environment")
}
dbURL := os.Getenv("DB_URL")
if dbURL == "" {
log.Fatal("DB_URL is not found in the environment")
}
connection, err := sql.Open("postgres", dbURL)
if err != nil {
log.Fatal("Can't connect to database:", err)
}
db := database.New(connection)
apiCfg := apiConfig{
DB: db,
}
go startScraping(db, 10, time.Minute)
router := chi.NewRouter()
router.Use(cors.Handler(cors.Options{
AllowedOrigins: []string{"https://*", "http://*"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowedHeaders: []string{"*"},
ExposedHeaders: []string{"Link"},
AllowCredentials: false,
MaxAge: 300,
}))
v1Router := chi.NewRouter()
//USERS
v1Router.Get("/healthz", handlerReadiness)
v1Router.Get("/error", handlerError)
v1Router.Post("/users", apiCfg.handlerCreateUser)
v1Router.Get("/users", apiCfg.middlewareAuth(apiCfg.handlerGetUser))
//FEEDS
v1Router.Post("/feeds", apiCfg.middlewareAuth(apiCfg.handlerCreateFeed))
v1Router.Get("/feeds", apiCfg.handlerGetFeeds)
v1Router.Post("/feed_follows", apiCfg.middlewareAuth(apiCfg.handlerCreateFeedFollows))
v1Router.Get("/user_feed_follows", apiCfg.middlewareAuth(apiCfg.handlerGetFeedFollow))
v1Router.Delete("/user_feed_follows/{feedFollowID}", apiCfg.middlewareAuth(apiCfg.handlerDeleteFeedFollow))
//POSTS
v1Router.Get("/posts", apiCfg.middlewareAuth(apiCfg.handlerGetUserPosts))
router.Mount("/v1", v1Router)
srv := &http.Server{
Handler: router,
Addr: ":" + portString,
}
log.Printf(" Sever starting on port %v", portString)
/* The method will keep running until the port is reached and the server is stopped properly before returning
from the handler function call to the handler function itself and returning immediately to the caller function call
*/
err = srv.ListenAndServe()
if err != nil {
log.Fatal(err)
}
}