-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.go
66 lines (53 loc) · 1.81 KB
/
server.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
package main
import (
"flag"
"fmt"
"log"
"net/http"
"os"
"path"
"strconv"
"github.com/gorilla/mux"
"github.com/jmoiron/sqlx"
)
var portNumber int
var databaseFilePath string
func usage() {
fmt.Fprintf(os.Stderr, "usage: %s [options]\n\nOptions:\n", path.Base(os.Args[0]))
flag.PrintDefaults()
}
func parseFlags() {
flag.Usage = usage
flag.IntVar(&portNumber, "port", 8080, "port number for connection")
flag.StringVar(&databaseFilePath, "dbPath", "records.db", "database file path")
flag.Parse()
}
func main() {
parseFlags()
// Set up the Database
var err error
db, err = sqlx.Connect("sqlite3", databaseFilePath)
defer db.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "cannot connect to database: %v\n", err)
os.Exit(1)
}
// Set up router and subrouter
r := mux.NewRouter()
apiRouter := r.PathPrefix("/api/v1").Subrouter()
// For all posts
apiRouter.Path("/posts").Methods("GET").HandlerFunc(handleRetrievePosts)
apiRouter.Path("/posts").Methods("POST").HandlerFunc(handleCreatePost)
// For an individual post
apiRouter.Path("/posts/{link_id:[0-9a-zA-Z]{32}}").Methods("GET").HandlerFunc(handleRetrievePost)
apiRouter.Path("/posts/{link_id:[0-9a-zA-Z]{32}}").Methods("PUT").HandlerFunc(handleUpdatePost)
apiRouter.Path("/posts/{link_id:[0-9a-zA-Z]{32}}/report").Methods("POST").HandlerFunc(handlePostReport)
apiRouter.Path("/posts/{link_id:[0-9a-zA-Z]{32}}").Methods("DELETE").HandlerFunc(handleDeletePost)
// Serve files
r.Path("/posts/{link_id:[0-9a-zA-Z]{32}}").HandlerFunc(handleIndividualPageServing)
r.Path("/posts").HandlerFunc(handlerToRetrieveAllPostsPage)
r.Path("/").HandlerFunc(handlerToRetrieveHomePage)
r.PathPrefix("/").Handler(http.FileServer(http.Dir("dist")))
fmt.Printf("listening on port :%d\n", portNumber)
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(portNumber), r))
}