-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
123 lines (119 loc) · 3.88 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package main
import (
"context"
"time"
"github.com/adamkoro/adventcalendar-backend/lib/env"
pg "github.com/adamkoro/adventcalendar-backend/lib/postgres"
"github.com/common-nighthawk/go-figure"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
var (
db pg.Repository
isConnected bool
)
func main() {
figure.NewFigure("AdventCalendar Auth Api Init", "big", false).Print()
/////////////////////////
// Logger setup
/////////////////////////
logLevel := env.GetLogLevel()
switch logLevel {
case "panic":
zerolog.SetGlobalLevel(zerolog.PanicLevel)
case "fatal":
zerolog.SetGlobalLevel(zerolog.FatalLevel)
case "error":
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
case "info":
zerolog.SetGlobalLevel(zerolog.InfoLevel)
case "debug":
zerolog.SetGlobalLevel(zerolog.DebugLevel)
case "warn":
zerolog.SetGlobalLevel(zerolog.WarnLevel)
default:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
}
/////////////////////////
// Postgres connection check
/////////////////////////
for {
log.Info().Msg("establishing connection to the postgres...")
postgresConn, err := db.Connect(env.GetDbHost(), env.GetDbUser(), env.GetDbPassword(), env.GetDbName(), env.GetDbPort(), env.GetDbSslMode())
if err != nil {
log.Error().Msg(err.Error())
}
ctx := context.Background()
db := pg.NewRepository(postgresConn, &ctx)
log.Debug().Msg("pinging the postgres...")
err = db.Ping()
if err != nil {
log.Info().Msg("lost connection to the postgres, reconnecting...")
log.Error().Msg(err.Error())
isConnected = false
} else {
isConnected = true
log.Debug().Msg("pinging the postgres successful")
log.Info().Msg("establishing connection to the postgres successful")
if !isConnected {
log.Info().Msg("reconnected to the postgres")
isConnected = true
}
}
time.Sleep(5 * time.Second)
if isConnected {
/////////////////////////
// Database migration
/////////////////////////
log.Debug().Msg("database struct migration started...")
err := db.Migrate()
if err != nil {
log.Fatal().Msg(err.Error())
}
log.Info().Msg("database struct migration successful")
/////////////////////////
// Check if admin user exists
/////////////////////////
log.Debug().Msg("checking admin user exists...")
isAdminExists, err := db.GetUser(&pg.UserRequest{Username: env.GetAdminUsername()})
if err != nil {
log.Info().Msg("admin user does not exists")
log.Info().Msg("admin user creating...")
// Admin user create
err = db.CreateUser(&pg.CreateUserRequest{Username: env.GetAdminUsername(), Email: env.GetAdminEmail(), Password: env.GetAdminPassword()})
if err != nil {
log.Fatal().Msg(err.Error())
}
log.Info().Msg("admin user created")
return
}
log.Info().Msg("admin user is exists")
/////////////////////////
// Update admin user if exists and password is not match
/////////////////////////
if isAdminExists.Username != "" {
log.Debug().Msg("checking admin user password...")
err = db.CheckUserPassword(&pg.LoginRequest{Username: env.GetAdminUsername(), Password: env.GetAdminPassword()})
if err != nil {
log.Info().Msg("admin user password is not match")
log.Info().Msg("admin user password updating...")
err = db.UpdateUser(&pg.UpdateUserRequest{Username: env.GetAdminUsername(), Email: env.GetAdminEmail(), Password: env.GetAdminPassword()})
if err != nil {
log.Fatal().Msg(err.Error())
}
log.Info().Msg("admin user password updated")
}
log.Info().Msg("admin user password is match")
log.Debug().Msg("checking admin user password successful")
}
log.Info().Msg("all required actions completed successfully")
log.Debug().Msg("closing connection to the postgres...")
/////////////////////////
// Close connection
/////////////////////////
db.Close()
log.Debug().Msg("closing connection to the postgres successful")
break
}
}
}