apr.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package service
  2. import (
  3. "context"
  4. "errors"
  5. "google.golang.org/grpc/codes"
  6. "google.golang.org/grpc/status"
  7. "gorm.io/gorm"
  8. "log/slog"
  9. "protocol-server/common"
  10. "protocol-server/models"
  11. )
  12. import (
  13. pb "protocol-server/rpc_idl/dr_protocol_pb"
  14. )
  15. type AprServer struct {
  16. pb.UnimplementedAprServer
  17. }
  18. func (s *AprServer) GetApr(ctx context.Context, in *pb.AprRequest) (*pb.AprReply, error) {
  19. slog.Info("[rpc]GetApr...", "view_id", in.GetViewId(), "apr_id", in.GetAprId())
  20. product, _, _, err := common.GetHeader(ctx)
  21. if err != nil {
  22. return nil, err
  23. }
  24. aprId := in.GetAprId()
  25. var view models.View
  26. if in.GetViewId() != "" {
  27. if err := models.DB.Where("view_id = ?", in.GetViewId()).First(&view).Error; err != nil {
  28. if errors.Is(err, gorm.ErrRecordNotFound) {
  29. return nil, status.Errorf(codes.NotFound, "view %s not found", in.GetViewId())
  30. }
  31. return nil, status.Errorf(codes.Internal, "view find err %v", err)
  32. }
  33. aprId = view.AprId
  34. }
  35. var apr models.Apr
  36. err = models.DB.Scopes(
  37. models.String("apr_id = ?", aprId),
  38. models.String("product = ?", product.ToString()),
  39. models.Bool("is_enabled = ?", in.IsEnabled),
  40. ).Order("sort").First(&apr).Error
  41. if err != nil {
  42. if errors.Is(err, gorm.ErrRecordNotFound) {
  43. return nil, status.Errorf(codes.NotFound, "apr %s%s not found", in.GetViewId(), in.GetAprId())
  44. }
  45. return nil, status.Errorf(codes.Internal, "apr find err %v", err)
  46. }
  47. var subs []*models.AprSub
  48. err = models.DB.Scopes(
  49. models.String("apr_id = ?", aprId),
  50. models.String("product = ?", product.ToString()),
  51. models.Bool("is_enabled = ?", in.IsEnabled),
  52. ).Order("sort").Find(&subs).Error
  53. if err != nil {
  54. return nil, status.Errorf(codes.Internal, "apr_sub find err %v", err)
  55. }
  56. res := apr2pb(&apr)
  57. for i := range subs {
  58. res.Sub = append(res.Sub, aprSub2pb(subs[i]))
  59. }
  60. return res, nil
  61. }