-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
93 lines (85 loc) · 2.15 KB
/
Copy pathmain.go
File metadata and controls
93 lines (85 loc) · 2.15 KB
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
package main
import (
"fmt"
"jsfraz/trek-server/database"
"jsfraz/trek-server/models"
"jsfraz/trek-server/routes"
"jsfraz/trek-server/utils"
"log"
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func main() {
// log settings
log.SetPrefix("trek-server: ")
log.SetFlags(log.LstdFlags | log.LUTC | log.Lmicroseconds)
// Load config
config, err := utils.LoadConfig()
if err != nil {
log.Fatalln(err)
}
singleton := utils.GetSingleton()
singleton.Config = config
// Postgres database
connStr := fmt.Sprintf("postgresql://%s:%s@%s:%d/%s",
singleton.Config.PostgresUser,
singleton.Config.PostgresPassword,
singleton.Config.PostgresServer,
singleton.Config.PostgresPort,
singleton.Config.PostgresDb,
)
postgres, err := gorm.Open(postgres.Open(connStr), &gorm.Config{Logger: logger.Default.LogMode(singleton.Config.GetGormLogLevel())})
if err != nil {
log.Fatal(err)
}
// database schema migration
err = postgres.AutoMigrate(
&models.User{},
&models.Tracker{},
&models.GNSSData{},
)
if err != nil {
log.Fatal(err)
}
// set database client in singleton
singleton.PostgresDb = *postgres
// check if superuser exists
exists, _ := database.UserExistsByUsername(singleton.Config.SuperuserUsername)
if !exists {
// create superuser
u, _ := models.NewUser(singleton.Config.SuperuserUsername, singleton.Config.SuperuserPassword, true)
err = database.CreateSuperuser(*u)
if err != nil {
log.Fatal(err)
}
}
// get Socket.IO instance
socketio := routes.NewSocketIOServer()
// get router
router, err := routes.NewRouter()
// log error if not nil
if err != nil {
log.Fatal(err)
}
// start Socket.IO
go func() {
if err := socketio.Serve(); err != nil {
log.Fatalf("Socket.IO listen error: %s\n", err)
}
}()
defer socketio.Close()
router.GET("/socket.io/*any", nil, gin.WrapH(socketio))
router.POST("/socket.io/*any", nil, gin.WrapH(socketio))
// start HTTP server
srv := &http.Server{
Addr: "0.0.0.0:8080",
Handler: router,
}
log.Println("Started server.")
if err := srv.ListenAndServe(); err != nil {
log.Fatalf("Fizz listen error: %s\n", err)
}
}