From e6344743d55ac0140a4a718cdcb7f98bc7cfa14f Mon Sep 17 00:00:00 2001 From: Bagas Aulia Rezki Date: Sun, 28 Apr 2024 22:26:53 +0700 Subject: [PATCH] Separate run command from main function --- app/app.go | 48 +++++++++++++++++++ db/database.go | 12 ++++- db/model/user/user.go | 7 +-- handler/download/download.go | 7 +-- handler/download/file/file.go | 8 +--- handler/forgotPassword/forgotPassword.go | 6 +-- handler/forgotPassword/verify/verify.go | 6 +-- handler/signup/signup.go | 6 +-- handler/signup/verify/verify.go | 8 +--- .../upload/initialisation/initialisation.go | 14 ++---- handler/upload/upload.go | 12 ++--- main.go | 19 +------- 12 files changed, 74 insertions(+), 79 deletions(-) create mode 100644 app/app.go diff --git a/app/app.go b/app/app.go new file mode 100644 index 0000000..a38c406 --- /dev/null +++ b/app/app.go @@ -0,0 +1,48 @@ +package app + +import ( + "fmt" + "github.com/fossyy/filekeeper/db" + "github.com/fossyy/filekeeper/middleware" + "github.com/fossyy/filekeeper/routes" + "github.com/fossyy/filekeeper/utils" + "net/http" +) + +type App struct { + http.Server + DB db.Database +} + +var Server App + +func NewServer(addr string, handler http.Handler, database db.Database) App { + return App{ + Server: http.Server{ + Addr: addr, + Handler: handler, + }, + DB: database, + } +} + +func Start() { + serverAddr := fmt.Sprintf("%s:%s", utils.Getenv("SERVER_HOST"), utils.Getenv("SERVER_PORT")) + + dbUser := utils.Getenv("DB_USERNAME") + dbPass := utils.Getenv("DB_PASSWORD") + dbHost := utils.Getenv("DB_HOST") + dbPort := utils.Getenv("DB_PORT") + dbName := utils.Getenv("DB_NAME") + + database := db.NewPostgresDB(dbUser, dbPass, dbHost, dbPort, dbName, db.DisableSSL) + db.DB = database + + Server = NewServer(serverAddr, middleware.Handler(routes.SetupRoutes()), database) + fmt.Printf("Listening on http://%s\n", Server.Addr) + err := Server.ListenAndServe() + if err != nil { + panic(err) + return + } +} diff --git a/db/database.go b/db/database.go index 7eb91ce..8c04e42 100644 --- a/db/database.go +++ b/db/database.go @@ -14,6 +14,7 @@ import ( ) var log *logger.AggregatedLogger +var DB Database type mySQLdb struct { *gorm.DB @@ -23,6 +24,13 @@ type postgresDB struct { *gorm.DB } +type SSLMode string + +const ( + DisableSSL SSLMode = "disable" + EnableSSL SSLMode = "enable" +) + type Database interface { IsUserRegistered(email string, username string) bool @@ -79,9 +87,9 @@ func NewMYSQLdb(username, password, host, port, dbName string) Database { return &mySQLdb{DB} } -func NewPostgresDB(username, password, host, port, dbName string) Database { +func NewPostgresDB(username, password, host, port, dbName string, mode SSLMode) Database { var err error - connection := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s TimeZone=Asia/Jakarta", host, username, password, dbName, port, "disable") + connection := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s TimeZone=Asia/Jakarta", host, username, password, dbName, port, mode) DB, err := gorm.Open(postgres.New(postgres.Config{ DSN: connection, }), &gorm.Config{ diff --git a/db/model/user/user.go b/db/model/user/user.go index 571d003..16de14c 100644 --- a/db/model/user/user.go +++ b/db/model/user/user.go @@ -2,7 +2,6 @@ package user import ( "fmt" - "github.com/fossyy/filekeeper/utils" "sync" "time" @@ -27,12 +26,8 @@ type UserWithExpired struct { var log *logger.AggregatedLogger var UserCache *Cache -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) UserCache = &Cache{users: make(map[string]*UserWithExpired)} ticker := time.NewTicker(time.Hour * 8) @@ -66,7 +61,7 @@ func Get(email string) (*UserWithExpired, error) { return user, nil } - userData, err := database.GetUser(email) + userData, err := db.DB.GetUser(email) if err != nil { return nil, err } diff --git a/handler/download/download.go b/handler/download/download.go index 77ca38f..e9d8b89 100644 --- a/handler/download/download.go +++ b/handler/download/download.go @@ -15,13 +15,8 @@ import ( var log *logger.AggregatedLogger -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) - } func GET(w http.ResponseWriter, r *http.Request) { @@ -45,7 +40,7 @@ func GET(w http.ResponseWriter, r *http.Request) { } userSession := middleware.GetUser(storeSession) - files, err := database.GetFiles(userSession.UserID.String()) + files, err := db.DB.GetFiles(userSession.UserID.String()) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return diff --git a/handler/download/file/file.go b/handler/download/file/file.go index c532d89..df61902 100644 --- a/handler/download/file/file.go +++ b/handler/download/file/file.go @@ -1,7 +1,6 @@ package downloadFileHandler import ( - "github.com/fossyy/filekeeper/utils" "net/http" "os" "path/filepath" @@ -12,18 +11,13 @@ import ( var log *logger.AggregatedLogger -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) - } func GET(w http.ResponseWriter, r *http.Request) { fileID := r.PathValue("id") - file, err := database.GetFile(fileID) + file, err := db.DB.GetFile(fileID) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) log.Error(err.Error()) diff --git a/handler/forgotPassword/forgotPassword.go b/handler/forgotPassword/forgotPassword.go index 4b16ee7..d93aadf 100644 --- a/handler/forgotPassword/forgotPassword.go +++ b/handler/forgotPassword/forgotPassword.go @@ -33,9 +33,6 @@ var mailServer *email.SmtpServer var ListForgotPassword map[string]*ForgotPassword var UserForgotPassword = make(map[string]string) -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() ListForgotPassword = make(map[string]*ForgotPassword) @@ -43,7 +40,6 @@ func init() { mailServer = email.NewSmtpServer(utils.Getenv("SMTP_HOST"), smtpPort, utils.Getenv("SMTP_USER"), utils.Getenv("SMTP_PASSWORD")) ticker := time.NewTicker(time.Minute) //TESTING - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) go func() { for { <-ticker.C @@ -89,7 +85,7 @@ func POST(w http.ResponseWriter, r *http.Request) { emailForm := r.Form.Get("email") - user, err := database.GetUser(emailForm) + user, err := db.DB.GetUser(emailForm) if errors.Is(err, gorm.ErrRecordNotFound) { component := forgotPasswordView.Main(fmt.Sprintf("Account with this email address %s is not found", emailForm), types.Message{ Code: 0, diff --git a/handler/forgotPassword/verify/verify.go b/handler/forgotPassword/verify/verify.go index 4265d05..22a682d 100644 --- a/handler/forgotPassword/verify/verify.go +++ b/handler/forgotPassword/verify/verify.go @@ -16,13 +16,9 @@ import ( var log *logger.AggregatedLogger -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() //TESTING - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) } @@ -90,7 +86,7 @@ func POST(w http.ResponseWriter, r *http.Request) { return } - err = database.UpdateUserPassword(data.User.Email, hashedPassword) + err = db.DB.UpdateUserPassword(data.User.Email, hashedPassword) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) log.Error(err.Error()) diff --git a/handler/signup/signup.go b/handler/signup/signup.go index 58f4bca..31375fb 100644 --- a/handler/signup/signup.go +++ b/handler/signup/signup.go @@ -32,16 +32,12 @@ var mailServer *email.SmtpServer var VerifyUser map[string]*UnverifiedUser var VerifyEmail map[string]string -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() smtpPort, _ := strconv.Atoi(utils.Getenv("SMTP_PORT")) mailServer = email.NewSmtpServer(utils.Getenv("SMTP_HOST"), smtpPort, utils.Getenv("SMTP_USER"), utils.Getenv("SMTP_PASSWORD")) VerifyUser = make(map[string]*UnverifiedUser) VerifyEmail = make(map[string]string) - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) ticker := time.NewTicker(time.Minute) go func() { @@ -112,7 +108,7 @@ func POST(w http.ResponseWriter, r *http.Request) { Password: hashedPassword, } - if registered := database.IsUserRegistered(userEmail, username); registered { + if registered := db.DB.IsUserRegistered(userEmail, username); registered { component := signupView.Main("Sign up Page", types.Message{ Code: 0, Message: "Email or Username has been registered", diff --git a/handler/signup/verify/verify.go b/handler/signup/verify/verify.go index afcf477..f26bea5 100644 --- a/handler/signup/verify/verify.go +++ b/handler/signup/verify/verify.go @@ -1,7 +1,6 @@ package signupVerifyHandler import ( - "github.com/fossyy/filekeeper/utils" "net/http" "github.com/fossyy/filekeeper/db" @@ -13,13 +12,8 @@ import ( var log *logger.AggregatedLogger -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) - } func GET(w http.ResponseWriter, r *http.Request) { @@ -31,7 +25,7 @@ func GET(w http.ResponseWriter, r *http.Request) { return } - err := database.CreateUser(data.User) + err := db.DB.CreateUser(data.User) if err != nil { component := signupView.Main("Sign up Page", types.Message{ Code: 0, diff --git a/handler/upload/initialisation/initialisation.go b/handler/upload/initialisation/initialisation.go index a4e46a5..634101f 100644 --- a/handler/upload/initialisation/initialisation.go +++ b/handler/upload/initialisation/initialisation.go @@ -3,7 +3,6 @@ package initialisation import ( "encoding/json" "errors" - "github.com/fossyy/filekeeper/utils" "io" "net/http" "os" @@ -21,13 +20,8 @@ import ( var log *logger.AggregatedLogger -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) - } func POST(w http.ResponseWriter, r *http.Request) { @@ -59,7 +53,7 @@ func POST(w http.ResponseWriter, r *http.Request) { return } - fileData, err := database.GetUserFile(fileInfo.Name, userSession.UserID.String()) + fileData, err := db.DB.GetUserFile(fileInfo.Name, userSession.UserID.String()) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { upload, err := handleNewUpload(userSession, fileInfo) @@ -74,7 +68,7 @@ func POST(w http.ResponseWriter, r *http.Request) { return } - info, err := database.GetUploadInfo(fileData.ID.String()) + info, err := db.DB.GetUploadInfo(fileData.ID.String()) if err != nil { log.Error(err.Error()) return @@ -122,7 +116,7 @@ func handleNewUpload(user types.User, file types.FileInfo) (models.FilesUploaded Downloaded: 0, } - err = database.CreateFile(&newFile) + err = db.DB.CreateFile(&newFile) if err != nil { log.Error(err.Error()) return models.FilesUploaded{}, err @@ -138,7 +132,7 @@ func handleNewUpload(user types.User, file types.FileInfo) (models.FilesUploaded Done: false, } - err = database.CreateUploadInfo(filesUploaded) + err = db.DB.CreateUploadInfo(filesUploaded) if err != nil { log.Error(err.Error()) return models.FilesUploaded{}, err diff --git a/handler/upload/upload.go b/handler/upload/upload.go index 3a58894..b17b436 100644 --- a/handler/upload/upload.go +++ b/handler/upload/upload.go @@ -3,7 +3,6 @@ package uploadHandler import ( "errors" "github.com/fossyy/filekeeper/db" - "github.com/fossyy/filekeeper/utils" "io" "net/http" "os" @@ -20,13 +19,8 @@ import ( var log *logger.AggregatedLogger var mu sync.Mutex -// TESTTING VAR -var database db.Database - func init() { log = logger.Logger() - database = db.NewPostgresDB(utils.Getenv("DB_USERNAME"), utils.Getenv("DB_PASSWORD"), utils.Getenv("DB_HOST"), utils.Getenv("DB_PORT"), utils.Getenv("DB_NAME")) - } func GET(w http.ResponseWriter, r *http.Request) { @@ -62,7 +56,7 @@ func POST(w http.ResponseWriter, r *http.Request) { userSession := middleware.GetUser(storeSession) if r.FormValue("done") == "true" { - database.FinalizeFileUpload(fileID) + db.DB.FinalizeFileUpload(fileID) return } @@ -72,7 +66,7 @@ func POST(w http.ResponseWriter, r *http.Request) { return } - file, err := database.GetUploadInfo(fileID) + file, err := db.DB.GetUploadInfo(fileID) if err != nil { log.Error("error getting upload info: " + err.Error()) return @@ -110,7 +104,7 @@ func POST(w http.ResponseWriter, r *http.Request) { if err != nil { return } - database.UpdateUpdateIndex(index, fileID) + db.DB.UpdateUpdateIndex(index, fileID) } func createUploadDirectory(uploadDir string) error { diff --git a/main.go b/main.go index 4d81e3d..41e794e 100644 --- a/main.go +++ b/main.go @@ -1,24 +1,9 @@ package main import ( - "fmt" - "net/http" - - "github.com/fossyy/filekeeper/middleware" - "github.com/fossyy/filekeeper/routes" - "github.com/fossyy/filekeeper/utils" + "github.com/fossyy/filekeeper/app" ) func main() { - serverAddr := fmt.Sprintf("%s:%s", utils.Getenv("SERVER_HOST"), utils.Getenv("SERVER_PORT")) - server := http.Server{ - Addr: serverAddr, - Handler: middleware.Handler(routes.SetupRoutes()), - } - - fmt.Printf("Listening on http://%s\n", serverAddr) - err := server.ListenAndServe() - if err != nil { - return - } + app.Start() }