diff --git a/app/app.go b/app/app.go index 92fd49f..a38c406 100644 --- a/app/app.go +++ b/app/app.go @@ -35,7 +35,7 @@ func Start() { dbPort := utils.Getenv("DB_PORT") dbName := utils.Getenv("DB_NAME") - database := db.NewMYSQLdb(dbUser, dbPass, dbHost, dbPort, dbName) + database := db.NewPostgresDB(dbUser, dbPass, dbHost, dbPort, dbName, db.DisableSSL) db.DB = database Server = NewServer(serverAddr, middleware.Handler(routes.SetupRoutes()), database) diff --git a/cache/cache.go b/cache/cache.go index 0a3c605..81ab8e8 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -74,7 +74,7 @@ func init() { for _, file := range fileCache { file.mu.Lock() - if currentTime.Sub(file.AccessAt) > time.Minute*10 { + if currentTime.Sub(file.AccessAt) > time.Minute*1 { db.DB.UpdateUploadedByte(file.UploadedByte, file.ID.String()) db.DB.UpdateUploadedChunk(file.UploadedChunk, file.ID.String()) delete(fileCache, file.ID.String()) @@ -126,7 +126,7 @@ func GetFile(id string) (*FileWithExpired, error) { if err != nil { return nil, err } - fmt.Println("nih : ", uploadData) + fileCache[id] = &FileWithExpired{ ID: uploadData.ID, OwnerID: uploadData.OwnerID, diff --git a/db/database.go b/db/database.go index f74a570..319b0fb 100644 --- a/db/database.go +++ b/db/database.go @@ -107,7 +107,23 @@ func NewMYSQLdb(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, mode) + var count int64 + + connection := fmt.Sprintf("host=%s user=%s password=%s port=%s sslmode=%s TimeZone=Asia/Jakarta", host, username, password, port, mode) + initDB, err := gorm.Open(postgres.New(postgres.Config{ + DSN: connection, + }), &gorm.Config{ + Logger: gormLogger.Default.LogMode(gormLogger.Silent), + }) + + initDB.Raw("SELECT count(*) FROM pg_database WHERE datname = ?", dbName).Scan(&count) + if count <= 0 { + if err := initDB.Exec("CREATE DATABASE " + dbName).Error; err != nil { + panic("Error creating database: " + 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, mode) DB, err := gorm.Open(postgres.New(postgres.Config{ DSN: connection, }), &gorm.Config{ @@ -180,10 +196,13 @@ func (db *mySQLdb) GetUser(email string) (*models.User, error) { } func (db *mySQLdb) UpdateUserPassword(email string, password string) error { - err := db.DB.Table("users").Where("email = ?", email).Update("password", password).Error + var user models.User + err := db.DB.Table("users").Where("email = ?", email).First(&user).Error if err != nil { return err } + user.Password = password + db.Save(&user) return nil } @@ -197,7 +216,6 @@ func (db *mySQLdb) CreateFile(file *models.File) error { func (db *mySQLdb) GetFile(fileID string) (*models.File, error) { var file models.File - fmt.Println(fileID) err := db.DB.Table("files").Where("id = ?", fileID).First(&file).Error if err != nil { return nil, err @@ -224,20 +242,24 @@ func (db *mySQLdb) GetFiles(ownerID string) ([]*models.File, error) { } func (db *mySQLdb) UpdateUploadedByte(byte int64, fileID string) { - db.DB.Table("files").Where("id = ?", fileID).Updates(map[string]interface{}{ - "Uploaded_byte": byte, - }) + var file models.File + db.DB.Table("files").Where("id = ?", fileID).First(&file) + file.UploadedByte = byte + db.Save(&file) } + func (db *mySQLdb) UpdateUploadedChunk(index int64, fileID string) { - db.DB.Table("files").Where("id = ?", fileID).Updates(map[string]interface{}{ - "Uploaded_chunk": index, - }) + var file models.File + db.DB.Table("files").Where("id = ?", fileID).First(&file) + file.UploadedChunk = index + db.Save(&file) } func (db *mySQLdb) FinalizeFileUpload(fileID string) { - db.DB.Table("files").Where("id = ?", fileID).Updates(map[string]interface{}{ - "Done": true, - }) + var file models.File + db.DB.Table("files").Where("id = ?", fileID).First(&file) + file.Done = true + db.Save(&file) } // POSTGRES FUNCTION @@ -283,10 +305,13 @@ func (db *postgresDB) GetUser(email string) (*models.User, error) { } func (db *postgresDB) UpdateUserPassword(email string, password string) error { - err := db.DB.Table("users").Where("email = $1", email).Update("password", password).Error + var user models.User + err := db.DB.Table("users").Where("email = $1", email).First(&user).Error if err != nil { return err } + user.Password = password + db.Save(&user) return nil } @@ -326,18 +351,21 @@ func (db *postgresDB) GetFiles(ownerID string) ([]*models.File, error) { } func (db *postgresDB) UpdateUploadedByte(byte int64, fileID string) { - db.DB.Table("files").Where("id = $1", fileID).Updates(map[string]interface{}{ - "Uploaded_byte": byte, - }) + var file models.File + db.DB.Table("files").Where("id = $1", fileID).First(&file) + file.UploadedByte = byte + db.Save(&file) } func (db *postgresDB) UpdateUploadedChunk(index int64, fileID string) { - db.DB.Table("files").Where("id = $1", fileID).Updates(map[string]interface{}{ - "Uploaded_chunk": index, - }) + var file models.File + db.DB.Table("files").Where("id = $1", fileID).First(&file) + file.UploadedChunk = index + db.Save(&file) } func (db *postgresDB) FinalizeFileUpload(fileID string) { - db.DB.Table("files").Where("id = $1", fileID).Updates(map[string]interface{}{ - "Done": true, - }) + var file models.File + db.DB.Table("files").Where("id = $1", fileID).First(&file) + file.Done = true + db.Save(&file) } diff --git a/handler/upload/initialisation/initialisation.go b/handler/upload/initialisation/initialisation.go index 536d1bf..17849ed 100644 --- a/handler/upload/initialisation/initialisation.go +++ b/handler/upload/initialisation/initialisation.go @@ -3,7 +3,6 @@ package initialisation import ( "encoding/json" "errors" - "fmt" "github.com/fossyy/filekeeper/cache" "io" "net/http" @@ -58,7 +57,7 @@ func POST(w http.ResponseWriter, r *http.Request) { respondJSON(w, map[string]bool{"Done": true}) return } - fmt.Println("nih2 : ", fileData) + respondJSON(w, fileData) } diff --git a/main.go b/main.go index 41e794e..e529f01 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,6 @@ package main -import ( - "github.com/fossyy/filekeeper/app" -) +import "github.com/fossyy/filekeeper/app" func main() { app.Start()