I'm trying to read files from a struct array but I'm unable to read it. Here is the postman.
Here is my code:
type MasterTemplate struct {
ID uuid.UUID `form:"id" json:"id"`
IsVoice bool `form:"is_voice" json:"is_voice"`
Title string `form:"title" json:"title"`
IsSms bool `form:"is_sms" json:"is_sms"`
FilePath string `form:"file_path" json:"file_path"`
Content []struct {
File *multipart.FileHeader `form:"file" json:"file"`
MsgTmplateLangId string `form:"msg_template_lang_id" json:"msg_template_lang_id"`
SMSContent string `form:"sms_content" json:"sms_content"`
MsgContentID string `form:"msg_content_id" json:"msg_content_id"`
} `form:"content" json:"content"`
UserID uuid.UUID `form:"user_id" json:"user_id"`
}
func (tmplController *MessageTemplateController) CreateMsgTemplateController(ctx *gin.Context) {
userID := ctx.Param("user_id")
userUUID, err := uuid.Parse(userID)
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
ctx.Abort()
return
}
if ctx.Request.ContentLength == 0 {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": "Invalid/Empty body request",
})
ctx.Abort()
return
}
err = ctx.Request.ParseMultipartForm(10 * 1024 * 1024)
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
return
}
var msgTemplate *models.MasterTemplate
if err := ctx.ShouldBind(&msgTemplate); err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"Gin Error": err.Error(),
})
return
}
config, err := config.LoadConfig("credentials")
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"rerror": err.Error(),
})
return
}
for _, sms := range msgTemplate.Content {
lanaguageID, err := uuid.Parse(sms.MsgTmplateLangId)
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"rerror": err.Error(),
})
return
}
templateContent := models.MessageTemplateContenet{
ID: uuid.New(),
LanguageID: lanaguageID,
IsSms: true,
IsVoice: false,
FilePath: "",
Content: sms.SMSContent,
UserID: userUUID,
// MessageTemplateID: data.ID,
IsDeleted: false,
}
_, err = tmplController.contents.CreateMessageTemplateContent(&templateContent, ctx)
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"rerror": err.Error(),
})
return
}
}
msgTemplate.IsVoice = true
msgTemplate.IsSms = false
msgTemplate.IsSms = false
msgTemplate.IsVoice = true
for x, voice := range msgTemplate.Content {
fmt.Println(voice.MsgTmplateLangId)
fmt.Println(x)
fileHeader, err := ctx.FormFile(fmt.Sprintf("content[%c][file]", x))
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
return
}
file, err := voice.File.Open()
if err != nil {
ctx.JSON(400, gin.H{"error": "Failed to open uploaded file"})
return
}
defer file.Close()
fmt.Println(file)
if !utilities.IsValidFile(fileHeader) {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": "Invalid file format. Only .mp3 and .wav files are allowed.",
})
return
}
if fileHeader.Size > 3*1024*1024 {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": "File size exceeds the limit. Maximum file size is 3MB.",
})
return
}
audioPath := uuid.New().String() + fileHeader.Filename
uploadPath := filepath.Join("./msgtemplate", audioPath)
// Save the uploaded file
if err := ctx.SaveUploadedFile(fileHeader, uploadPath); err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
return
}
session, err := awsservice.S3BucketSessionHandler()
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
return
}
fileURL, err := awsservice.UploadFiles(session, uploadPath, config.AWS_AUDIO_BUCKET)
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
return
}
lanaguageID, err := uuid.Parse(voice.MsgTmplateLangId)
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"rerror": err.Error(),
})
return
}
templateContent := models.MessageTemplateContenet{
ID: uuid.New(),
LanguageID: lanaguageID,
IsSms: false,
IsVoice: true,
IsDeleted: false,
FilePath: uploadPath,
Content: *fileURL,
UserID: userUUID,
// MessageTemplateID: data.ID,
}
_, err = tmplController.contents.CreateMessageTemplateContent(&templateContent, ctx)
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{
"rerror": err.Error(),
})
return
}
}
}