Skip to content

Commit

Permalink
Merge pull request #123 from kevinanielsen/refactor/validating-if-fil…
Browse files Browse the repository at this point in the history
…e-already-exists

refactor: validating if file already  or image exists
  • Loading branch information
Caixetadev committed Feb 2, 2024
2 parents a661fa2 + aa20f8a commit dc5ccdd
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 36 deletions.
23 changes: 12 additions & 11 deletions src/database/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,21 @@ import (
"github.com/kevinanielsen/go-fast-cdn/src/models"
)

func AddDoc(fileName string, fileHashBuffer []byte) (string, bool) {
var doc models.Doc
doc.FileName = fileName
doc.Checksum = fileHashBuffer
func GetDocByCheckSum(checksum []byte) models.Doc {
var entries models.Doc

var entries []models.Doc
DB.Where("checksum = ?", checksum).First(&entries)

DB.First(&entries, "checksum = $1", string(fileHashBuffer))
if len(entries) == 0 {
DB.Create(&doc)
return fileName, false
} else {
return entries[0].FileName, true
return entries
}

func AddDoc(doc models.Doc) (string, error) {
result := DB.Create(&doc)
if result.Error != nil {
return "", result.Error
}

return doc.FileName, result.Error
}

func DeleteDoc(fileName string) (string, bool) {
Expand Down
23 changes: 12 additions & 11 deletions src/database/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,21 @@ import (
"github.com/kevinanielsen/go-fast-cdn/src/models"
)

func AddImage(fileName string, fileHashBuffer []byte) (string, bool) {
var image models.Image
image.FileName = fileName
image.Checksum = fileHashBuffer
func GetImageByCheckSum(checksum []byte) models.Image {
var entries models.Image

var entries []models.Image
DB.Where("checksum = ?", checksum).First(&entries)

DB.First(&entries, "checksum = $1", string(fileHashBuffer))
if len(entries) == 0 {
DB.Create(&image)
return fileName, false
} else {
return entries[0].FileName, true
return entries
}

func AddImage(image models.Image) (string, error) {
result := DB.Create(&image)
if result.Error != nil {
return "", result.Error
}

return image.FileName, nil
}

func DeleteImage(fileName string) (string, bool) {
Expand Down
28 changes: 21 additions & 7 deletions src/handlers/docs/handleDocUpload.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/gin-gonic/gin"
"github.com/kevinanielsen/go-fast-cdn/src/database"
"github.com/kevinanielsen/go-fast-cdn/src/models"
"github.com/kevinanielsen/go-fast-cdn/src/util"
)

Expand Down Expand Up @@ -65,14 +66,27 @@ func HandleDocUpload(c *gin.Context) {
return
}

savedFileName, alreadyExists := database.AddDoc(filename, fileHashBuffer[:])
doc := models.Doc{
FileName: filteredFilename,
Checksum: fileHashBuffer[:],
}

docInDatabase := database.GetDocByCheckSum(fileHashBuffer[:])
if len(docInDatabase.Checksum) > 0 {
c.JSON(http.StatusConflict, "File already exists")
return
}

savedFileName, err := database.AddDoc(doc)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
}

if !alreadyExists {
err = c.SaveUploadedFile(fileHeader, util.ExPath+"/uploads/docs/"+filteredFilename)
if err != nil {
c.String(http.StatusInternalServerError, "Failed to save file: %s", err.Error())
return
}
err = c.SaveUploadedFile(fileHeader, util.ExPath+"/uploads/docs/"+savedFileName)
if err != nil {
c.String(http.StatusInternalServerError, "Failed to save file: %s", err.Error())
return
}

body := gin.H{
Expand Down
29 changes: 22 additions & 7 deletions src/handlers/image/handleImageUpload.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/gin-gonic/gin"
"github.com/kevinanielsen/go-fast-cdn/src/database"
"github.com/kevinanielsen/go-fast-cdn/src/models"
"github.com/kevinanielsen/go-fast-cdn/src/util"
)

Expand Down Expand Up @@ -67,13 +68,27 @@ func HandleImageUpload(c *gin.Context) {
return
}

savedFilename, alreadyExists := database.AddImage(filename, fileHashBuffer[:])
if !alreadyExists {
err = c.SaveUploadedFile(fileHeader, util.ExPath+"/uploads/images/"+filteredFilename)
if err != nil {
c.String(http.StatusInternalServerError, "Failed to save file: %s", err.Error())
return
}
image := models.Image{
FileName: filteredFilename,
Checksum: fileHashBuffer[:],
}

imageInDatabase := database.GetImageByCheckSum(fileHashBuffer[:])
if len(imageInDatabase.Checksum) > 0 {
c.JSON(http.StatusConflict, "File already exists")
return
}

savedFilename, err := database.AddImage(image)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
}

err = c.SaveUploadedFile(fileHeader, util.ExPath+"/uploads/images/"+savedFilename)
if err != nil {
c.String(http.StatusInternalServerError, "Failed to save file: %s", err.Error())
return
}

body := gin.H{
Expand Down

0 comments on commit dc5ccdd

Please sign in to comment.