blog/internal/controller/admin/DiaryController.go

93 lines
2.2 KiB
Go

package admin
import (
"blog/internal/async"
"blog/internal/model/AjaxResult"
"blog/internal/model/admin"
"blog/internal/model/vo"
"blog/third_party/database"
"strings"
"time"
"github.com/google/uuid"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/sessions"
"github.com/mitchellh/mapstructure"
"gorm.io/gorm"
)
/*
日记管理
*/
type DiaryController struct {
Ctx iris.Context
Session *sessions.Session
}
func (ctrl *DiaryController) Get() {
ctrl.Ctx.View("/admin/diary/index.html")
}
func (ctrl *DiaryController) PostSubmit() {
session := sessions.Get(ctrl.Ctx)
var userMap map[string]string
session.Decode("user", &userMap)
var user admin.SysUser
mapstructure.Decode(userMap, &user)
userId := user.Id
content := ctrl.Ctx.FormValue("content")
var err error
diaryId := uuid.NewString()
database.GormTemplate.Transaction(func(tx *gorm.DB) error {
now := time.Now().UnixMilli()
diary := admin.AdminDiary{Id: diaryId, PublishTime: now, Del: 0, CreateTime: now, CreateBy: userId}
ctn := vo.CommonContent{Id: uuid.NewString(), RelId: diaryId, Content: content}
err = tx.Table("common_contents").Create(ctn).Error
if err != nil {
return err
}
files, headers, fileErr := ctrl.Ctx.FormFiles("file")
if fileErr != nil {
err = fileErr
return fileErr
}
fileIds := []string{}
for i, file := range files {
defer file.Close()
header := headers[i]
var bytes []byte = make([]byte, header.Size)
_, err = file.Read(bytes)
if err != nil {
return err
}
fileName := header.Filename
fileId := uuid.NewString()
fileIds = append(fileIds, fileId)
sysFile := admin.SysFile{Id: fileId, FileName: fileName, Data: bytes, Sort: i, Del: 0, CreateBy: userId, CreateTime: now}
err = tx.Table("common_files").Create(&sysFile).Error
if err != nil {
return err
}
}
if len(fileIds) > 0 {
diary.Images = strings.Join(fileIds, ",")
}
err := tx.Table("blog_diaries").Create(&diary).Error
if err != nil {
return err
}
return nil
})
if err != nil {
async.PublishDiary(diaryId)
ctrl.Ctx.JSON(AjaxResult.OkMsg("发布成功", nil))
return
}
ctrl.Ctx.JSON(AjaxResult.Error("发布失败"))
}