Browse Source

working on adding structure to image uploads

AETH-erial 7 months ago
parent
commit
f1ade8973c
4 changed files with 88 additions and 5 deletions
  1. 10 4
      pkg/controller/content_handlers.go
  2. 28 0
      pkg/controller/controller.go
  3. 21 0
      pkg/helpers/redis.go
  4. 29 1
      pkg/helpers/storage.go

+ 10 - 4
pkg/controller/content_handlers.go

@@ -24,7 +24,7 @@ func (c *Controller) ServeBlogDirectory(ctx *gin.Context) {
 
 
 
 
 func (c *Controller) GetBlogPostEditor(ctx *gin.Context) {
 func (c *Controller) GetBlogPostEditor(ctx *gin.Context) {
-	rds := helpers.NewRedisClient(helpers.RedisConf{Addr: os.Getenv("REDIS_ADDR"), Port: os.Getenv("REDIS_PORT")})
+	rds := helpers.NewRedisClient(c.RedisConfig)
 	post, exist := ctx.Params.Get("post-name")
 	post, exist := ctx.Params.Get("post-name")
 	if !exist {
 	if !exist {
 		ctx.JSON(404, map[string]string{
 		ctx.JSON(404, map[string]string{
@@ -116,12 +116,18 @@ func (c *Controller) ServeFileUpload(ctx *gin.Context) {
 
 
 
 
 func (c *Controller) SaveFile(ctx *gin.Context) {
 func (c *Controller) SaveFile(ctx *gin.Context) {
-	file, _ := ctx.FormFile("file")
+	file, err := ctx.FormFile("file")
+	if err != nil {
+		ctx.HTML(400, "upload_status", gin.H{"UpdateMessage": err, "Color": "red"})
+		return
+	}
+	//rds := helpers.NewRedisClient(c.RedisConfig)
+
 
 
 	// Upload the file to specific dst.
 	// Upload the file to specific dst.
-	err := ctx.SaveUploadedFile(file, fmt.Sprintf("%s/%s", helpers.GetImageStore(), file.Filename))
+	err = ctx.SaveUploadedFile(file, fmt.Sprintf("%s/%s", helpers.GetImageStore(), file.Filename))
 	if err != nil {
 	if err != nil {
-		ctx.HTML(400, "upload_status", gin.H{"UpdateMessage": "Update Failed!", "Color": "red"})
+		ctx.HTML(400, "upload_status", gin.H{"UpdateMessage": err, "Color": "red"})
 		return
 		return
 	}
 	}
 
 

+ 28 - 0
pkg/controller/controller.go

@@ -14,6 +14,9 @@ type Controller struct{
 	Cache		*helpers.AllCache
 	Cache		*helpers.AllCache
 }
 }
 
 
+/*
+Retrieve the header configuration from redis
+*/
 func (c *Controller) Headers() *helpers.HeaderCollection {
 func (c *Controller) Headers() *helpers.HeaderCollection {
 	headers, err := helpers.GetHeaders(c.RedisConfig)
 	headers, err := helpers.GetHeaders(c.RedisConfig)
 	if err != nil {
 	if err != nil {
@@ -22,6 +25,9 @@ func (c *Controller) Headers() *helpers.HeaderCollection {
 	return headers
 	return headers
 }
 }
 
 
+/*
+Retrieve the menu configuration from redis
+*/
 func (c *Controller) Menu() *helpers.MenuElement {
 func (c *Controller) Menu() *helpers.MenuElement {
 	links, err := helpers.GetMenuLinks(c.RedisConfig)
 	links, err := helpers.GetMenuLinks(c.RedisConfig)
 	if err != nil {
 	if err != nil {
@@ -30,6 +36,9 @@ func (c *Controller) Menu() *helpers.MenuElement {
 	return links
 	return links
 }
 }
 
 
+/*
+Retrieve the administrator table configuration from redis
+*/
 func (c *Controller) AdminTables() *helpers.AdminTables {
 func (c *Controller) AdminTables() *helpers.AdminTables {
 	tables, err := helpers.GetAdminTables(c.RedisConfig)
 	tables, err := helpers.GetAdminTables(c.RedisConfig)
 	if err != nil {
 	if err != nil {
@@ -38,6 +47,10 @@ func (c *Controller) AdminTables() *helpers.AdminTables {
 	return tables
 	return tables
 }
 }
 
 
+
+/*
+Retrieve the post data and format it for the post management page
+*/
 func (c *Controller) FormatDocTable() *helpers.AdminTables {
 func (c *Controller) FormatDocTable() *helpers.AdminTables {
 	var postTables helpers.AdminTables
 	var postTables helpers.AdminTables
 	for i := range helpers.Topics {
 	for i := range helpers.Topics {
@@ -59,6 +72,21 @@ func (c *Controller) FormatDocTable() *helpers.AdminTables {
 
 
 }
 }
 
 
+
+/*
+Save a new image store item
+*/
+func (c *Controller) SaveImage(img *helpers.ImageStoreItem) error {
+	rds := helpers.NewRedisClient(c.RedisConfig)
+	err := rds.AddImage(img)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+
+
 func NewController(root string, domain string, redisPort string, redisAddr string) *Controller {
 func NewController(root string, domain string, redisPort string, redisAddr string) *Controller {
 	return &Controller{WebRoot: root, Cache: helpers.NewCache(),
 	return &Controller{WebRoot: root, Cache: helpers.NewCache(),
 								Domain: domain, RedisConfig: helpers.RedisConf{
 								Domain: domain, RedisConfig: helpers.RedisConf{

+ 21 - 0
pkg/helpers/redis.go

@@ -92,8 +92,29 @@ func (r *RedisCaller) AddDoc(doc Document) error {
         return err
         return err
     }
     }
 	return &DocAlreadyExists{Key: doc.Ident, Value: val}
 	return &DocAlreadyExists{Key: doc.Ident, Value: val}
+}
 
 
 
 
+/*
+Add an image to the image store
+	:param img: an ImageStoreItem struct with the appropriate metadata
+*/
+func (r *RedisCaller) AddImage(img *ImageStoreItem) error {
+	val, err := r.Client.Get(r.ctx, img.Identifier).Result()
+	if err == redis.Nil {
+		data, err := json.Marshal(img)
+		if err != nil {
+			return err
+		}
+		err = r.Client.Set(r.ctx, img.Identifier, data, 0).Err()
+		if err != nil {
+			return err
+		}
+		return nil
+    } else if err != nil {
+        return err
+    }
+	return &DocAlreadyExists{Key: img.Identifier, Value: val}
 }
 }
 
 
 
 

+ 29 - 1
pkg/helpers/storage.go

@@ -3,16 +3,44 @@ package helpers
 import (
 import (
 	"fmt"
 	"fmt"
 	"os"
 	"os"
+	"time"
 
 
 	"git.aetherial.dev/aeth/keiji/pkg/env"
 	"git.aetherial.dev/aeth/keiji/pkg/env"
+	"github.com/google/uuid"
 )
 )
 
 
 type InvalidSkipArg struct {Skip int}
 type InvalidSkipArg struct {Skip int}
 
 
 func (i *InvalidSkipArg) Error() string {
 func (i *InvalidSkipArg) Error() string {
-	return fmt.Sprintf("Invalid skip amount was passed: %s", i.Skip)
+	return fmt.Sprintf("Invalid skip amount was passed: %v", i.Skip)
 }
 }
 
 
+
+type ImageStoreItem struct {
+	Identifier		string	`json:"identifier"`
+	Filename		string	`json:"filename"`
+	AbsolutePath	string	`json:"absolute_path"`
+	Title			string	`json:"title"`
+	Created			string	`json:"created"`
+	Desc			string	`json:"description"`
+	Category		string	`json:"category"`
+}
+
+func NewImageStoreItem(fname string, title string, desc string) *ImageStoreItem {
+	id := uuid.New()
+	img := ImageStoreItem{
+		Identifier: id.String(),
+		Filename: fname,
+		Title: title,
+		Category: DIGITAL_ART,
+		AbsolutePath: fmt.Sprintf("%s/%s", env.IMAGE_STORE, fname),
+		Created: time.Now().UTC().String(),
+		Desc: desc,
+	}
+	return &img
+}
+
+
 /*
 /*
 Function to return the location of the image store. Wrapping the env call in
 Function to return the location of the image store. Wrapping the env call in
 a function so that refactoring is easier
 a function so that refactoring is easier