POSTデータがpassword, emailでリクエストし、GinのBindJsonで、Modelの構造体をbindするときに、以下のように定義し、Saveしたら、Thumbnailが空文字になりました。
go
1type User struct { 2 ID uint 3 Email string 4 Password string 5 Thumbnail string 6 ... 7}
空文字で保存されるのは、嫌なので、以下の様に、モデルの構造体の文字列は、ポインタにしました。
そうすると、POST値をバインドしてないカラムは、NULLになりました。
go
1type User struct { 2 ID uint 3 Email *string 4 Password *string 5 Thumbnail *string 6 ... 7}
しかし、よく考えると、以下の様に、POSTデータを一部を変更して保存する時とか面倒だなと思いました。
go
1func SignUp(c *gin.Context) { 2 var u models.User 3 if err := c.BindJSON(&u); err != nil { 4 c.JSON(400, err) 5 return 6 } 7 8 password := PasswordEncode(*u.Password) <- 一旦実体を取り出して、 9 mgr := GetOrmManager().Gorm; 10 11 if !mgr.Where("email = ? AND password = ?", u.Email, password).First(&u).RecordNotFound() { 12 c.JSON(400, "alalalala") 13 return 14 } 15 16 u.Password = &password <- また、ポインタに直す 17 rn := MakeRandomStr(30) 18 u.EmailAuthToken = &rn 19 ...
GinとGormでサービス運用されている方は、これってどうしてるのですか?
リクエストのPOSTの構造体を作って、BindJsonして、その構造体をModelの構造体にセットし直しているとかですか?
あなたの回答
tips
プレビュー