package v1 import ( "auth-server/common" pb "auth-server/rpc_idl/dr_study_pb" "auth-server/service" "fmt" "github.com/gin-gonic/gin" "google.golang.org/protobuf/encoding/protojson" "net/http" ) func CreateStudy(c *gin.Context) { request := pb.StudyRequest{} reqBytes, err := c.GetRawData() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read request body"}) return } unmarshaler := protojson.UnmarshalOptions{ AllowPartial: true, // 允许部分解析,即使缺少必需字段 DiscardUnknown: true, // 丢弃 JSON 中 Protobuf 消息未定义的字段 } err = unmarshaler.Unmarshal(reqBytes, &request) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("Failed to unmarshal JSON to Protobuf: %v", err)}) return } res, err := service.StudyClient.CreateStudy(common.GC2GM(c), &request) if err != nil { common.HttpErr(c, err) return } common.HttpSuccess(c, res) } func GetStudy(c *gin.Context) { id := c.Param("id") res, err := service.StudyClient.GetStudy(common.GC2GM(c), &id) if err != nil { common.HttpErr(c, err) return } common.HttpSuccess(c, res) } func CreateImage(c *gin.Context) { request := pb.CreateImageRequest{} reqBytes, err := c.GetRawData() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read request body"}) return } unmarshaler := protojson.UnmarshalOptions{ AllowPartial: true, // 允许部分解析,即使缺少必需字段 DiscardUnknown: true, // 丢弃 JSON 中 Protobuf 消息未定义的字段 } err = unmarshaler.Unmarshal(reqBytes, &request) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("Failed to unmarshal JSON to Protobuf: %v", err)}) return } res, err := service.StudyClient.CreateImage(common.GC2GM(c), &request) if err != nil { common.HttpErr(c, err) return } common.HttpSuccess(c, res) } func CopyImage(c *gin.Context) { request := pb.IDRequest{} reqBytes, err := c.GetRawData() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read request body"}) return } unmarshaler := protojson.UnmarshalOptions{ AllowPartial: true, // 允许部分解析,即使缺少必需字段 DiscardUnknown: true, // 丢弃 JSON 中 Protobuf 消息未定义的字段 } err = unmarshaler.Unmarshal(reqBytes, &request) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("Failed to unmarshal JSON to Protobuf: %v", err)}) return } if request.InstanceId == nil { common.HttpErr(c, common.InvalidParam.SetParam("Name", "instance_id")) return } res, err := service.StudyClient.CopyImage(common.GC2GM(c), &request) if err != nil { common.HttpErr(c, err) return } common.HttpSuccess(c, res) } func SortImage(c *gin.Context) { request := pb.SortRequest{} reqBytes, err := c.GetRawData() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read request body"}) return } unmarshaler := protojson.UnmarshalOptions{ AllowPartial: true, // 允许部分解析,即使缺少必需字段 DiscardUnknown: true, // 丢弃 JSON 中 Protobuf 消息未定义的字段 } err = unmarshaler.Unmarshal(reqBytes, &request) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("Failed to unmarshal JSON to Protobuf: %v", err)}) return } res, err := service.StudyClient.SortImage(common.GC2GM(c), &request) if err != nil { common.HttpErr(c, err) return } common.HttpSuccess(c, res) } func DeleteImage(c *gin.Context) { id := c.Param("id") res, err := service.StudyClient.DeleteImage(common.GC2GM(c), &id) if err != nil { common.HttpErr(c, err) return } common.HttpSuccess(c, res) }