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("发布失败")) }