質問編集履歴

6

修正

2016/09/27 06:30

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,20 +1,26 @@
1
+ DBから取ってきた値をjson形式で、ストラクトにマップし、それを別のストラクトにアサインした後にアップデート(変更)を加え、またストラクトにマップしたいと思っているのですが、手法が浮かばず悩んでいいます。
2
+
3
+ この方法をとらないといけないです。(訳ありです(割愛))
4
+
5
+
6
+
1
- 急です。
7
+ 急です。
8
+
9
+
10
+
2
-
11
+ どなたかわかるかたいたら教えてください。
12
+
13
+
14
+
3
-
15
+ 例文コードになりますが、動くかは検証していません。おそらくお動きません.
16
+
4
-
17
+ こんな感じのことがしたいということだけ読み取っていただけたらと思います。
18
+
19
+ 少しでも情報があれば提供してくださると助かります。
20
+
21
+
22
+
5
- 言葉で説明するが難しいですが
23
+ ```全体ストラクト
6
-
7
-
8
-
9
-
10
-
11
- structが2つあり1つは全体としてのstructで、もう一つが変更等を加えるためだけのstructとして2つ存在します。今書いているコードで書けないので、とても適当ではありますが,,,,わかる方いましたらお願いします.
12
-
13
-
14
-
15
- 全体
16
-
17
- ```
18
24
 
