diff --git a/modules/rabbitmq/rabbitmq.go b/modules/rabbitmq/rabbitmq.go index 7dec7cb..79253fb 100644 --- a/modules/rabbitmq/rabbitmq.go +++ b/modules/rabbitmq/rabbitmq.go @@ -11,9 +11,11 @@ import ( ) var Conn *amqp.Connection -var MailQueue amqp.Queue var Channel *amqp.Channel +var MailQueue amqp.Queue +var PictureQueue amqp.Queue + func getConnectionString() string { cfg := &config.Cfg.RabbitMq @@ -40,32 +42,71 @@ func Init() { Channel = ch log.Debug("RabbitMQ connected") + /* + mailQueue, err := ch.QueueDeclare( + "mails", // name + false, // durable + false, // delete when unused + false, // exclusive + false, // no-wait + nil, // arguments + ) - q, err := ch.QueueDeclare( - "mails", // name - false, // durable - false, // delete when unused - false, // exclusive - false, // no-wait - nil, // arguments + if err != nil { + log.Fatalln("Failed to declare a queue", err) + } + + MailQueue = mailQueue */ + + declareQueue(ch, "mails", &MailQueue) + declareQueue(ch, "pictures", &PictureQueue) + + /* + pictureQueue, err := ch.QueueDeclare( + "picture", // name + false, // durable + false, // delete when unused + false, // exclusive + false, // no-wait + nil, // arguments + ) + + if err != nil { + log.Fatalln("Failed to declare a queue", err) + } + + PictureQueue = pictureQueue */ +} + +func declareQueue(channel *amqp.Channel, name string, queue *amqp.Queue) { + q, err := channel.QueueDeclare( + name, // name + false, // durable + false, // delete when unused + false, // exclusive + false, // no-wait + nil, // arguments ) if err != nil { log.Fatalln("Failed to declare a queue", err) } - MailQueue = q + log.Debugln("declareQ", q.Name) + + *queue = q + + log.Infoln("queue", MailQueue) } -func Publish(body string) { - log.Infoln("qu name", MailQueue.Name) - log.Infoln("publish", Channel, MailQueue) +func Publish(queue amqp.Queue, body string) { + log.Infoln("publish queue name", queue.Name) err := Channel.Publish( - "", // exchange - MailQueue.Name, // routing key - false, // mandatory - false, // immediate + "", // exchange + queue.Name, // routing key + false, // mandatory + false, // immediate amqp.Publishing{ ContentType: "application/json", Body: []byte(body), @@ -85,5 +126,18 @@ func PublishMail(mail string, templateId int, languageId int, bodyData json.RawM log.Infoln("error reqBody", err) } - Publish(string(reqBody)) + Publish(MailQueue, string(reqBody)) +} + +func PublishPicture(pictureMessage structs.RabbitmqPictureMessage) { + //js := structs.RabbitmqPictureMessage{Picture: picture, UserId: userId} + + reqBody, err := json.MarshalIndent(&pictureMessage, "", "\t") + + if err != nil { + log.Infoln("error reqBody", err) + } + + Publish(PictureQueue, string(reqBody)) + log.Debugln("rabbitmq publicPicture") } diff --git a/modules/structs/rabbitmqPictureMessage.go b/modules/structs/rabbitmqPictureMessage.go new file mode 100644 index 0000000..c4eb92a --- /dev/null +++ b/modules/structs/rabbitmqPictureMessage.go @@ -0,0 +1,7 @@ +package structs + +type RabbitmqPictureMessage struct { + Picture []byte + UserId string + Filename string +} diff --git a/routers/api/v1/picture/picture.go b/routers/api/v1/picture/picture.go index 3c7cd38..6d3357d 100644 --- a/routers/api/v1/picture/picture.go +++ b/routers/api/v1/picture/picture.go @@ -1,16 +1,21 @@ package picture import ( + "bytes" "fmt" + "io" "strings" + "git.umbach.dev/app-idea/rest-api/modules/config" + "git.umbach.dev/app-idea/rest-api/modules/rabbitmq" + "git.umbach.dev/app-idea/rest-api/modules/structs" + "git.umbach.dev/app-idea/rest-api/routers/api/v1/user" "github.com/gofiber/fiber/v2" "github.com/google/uuid" log "github.com/sirupsen/logrus" ) func Test(c *fiber.Ctx) error { - log.Infoln("header", string(c.Request().Header.ContentType())) log.Infoln("formValue", c.FormValue("image")) @@ -22,6 +27,35 @@ func Test(c *fiber.Ctx) error { return c.SendStatus(fiber.StatusInternalServerError) } + f, err := file.Open() + + if err != nil { + log.Info("err001") + return c.SendStatus(fiber.StatusInternalServerError) + } + + defer f.Close() + + buf := bytes.NewBuffer(nil) + + if _, err := io.Copy(buf, f); err != nil { + log.Info("err002") + return c.SendStatus(fiber.StatusInternalServerError) + } + + log.Infoln("bytes", len(buf.Bytes())) + + user, err := user.GetUserBySessionId(c.Cookies(config.Cfg.Settings.Cookies.SessionId)) + + if err != nil { + log.Infoln("err004", err) + return c.SendStatus(fiber.StatusInternalServerError) + } + + log.Infoln("userId", user.Id) + + rabbitmq.PublishPicture(structs.RabbitmqPictureMessage{Picture: buf.Bytes(), UserId: user.Id, Filename: file.Filename}) + filename := strings.Replace(uuid.New().String(), "-", "", -1) fileExt := strings.Split(file.Filename, ".")[1] image := fmt.Sprintf("%s.%s", filename, fileExt) diff --git a/routers/api/v1/user/user.go b/routers/api/v1/user/user.go index 749f91b..84f8f58 100644 --- a/routers/api/v1/user/user.go +++ b/routers/api/v1/user/user.go @@ -214,7 +214,7 @@ func userInfos(c *fiber.Ctx, userId string) error { return c.JSON(&user) } -func getUserBySessionId(sessionId string) (structs.User, error) { +func GetUserBySessionId(sessionId string) (structs.User, error) { db := database.DB user := structs.User{} userId, err := getUserIdBySessionId(sessionId) @@ -249,7 +249,7 @@ func deleteUser(c *fiber.Ctx) error { } func DeleteUser(c *fiber.Ctx) error { - user, err := getUserBySessionId(c.Cookies(cfg.Settings.Cookies.SessionId)) + user, err := GetUserBySessionId(c.Cookies(cfg.Settings.Cookies.SessionId)) if err != nil { return c.SendStatus(fiber.StatusInternalServerError)