package main import ( "path/filepath" "strconv" "strings" "time" "github.com/gin-gonic/gin" "github.com/google/uuid" "github.com/line/line-bot-sdk-go/v7/linebot" "github.com/rs/zerolog/log" ) func ApiUpdateEmail(c *gin.Context) { data := struct { ID string `json:"id" binding:"required"` Email string `json:"email" binding:"required,email"` }{} if err := c.ShouldBindJSON(&data); err != nil { panic(err) } usr := &User{} if err := DB.First(usr, "id = ?", data.ID).Error; err != nil { // create user fallback log.Error().Err(err).Msg("No User") } DB.Model(&User{}).Where("id = ?", data.ID).Update("email", data.Email) OK(c, "ok") msg := linebot.NewTextMessage("更新成功!") sticker := linebot.NewStickerMessage("1070", "17840") SendMessage("", data.ID, msg, sticker) go func() { time.Sleep(time.Second * 2) SendMessage("", data.ID, DefaultMsg()) }() } func ApiPostReceipt(c *gin.Context) { oid := c.Param("oid") if oid == "" { panic(ErrorBadRequest) } // order exists order := &Order{} if err := DB.First(order, "id = ?", oid).Error; err != nil { panic(err) } // get file f, err := c.FormFile("file") if err != nil { panic(err) } id := uuid.New() ext := filepath.Ext(f.Filename) storedFileName := strings.Replace(id.String(), "-", "", -1) + ext t := time.Now() dir := filepath.Join( strconv.Itoa(t.Year()), strconv.Itoa(int(t.Month())), ) dest := filepath.Join( "attachment", dir, ) Mkdir(dest) // save file dest = filepath.Join(dest, storedFileName) if err = c.SaveUploadedFile(f, dest); err != nil { panic(err) } if err = DB.Model(order).Update("attachment", filepath.Join(dir, storedFileName)). Error; err != nil { panic(err) } OK(c, "ok") }