19
25
  type Post struct{
20
26
 
@@ -38,9 +44,29 @@
38
44
 
39
45
 
40
46
 
47
+ ```jsonで取ってきた値のストラクト
48
+
41
- アップデート項目(bindingしている方)
49
+ type PostView struct{
50
+
42
-
51
+ Id: int64 ` json:"id"`
52
+
53
+ UserId: int64 ` json:"userid"`
54
+
55
+ Title: string ` json:"title"`
56
+
57
+ Content: string ` json:"content"`
58
+
59
+ DeletedAt: *time.Time `json:"deltedAt"`
60
+
61
+ CreatedAt: *time.Time `json:"createdAt"`
62
+
63
+ UpdatedAt: *time.Time ` json:"updatedAt"`
64
+
43
- ```
65
+ ```
66
+
67
+
68
+
69
+ ```アサインしたいストラクト
44
70
 
45
71
  type PostRequestBody struct{
46
72
 
@@ -54,11 +80,9 @@
54
80
 
55
81
 
56
82
 
57
- binding
83
+ ```アサインしたいストラクトは、bindingしてある
58
-
59
- ```
84
+
60
-
61
- func(p *PostRequestBoby)FieldMap(req *http.Request) binding.fieldMap{
85
+ func(p *PostRequestBoby)FieldMap(req *http.Request) binding.FieldMap{
62
86
 
63
87
  return binding.FieldMap{
64
88
 
@@ -66,63 +90,71 @@
66
90
 
67
91
  &p.Content: "content",
68
92
 
69
- }
70
-
71
- }
72
-
73
- ```
74
-
75
-
76
-
77
- ```
78
-
79
- func UpdatPost(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
80
-
81
- userId, err := strconv.ParseInt(ps.ByName("userId"), 10, 0)
82
-
83
- helpers.CheckErr(err, "Invalid userId")
84
-
85
-
86
-
87
- postId, err = strconv.ParseInt(ps.ByName("postId"), 10, 0)
88
-
89
- helpers.CheckErr(err, "Invalid postId")
90
-
91
-
92
-
93
- user := models.GetUser(userId)
94
-
95
-
96
-
97
- switch user.GroupeId {
98
-
99
- case 4:
100
-
101
- s := models.Post(PostId)//
102
-
103
- //s := new(models.PostRequestBody)く作のはわかります。
104
-
105
-
106
-
107
- errs := binding.Bind(req, s)
108
-
109
- if errs.Len() > 0 {
110
-
111
- log.Println(errs)
112
-
113
- R.JSON(w, 422, errs)
114
-
115
- return
116
-
117
- }
93
+ }
94
+
95
+ }
96
+
97
+ ```
98
+
99
+
100
+
101
+ ```アップデートfunction
102
+
103
+ func UpdatePost(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
104
+
105
+ userId, err := strconv.ParseInt(ps.ByName("userId"), 10, 0)
106
+
107
+ helpers.CheckErr(err, "Invalid userId")
108
+
109
+
110
+
111
+ postId, err = strconv.ParseInt(ps.ByName("postId"), 10, 0)
112
+
113
+ helpers.CheckErr(err, "Invalid postId")
114
+
115
+
116
+
117
+ user := models.GetUser(userId)
118
+
119
+
120
+
121
+ switch user.GroupeId {
122
+
123
+ case 1:
124
+
125
+ p := models.GetPost(postId)
126
+
127
+ //リクエスト取ってきた記事がストラクトとて取得でき
128
+
129
+ //でもbindingしていないから以降ではエラーが発生する
130
+
131
+ //取得した値をRequestBodyに当てはめbindingを成立させ、変更を以下の変更を行いたい
132
+
133
+
134
+
135
+ //p := new(models.PostRequestBody)
136
+
137
+
138
+
139
+ errs := binding.Bind(req, p)
140
+
141
+ if errs.Len() > 0 {
142
+
143
+ log.Println(errs)
144
+
145
+ R.JSON(w, 422, errs)
146
+
147
+ return
148
+
149
+ }
118
150
 
119
151
 
120
152
 
121
153
  post := models.Post{
122
154
 
123
- Title: title,
155
+ Title: p.title,
124
-
156
+
125
- Content: content,
157
+ Content: p.content,
126
158
 
127
159
  }
128
160
 
@@ -130,22 +162,42 @@
130
162
 
131
163
  R.JSON(w, httpStatusOK, models.UpdatePost(post))
132
164
 
165
+ }
166
+
133
- ```
167
+ ```
134
-
135
-
136
-
168
+
169
+
170
+
137
- 今やっているコードで書けないので、このコードはとてつもなく適当ですが、ご容赦ください...
171
+ ```UpdatePost
138
-
139
-
140
-
172
+
141
- やりたいことは、アップデートしたいものを取得し(UpdatePostファンクションのs := の部分)てから
173
+ func UpdatePost(post Post) Post {
142
-
174
+
143
- 最終的には、変更を加えたものを保存したいと思います。
175
+ trans, err := DbMap.Begin()
176
+
144
-
177
+ helpers.CheckErr(err, "Start new transaction failed")
145
-
146
-
178
+
179
+
180
+
147
- わかる方いましたらご教授ください。
181
+ now := time.Now()
182
+
148
-
183
+ post.UpdatedAt = &now
184
+
185
+
186
+
149
-
187
+ _, err = trans.Update(&post)
188
+
150
-
189
+ CheckTransErr(trans, err, "Update post failed")
190
+
191
+
192
+
151
- また例えが書けそうであれば更新します。
193
+ err = trans.Commit()
194
+
195
+ CheckTransErr(trans, err, "Commit transaction failed")
196
+
197
+
198
+
199
+ return post
200
+
201
+ }
202
+
203
+ ```

5

修正

2016/09/27 06:29

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -126,7 +126,9 @@
126
126
 
127
127
  }
128
128
 
129
+
130
+
129
- ......
131
+ R.JSON(w, httpStatusOK, models.UpdatePost(post))
130
132
 
131
133
  ```
132
134
 
@@ -136,7 +138,7 @@
136
138
 
137
139
 
138
140
 
139
- やりたいことは、アップデートしたいものを取得し(UpdatePostのs := の部分)てから
141
+ やりたいことは、アップデートしたいものを取得し(UpdatePostファンクションのs := の部分)てから
140
142
 
141
143
  最終的には、変更を加えたものを保存したいと思います。
142
144
 

4

付け加え

2016/09/26 10:34

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- structが2つあり1つは全体としてのstructで、もう一つが変更等を加えるためだけのstructとして2つ存在します。例えばですが,,,
11
+ structが2つあり1つは全体としてのstructで、もう一つが変更等を加えるためだけのstructとして2つ存在します。今書いているコード書けないので、とても適当ではありますが,,,,わかる方いましたらお願いします.
12
12
 
13
13
 
14
14
 

3

変更

2016/09/26 10:24

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -20,17 +20,17 @@
20
20
 
21
21
  Id: int64 `db:"id" json:"id"`
22
22
 
23
- UserId int64 `db:"userid" json:"userid"`
23
+ UserId: int64 `db:"userid" json:"userid"`
24
24
 
25
25
  Title: string `db:"title" json:"title"`
26
26
 
27
- Content string `db:"content" json:"content"`
27
+ Content: string `db:"content" json:"content"`
28
28
 
29
- DeletedAt *time.Time `db:"deleted_at" json:"deltedAt"`
29
+ DeletedAt: *time.Time `db:"deleted_at" json:"deltedAt"`
30
30
 
31
- CreatedAt *time.Time `db:"created_at" json:"createdAt"`
31
+ CreatedAt: *time.Time `db:"created_at" json:"createdAt"`
32
32
 
33
- UpdatedAt *time.Time `db:"updated_at" json:"updatedAt"`
33
+ UpdatedAt: *time.Time `db:"updated_at" json:"updatedAt"`
34
34
 
35
35
  }
36
36
 

2

コード加えました\.適当ですが雰囲気でとってもらえるとありがたいです泣

2016/09/26 10:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,17 +8,137 @@
8
8
 
9
9
 
10
10
 
11
- structが2つあり1つは全体としてのstructで、もう一つが変更等を加えるためだけのstructとして2つ存在します。
11
+ structが2つあり1つは全体としてのstructで、もう一つが変更等を加えるためだけのstructとして2つ存在します。例えばですが,,,
12
12
 
13
13
 
14
14
 
15
+ 全体
16
+
17
+ ```
18
+
19
+ type Post struct{
20
+
15
- bindingしている方は後者の変更等のみを加えるstructでもう一つの方は、bindingしていません。
21
+ Id: int64 `db:"id" json:"id"`
22
+
23
+ UserId int64 `db:"userid" json:"userid"`
24
+
25
+ Title: string `db:"title" json:"title"`
26
+
27
+ Content string `db:"content" json:"content"`
28
+
29
+ DeletedAt *time.Time `db:"deleted_at" json:"deltedAt"`
30
+
31
+ CreatedAt *time.Time `db:"created_at" json:"createdAt"`
32
+
33
+ UpdatedAt *time.Time `db:"updated_at" json:"updatedAt"`
34
+
35
+ }
36
+
37
+ ```
16
38
 
17
39
 
18
40
 
19
- やりたいことは、全体を取得し、それに対してbindingしている方で変更を加えたいと思っています。
41
+ アップデート項目(bindingしている方)
20
42
 
43
+ ```
44
+
45
+ type PostRequestBody struct{
46
+
47
+ Title: string
48
+
49
+ Content: string
50
+
51
+ }
52
+
53
+ ```
54
+
55
+
56
+
57
+ binding
58
+
59
+ ```
60
+
61
+ func(p *PostRequestBoby)FieldMap(req *http.Request) binding.fieldMap{
62
+
63
+ return binding.FieldMap{
64
+
65
+ &p.Title: "title",
66
+
67
+ &p.Content: "content",
68
+
69
+ }
70
+
71
+ }
72
+
73
+ ```
74
+
75
+
76
+
77
+ ```
78
+
79
+ func UpdatPost(w http.ResponseWriter, req *http.Request, ps httprouter.Params) {
80
+
81
+ userId, err := strconv.ParseInt(ps.ByName("userId"), 10, 0)
82
+
83
+ helpers.CheckErr(err, "Invalid userId")
84
+
85
+
86
+
87
+ postId, err = strconv.ParseInt(ps.ByName("postId"), 10, 0)
88
+
89
+ helpers.CheckErr(err, "Invalid postId")
90
+
91
+
92
+
93
+ user := models.GetUser(userId)
94
+
95
+
96
+
97
+ switch user.GroupeId {
98
+
99
+ case 4:
100
+
101
+ s := models.Post(PostId)//
102
+
103
+ //s := new(models.PostRequestBody)で新しく作るのはわかります。
104
+
105
+
106
+
107
+ errs := binding.Bind(req, s)
108
+
109
+ if errs.Len() > 0 {
110
+
111
+ log.Println(errs)
112
+
113
+ R.JSON(w, 422, errs)
114
+
115
+ return
116
+
117
+ }
118
+
119
+
120
+
121
+ post := models.Post{
122
+
123
+ Title: title,
124
+
125
+ Content: content,
126
+
127
+ }
128
+
129
+ ......
130
+
131
+ ```
132
+
133
+
134
+
135
+ 今やっているコードで書けないので、このコードはとてつもなく適当ですが、ご容赦ください...
136
+
137
+
138
+
139
+ やりたいことは、アップデートしたいものを取得し(UpdatePostのs := の部分)てから
140
+
21
- 最終的には、変更を加えたものを全体像のstructにmapしたいと考えています。
141
+ 最終的には、変更を加えたものを保存したいといます。
22
142
 
23
143
 
24
144
 

1

2016/09/26 10:21

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- bindingに指定していないstructbindingmapしたい。
1
+ データアップデートしたい。
test CHANGED
File without changes