package controller import ( "errors" "net/http" "woord-core-service/model" "github.com/gin-gonic/gin" ) type CreateWordRequest struct { Value string `form:"value" binding:"required"` Meaning string `form:"meaning" binding:"required"` Extra string `form:"extra"` DictID uint `form:"dictID" binding:"required"` } // 创建单词 func CreateWord(c *gin.Context) { var request CreateWordRequest if err := c.ShouldBind(&request); err != nil { respondError(c, http.StatusBadRequest, err) return } _, err := model.GetDict(request.DictID, c.MustGet(AuthUserKey).(uint)) if err != nil { if errors.Is(err, model.ErrDictNotFound) { respondError(c, http.StatusNotFound, err) } else { respondUnknownError(c, err) } return } word, err := model.CreateWord(request.Value, request.Meaning, request.Extra, request.DictID) if err != nil { if errors.Is(err, model.ErrWordAlreadyExists) { respondError(c, http.StatusConflict, err) } else { respondUnknownError(c, err) } return } respondOK(c, word) } type UpdateWordRequest struct { WordID uint `form:"id" binding:"required"` Value string `form:"value" binding:"required"` Meaning string `form:"meaning" binding:"required"` Extra string `form:"extra"` Star bool `form:"star"` } // 更新单词 func UpdateWord(c *gin.Context) { var request UpdateWordRequest if err := c.ShouldBind(&request); err != nil { respondError(c, http.StatusBadRequest, err) return } _, err := model.GetWord(request.WordID, c.MustGet(AuthUserKey).(uint)) if err != nil { if errors.Is(err, model.ErrWordNotFound) { respondError(c, http.StatusNotFound, err) } else { respondUnknownError(c, err) } return } word, err := model.UpdateWord(request.WordID, request.Value, request.Meaning, request.Extra, request.Star) if err != nil { if errors.Is(err, model.ErrWordAlreadyExists) { respondError(c, http.StatusConflict, err) } else { respondUnknownError(c, err) } return } respondOK(c, word) } type DeleteWordRequest struct { WordID uint `form:"id" binding:"required"` } // 删除单词 func DeleteWord(c *gin.Context) { var request DeleteWordRequest if err := c.ShouldBind(&request); err != nil { respondError(c, http.StatusBadRequest, err) return } _, err := model.GetWord(request.WordID, c.MustGet(AuthUserKey).(uint)) if err != nil { if errors.Is(err, model.ErrWordNotFound) { respondError(c, http.StatusNotFound, err) } else { respondUnknownError(c, err) } return } err = model.DeleteWord(request.WordID) if err != nil { respondUnknownError(c, err) return } respondOK(c, nil) }