From 24be1cedebd69a71efa9bb44f1ba69df13024290b6652a397e9cb056af4ea996 Mon Sep 17 00:00:00 2001 From: DaanSelen Date: Thu, 23 Apr 2026 16:57:58 +0200 Subject: [PATCH] feat: begin working on the categorize --- internal/server/api/routes/file.go | 3 ++- internal/server/database/functions.go | 2 +- internal/shared/utility/define.go | 19 +++++++++++++++ internal/shared/utility/generator.go | 16 +++++++++++++ internal/shared/utility/hash.go | 19 --------------- internal/shared/utility/utility.go | 34 ++++++++++----------------- 6 files changed, 50 insertions(+), 43 deletions(-) create mode 100644 internal/shared/utility/define.go delete mode 100644 internal/shared/utility/hash.go diff --git a/internal/server/api/routes/file.go b/internal/server/api/routes/file.go index 87852e4..7a9967c 100644 --- a/internal/server/api/routes/file.go +++ b/internal/server/api/routes/file.go @@ -14,7 +14,8 @@ import ( ) func RegisterFileRoutes(file *gin.RouterGroup, env bootstrap.Environment, db *gorm.DB) { - // /file/ + // prefix: file + // for example: /file/ file.GET("/:filename", func(c *gin.Context) { f := c.Param("filename") p := filepath.Join(env.ContentDirectory, f) diff --git a/internal/server/database/functions.go b/internal/server/database/functions.go index c17e185..524b69d 100644 --- a/internal/server/database/functions.go +++ b/internal/server/database/functions.go @@ -19,7 +19,7 @@ func BuildFileRecord(r io.Reader, origName string, contentDirectory string) (Fil return File{}, fmt.Errorf("unsupported filetype") } - checksum, err := utility.HashReader(r) + checksum, err := utility.GenerateHashFromReader(r) if err != nil { slog.Error("failed to calculate hash of file at given path", "error", err) return File{}, err diff --git a/internal/shared/utility/define.go b/internal/shared/utility/define.go new file mode 100644 index 0000000..057ceb5 --- /dev/null +++ b/internal/shared/utility/define.go @@ -0,0 +1,19 @@ +package utility + +type MediaType string + +// 0: unspecified +// 1: video +// 2: presentation +// 3: internet URL +const ( + Video MediaType = "video" + Presentation MediaType = "presentation" + Internet MediaType = "internet" + Unspecified MediaType = "unspecified" +) + +var ( + videoFormats = []string{".mp4", ".mov", ".avi", ".mkv", ".webm", ".m4a"} + presentationFormats = []string{".pptx", ".ppt", ".key", ".odp"} +) diff --git a/internal/shared/utility/generator.go b/internal/shared/utility/generator.go index 6c7b97a..c54cad9 100644 --- a/internal/shared/utility/generator.go +++ b/internal/shared/utility/generator.go @@ -1,9 +1,25 @@ package utility import ( + "crypto/sha512" + "encoding/hex" + "io" + "github.com/google/uuid" ) +func GenerateHashFromReader(r io.Reader) (string, error) { + h := sha512.New() + if _, err := io.Copy(h, r); err != nil { + return "", err + } + + // return the sha checksum in hex + return hex.EncodeToString(h.Sum(nil)), nil + // alternatively return in base64 + //return base64.StdEncoding.EncodeToString(h.Sum(nil)), nil +} + func GenerateSafeName(category MediaType, ext string) string { return uuid.New().String() + "_" + string(category) + ext } diff --git a/internal/shared/utility/hash.go b/internal/shared/utility/hash.go deleted file mode 100644 index 5b0d245..0000000 --- a/internal/shared/utility/hash.go +++ /dev/null @@ -1,19 +0,0 @@ -package utility - -import ( - "crypto/sha512" - "encoding/hex" - "io" -) - -func HashReader(r io.Reader) (string, error) { - h := sha512.New() - if _, err := io.Copy(h, r); err != nil { - return "", err - } - - // return the sha checksum in hex - return hex.EncodeToString(h.Sum(nil)), nil - // alternatively return in base64 - //return base64.StdEncoding.EncodeToString(h.Sum(nil)), nil -} diff --git a/internal/shared/utility/utility.go b/internal/shared/utility/utility.go index df19ea4..98b9f7c 100644 --- a/internal/shared/utility/utility.go +++ b/internal/shared/utility/utility.go @@ -6,15 +6,6 @@ import ( "strings" ) -type MediaType string - -const ( - Video MediaType = "video" - Presentation MediaType = "presentation" - Internet MediaType = "internet" - Unspecified MediaType = "unspecified" -) - func RemoveFile(p string) error { err := os.Remove(p) if err != nil { @@ -24,21 +15,20 @@ func RemoveFile(p string) error { return nil } -// 0: unspecified -// 1: video -// 2: presentation -// 3: internet URL func CategorizeMediaType(ext string) (MediaType, bool) { + // Lets categorize - switch ext { - case ".mp4", ".mov", ".avi", ".mkv", ".webm", ".m4a": - return Video, true - case ".pptx", ".ppt", ".key", ".odp": - return Presentation, true - default: - slog.Debug("marking file as invalid due to its undefined extension") - return "", false - } + /* + switch ext { + case slices.Contains(videoFormats, ext): + return Video, true + case slices.Contains(presentationFormats, ext): + return Presentation, true + default: + slog.Debug("marking file as invalid due to its undefined extension") + return "", false + } + */ } func ParseSlogLevel(s string) slog.Level {