shao 1 day ago
parent
commit
b87b0fa307
3 changed files with 33 additions and 16 deletions
  1. 12 0
      common/response.go
  2. 16 11
      models/setup.go
  3. 5 5
      service/pb_protocol.go

+ 12 - 0
common/response.go

@@ -4,6 +4,8 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
 	"log"
 	"log/slog"
 	"net/http"
@@ -84,6 +86,16 @@ func ErrToH(err interface{}, locale string) gin.H {
 		if errors.Is(err.(error), gorm.ErrRecordNotFound) {
 			return NotExists.Translator(GetTrans(locale)).H()
 		}
+		if st, ok := status.FromError(err.(error)); ok {
+			switch st.Code() {
+			case codes.NotFound:
+				return NotExists.Desc(ResDesc(st.Message())).Translator(GetTrans(locale)).H()
+			case codes.InvalidArgument:
+				return InvalidParam.Desc(ResDesc(st.Message())).Translator(GetTrans(locale)).H()
+			default:
+				slog.Error("[rpc]Unrecognized grpc error", "err", err, "code", st.Code(), "msg", st.Message())
+			}
+		}
 		slog.Error("uncaught error occurred", "type", reflect.TypeOf(err), "err", err, "stack", string(debug.Stack()))
 		h = Unknown.Desc(ResDesc(fmt.Sprintf("%v", err))).Translator(GetTrans(locale)).H()
 	}

+ 16 - 11
models/setup.go

@@ -27,14 +27,14 @@ func panicHelper(err error) {
 	}
 }
 
-func migrate() {
-	panicHelper(DB.AutoMigrate(&User{}))
+func migrate(db *gorm.DB) {
+	panicHelper(db.AutoMigrate(&User{}))
 	var user User
-	err := DB.First(&user).Error
+	err := db.First(&user).Error
 	if errors.Is(err, gorm.ErrRecordNotFound) {
 		newAdmin := User{Name: "admin"}
-		newAdmin.GenerateFromPassword([]byte("123456"))
-		DB.Create(&newAdmin)
+		panicHelper(newAdmin.GenerateFromPassword([]byte("123456")))
+		db.Create(&newAdmin)
 	}
 }
 
@@ -48,6 +48,16 @@ func SetupGorm(m bool) {
 		common.PostgresConfig.Name,
 		common.PostgresConfig.Port,
 	)
+	if m {
+		db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
+		panicHelper(err)
+
+		migrate(db)
+
+		sqlDB, err := db.DB()
+		panicHelper(err)
+		panicHelper(sqlDB.Close())
+	}
 	if common.LoggerConfig.LogLevel == "debug" {
 		DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
 			Logger: logger.NewGormLogger(logger.WithGroup("gorm")),
@@ -55,11 +65,6 @@ func SetupGorm(m bool) {
 	} else {
 		DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
 	}
-	if err != nil {
-		panic(err)
-	}
-	if m {
-		migrate()
-	}
+	panicHelper(err)
 	slog.Info("setup gorm ok")
 }

+ 5 - 5
service/pb_protocol.go

@@ -41,7 +41,7 @@ func (s *Protocol) GetSoftwareInfo() *pb.SoftwareInfoReply {
 	slog.Info("[rpc]SoftwareInfo...")
 	r, err := s.basicClient.SoftwareInfo(context.Background(), &pb.EmptyRequest{})
 	if err != nil {
-		slog.Error("[rpc]SoftwareInfo failed:", err)
+		slog.Error("[rpc]SoftwareInfo failed", "err", err)
 		return &pb.SoftwareInfoReply{
 			Module:  "",
 			Desc:    "",
@@ -58,7 +58,7 @@ func (s *Protocol) GetPatientType(ctx context.Context, isEnabled *bool) (*pb.Pat
 		IsEnabled: isEnabled,
 	})
 	if err != nil {
-		slog.Error("[rpc]GetPatientType failed:", err)
+		slog.Error("[rpc]GetPatientType failed", "err", err)
 	}
 	slog.Info("[rpc]GetPatientType result:", "rows", len(r.PatientTypeList))
 	return r, err
@@ -72,7 +72,7 @@ func (s *Protocol) GetBodyPart(ctx context.Context, patientType *string, modalit
 		IsEnabled:   isEnabled,
 	})
 	if err != nil {
-		slog.Error("[rpc]GetPatientType failed:", err)
+		slog.Error("[rpc]GetBodyPart failed", "err", err)
 	}
 	return r, err
 }
@@ -85,7 +85,7 @@ func (s *Protocol) GetProcedure(ctx context.Context, patientType *string, bodyPa
 		IsEnabled:   isEnabled,
 	})
 	if err != nil {
-		slog.Error("[rpc]GetProcedure failed:", err)
+		slog.Error("[rpc]GetProcedure failed", "err", err)
 	}
 	return r, err
 }
@@ -99,7 +99,7 @@ func (s *Protocol) GetView(ctx context.Context, patientType *string, bodyPart *s
 		IsEnabled:   isEnabled,
 	})
 	if err != nil {
-		slog.Error("[rpc]GetView failed:", err)
+		slog.Error("[rpc]GetView failed", "err", err)
 	}
 	return r, err
 }