diff --git a/original/assets/js/app.js b/original/assets/js/app.js index 9bd3ef5..f5978be 100644 --- a/original/assets/js/app.js +++ b/original/assets/js/app.js @@ -115,7 +115,7 @@ const index = this.messages.findIndex(m => { return m.id === updatedMessage.id }) - Vue.set(this.messages, index, updatedMessage) + Vue.set(this.messages, index, response.result) }) }, clearMessage() { diff --git a/original/controller/message.go b/original/controller/message.go index d914b3d..03ea20e 100644 --- a/original/controller/message.go +++ b/original/controller/message.go @@ -4,6 +4,7 @@ import ( "database/sql" "errors" "net/http" + "strconv" "github.com/VG-Tech-Dojo/vg-1day-2018-06-10/original/httputil" "github.com/VG-Tech-Dojo/vg-1day-2018-06-10/original/model" @@ -96,7 +97,34 @@ func (m *Message) Create(c *gin.Context) { func (m *Message) UpdateByID(c *gin.Context) { // Mission 1-1. メッセージを編集しよう // ... - c.JSON(http.StatusCreated, gin.H{}) + var msg model.Message + + if err := c.BindJSON(&msg); err != nil { + resp := httputil.NewErrorResponse(err) + c.JSON(http.StatusInternalServerError, resp) + return + } + + i := c.Param("id") + id, err := strconv.ParseInt(i, 10, 64) + if err != nil { + resp := httputil.NewErrorResponse(err) + c.JSON(http.StatusBadRequest, resp) + return + } + + msg.ID = id + updated, err := msg.Update(m.DB) + if err != nil { + resp := httputil.NewErrorResponse(err) + c.JSON(http.StatusInternalServerError, resp) + return + } + + c.JSON(http.StatusOK, gin.H{ + "result": updated, + "error": nil, + }) } // DeleteByID は... diff --git a/original/model/message.go b/original/model/message.go index 7c2ee3b..aeab2c0 100644 --- a/original/model/message.go +++ b/original/model/message.go @@ -2,6 +2,7 @@ package model import ( "database/sql" + "strconv" ) // Message はメッセージの構造体です @@ -70,6 +71,20 @@ func (m *Message) Insert(db *sql.DB) (*Message, error) { // Mission 1-1. メッセージを編集しよう // ... +func (m *Message) Update(db *sql.DB) (*Message, error) { + _, err := db.Exec(`UPDATE message SET body=? WHERE id = ?`, m.Body, m.ID) + if err != nil { + return nil, err + } + + id := strconv.FormatInt(m.ID, 10) + msg, err := MessageByID(db, id) + if err != nil { + return nil, err + } + + return msg, nil +} // Mission 1-2. メッセージを削除しよう // ...