DBから取ってきた値をjson形式で、ストラクトにマップし、それを別のストラクトにアサインした後にアップデート(変更)を加え、またストラクトにマップしたいと思っているのですが、手法が浮かばず悩んでいいます。
この方法をとらないといけないです。(訳ありです(割愛))
早急です。
どなたかわかるかたいたら教えてください。
例文コードになりますが、動くかは検証していません。おそらくお動きません.
こんな感じのことがしたいということだけ読み取っていただけたらと思います。
少しでも情報があれば提供してくださると助かります。
type Post struct{ Id: int64 `db:"id" json:"id"` UserId: int64 `db:"userid" json:"userid"` Title: string `db:"title" json:"title"` Content: string `db:"content" json:"content"` DeletedAt: *time.Time `db:"deleted_at" json:"deltedAt"` CreatedAt: *time.Time `db:"created_at" json:"createdAt"` UpdatedAt: *time.Time `db:"updated_at" json:"updatedAt"` }
jsonで取ってきた値のストラクト
1type PostView struct{ 2Id: int64 ` json:"id"` 3UserId: int64 ` json:"userid"` 4Title: string ` json:"title"` 5Content: string ` json:"content"` 6DeletedAt: *time.Time `json:"deltedAt"` 7CreatedAt: *time.Time `json:"createdAt"` 8UpdatedAt: *time.Time ` json:"updatedAt"`
type PostRequestBody struct{ Title: string Content: string }
func(p *PostRequestBoby)FieldMap(req *http.Request) binding.FieldMap{ return binding.FieldMap{ &p.Title: "title", &p.Content: "content", } }
func UpdatePost(w http.ResponseWriter, req *http.Request, ps httprouter.Params) { userId, err := strconv.ParseInt(ps.ByName("userId"), 10, 0) helpers.CheckErr(err, "Invalid userId") postId, err = strconv.ParseInt(ps.ByName("postId"), 10, 0) helpers.CheckErr(err, "Invalid postId") user := models.GetUser(userId) switch user.GroupeId { case 1: p := models.GetPost(postId) //リクエストで取ってきた記事がストラクトとして取得できる //でもbindingしていないから以降ではエラーが発生する //取得した値をRequestBodyに当てはめbindingを成立させ、変更を以下の変更を行いたい //p := new(models.PostRequestBody) errs := binding.Bind(req, p) if errs.Len() > 0 { log.Println(errs) R.JSON(w, 422, errs) return } post := models.Post{ Title: p.title, Content: p.content, } R.JSON(w, httpStatusOK, models.UpdatePost(post)) }
UpdatePost
1func UpdatePost(post Post) Post { 2 trans, err := DbMap.Begin() 3 helpers.CheckErr(err, "Start new transaction failed") 4 5 now := time.Now() 6 post.UpdatedAt = &now 7 8 _, err = trans.Update(&post) 9 CheckTransErr(trans, err, "Update post failed") 10 11 err = trans.Commit() 12 CheckTransErr(trans, err, "Commit transaction failed") 13 14 return post 15}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。