words.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package controller
  2. import (
  3. "errors"
  4. "net/http"
  5. "woord-core-service/model"
  6. "github.com/gin-gonic/gin"
  7. "gorm.io/gorm"
  8. )
  9. type ListWordsResponse struct {
  10. Total uint `json:"total"`
  11. List []model.WordResult `json:"list"`
  12. }
  13. type CreateWordRequest struct {
  14. Value string `form:"value" binding:"required"`
  15. Meaning string `form:"meaning" binding:"required"`
  16. Extra string `form:"extra"`
  17. DictID uint `form:"dictID" binding:"required"`
  18. }
  19. // 创建单词
  20. func CreateWord(c *gin.Context) {
  21. var request CreateWordRequest
  22. if err := c.ShouldBind(&request); err != nil {
  23. respondError(c, http.StatusBadRequest, err)
  24. return
  25. }
  26. _, err := model.GetDict(&model.Dict{
  27. Model: &gorm.Model{
  28. ID: request.DictID,
  29. },
  30. UserID: c.MustGet(AuthUserKey).(uint),
  31. })
  32. if err != nil {
  33. if errors.Is(err, model.ErrDictNotFound) {
  34. respondError(c, http.StatusNotFound, err)
  35. } else {
  36. respondUnknownError(c, err)
  37. }
  38. return
  39. }
  40. word, err := model.CreateWord(&model.Word{
  41. Value: request.Value,
  42. Meaning: request.Meaning,
  43. Extra: request.Extra,
  44. DictID: request.DictID,
  45. })
  46. if err != nil {
  47. if errors.Is(err, model.ErrWordAlreadyExists) {
  48. respondError(c, http.StatusConflict, err)
  49. } else {
  50. respondUnknownError(c, err)
  51. }
  52. return
  53. }
  54. respondOK(c, word)
  55. }
  56. type UpdateWordRequest struct {
  57. WordID uint `form:"id" binding:"required"`
  58. Value string `form:"value" binding:"required"`
  59. Meaning string `form:"meaning" binding:"required"`
  60. Extra string `form:"extra"`
  61. Star bool `form:"star"`
  62. }
  63. // 更新单词
  64. func UpdateWord(c *gin.Context) {
  65. var request UpdateWordRequest
  66. if err := c.ShouldBind(&request); err != nil {
  67. respondError(c, http.StatusBadRequest, err)
  68. return
  69. }
  70. word, err := model.UpdateWord(&model.Word{
  71. Model: &gorm.Model{
  72. ID: request.WordID,
  73. },
  74. Value: request.Value,
  75. Meaning: request.Meaning,
  76. Extra: request.Extra,
  77. Star: request.Star,
  78. })
  79. if err != nil {
  80. if errors.Is(err, model.ErrWordNotFound) {
  81. respondError(c, http.StatusNotFound, err)
  82. } else if errors.Is(err, model.ErrWordAlreadyExists) {
  83. respondError(c, http.StatusConflict, err)
  84. } else {
  85. respondUnknownError(c, err)
  86. }
  87. return
  88. }
  89. respondOK(c, word)
  90. }
  91. type DeleteWordRequest struct {
  92. WordID uint `form:"id" binding:"required"`
  93. }
  94. // 删除单词
  95. func DeleteWord(c *gin.Context) {
  96. var request DeleteWordRequest
  97. if err := c.ShouldBind(&request); err != nil {
  98. respondError(c, http.StatusBadRequest, err)
  99. return
  100. }
  101. err := model.DeleteWord(&model.Word{
  102. Model: &gorm.Model{
  103. ID: request.WordID,
  104. },
  105. })
  106. if err != nil {
  107. if errors.Is(err, model.ErrWordNotFound) {
  108. respondError(c, http.StatusNotFound, err)
  109. } else {
  110. respondUnknownError(c, err)
  111. }
  112. return
  113. }
  114. respondOK(c, nil)
  115. }