study.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package v1
  2. import (
  3. "auth-server/common"
  4. pb "auth-server/rpc_idl/dr_study_pb"
  5. "auth-server/service"
  6. "fmt"
  7. "github.com/gin-gonic/gin"
  8. "google.golang.org/protobuf/encoding/protojson"
  9. "net/http"
  10. )
  11. func CreateStudy(c *gin.Context) {
  12. request := pb.StudyRequest{}
  13. reqBytes, err := c.GetRawData()
  14. if err != nil {
  15. c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read request body"})
  16. return
  17. }
  18. unmarshaler := protojson.UnmarshalOptions{
  19. AllowPartial: true, // 允许部分解析,即使缺少必需字段
  20. DiscardUnknown: true, // 丢弃 JSON 中 Protobuf 消息未定义的字段
  21. }
  22. err = unmarshaler.Unmarshal(reqBytes, &request)
  23. if err != nil {
  24. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("Failed to unmarshal JSON to Protobuf: %v", err)})
  25. return
  26. }
  27. res, err := service.StudyClient.CreateStudy(common.GC2GM(c), &request)
  28. if err != nil {
  29. common.HttpErr(c, err)
  30. return
  31. }
  32. common.HttpSuccess(c, res)
  33. }
  34. func GetStudy(c *gin.Context) {
  35. id := c.Param("id")
  36. res, err := service.StudyClient.GetStudy(common.GC2GM(c), &id)
  37. if err != nil {
  38. common.HttpErr(c, err)
  39. return
  40. }
  41. common.HttpSuccess(c, res)
  42. }