| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 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)
- }
|