fix: 修复评价争议参与者 ID 映射
This commit is contained in:
@@ -9,4 +9,5 @@ type Config struct {
|
||||
rest.RestConf
|
||||
ReviewRpcConf zrpc.RpcClientConf
|
||||
OrderRpcConf zrpc.RpcClientConf
|
||||
PlayerRpcConf zrpc.RpcClientConf
|
||||
}
|
||||
|
||||
@@ -5,10 +5,13 @@ package review
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"juwan-backend/app/order/rpc/orderservice"
|
||||
"juwan-backend/app/review/api/internal/svc"
|
||||
"juwan-backend/app/review/api/internal/types"
|
||||
reviewpb "juwan-backend/app/review/rpc/pb"
|
||||
"juwan-backend/common/utils/contextj"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
@@ -29,11 +32,30 @@ func NewGetOrderReviewsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *G
|
||||
}
|
||||
|
||||
func (l *GetOrderReviewsLogic) GetOrderReviews(req *types.GetOrderReviewsReq) (resp *types.ReviewListResp, err error) {
|
||||
uid, err := contextj.UserIDFrom(l.ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
orderResp, err := l.svcCtx.OrderRpc.GetOrdersById(l.ctx, &orderservice.GetOrdersByIdReq{Id: req.Id})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
order := orderResp.GetOrders()
|
||||
consumerID, playerUserID, err := orderParticipantUserIDs(l.ctx, l.svcCtx, order)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if uid != consumerID && uid != playerUserID {
|
||||
return nil, errors.New("not a participant of this order")
|
||||
}
|
||||
|
||||
orderId := req.Id
|
||||
sealed := false
|
||||
result, err := l.svcCtx.ReviewRpc.SearchReviews(l.ctx, &reviewpb.SearchReviewsReq{
|
||||
Offset: 0,
|
||||
Limit: 10,
|
||||
OrderId: &orderId,
|
||||
Sealed: &sealed,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package review
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"juwan-backend/app/order/rpc/orderservice"
|
||||
"juwan-backend/app/player/rpc/playerservice"
|
||||
"juwan-backend/app/review/api/internal/svc"
|
||||
"juwan-backend/app/review/api/internal/types"
|
||||
reviewpb "juwan-backend/app/review/rpc/pb"
|
||||
)
|
||||
@@ -26,3 +31,18 @@ func toAPIReview(r *reviewpb.Reviews) types.Review {
|
||||
CreatedAt: formatUnix(r.GetCreatedAt()),
|
||||
}
|
||||
}
|
||||
|
||||
func orderParticipantUserIDs(ctx context.Context, svcCtx *svc.ServiceContext, order *orderservice.Orders) (int64, int64, error) {
|
||||
if order == nil {
|
||||
return 0, 0, errors.New("order not found")
|
||||
}
|
||||
playerResp, err := svcCtx.PlayerRpc.GetPlayersById(ctx, &playerservice.GetPlayersByIdReq{Id: order.GetPlayerId()})
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
player := playerResp.GetPlayers()
|
||||
if player == nil || player.GetUserId() <= 0 {
|
||||
return 0, 0, errors.New("player not found")
|
||||
}
|
||||
return order.GetConsumerId(), player.GetUserId(), nil
|
||||
}
|
||||
|
||||
@@ -46,13 +46,18 @@ func (l *SubmitReviewLogic) SubmitReview(req *types.SubmitReviewReq) (resp *type
|
||||
return nil, errors.New("order is not in pending_review status")
|
||||
}
|
||||
|
||||
consumerID, playerUserID, err := orderParticipantUserIDs(l.ctx, l.svcCtx, order)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var fromUserId, toUserId int64
|
||||
if uid == order.GetConsumerId() {
|
||||
fromUserId = order.GetConsumerId()
|
||||
toUserId = order.GetPlayerId()
|
||||
} else if uid == order.GetPlayerId() {
|
||||
fromUserId = order.GetPlayerId()
|
||||
toUserId = order.GetConsumerId()
|
||||
if uid == consumerID {
|
||||
fromUserId = consumerID
|
||||
toUserId = playerUserID
|
||||
} else if uid == playerUserID {
|
||||
fromUserId = playerUserID
|
||||
toUserId = consumerID
|
||||
} else {
|
||||
return nil, errors.New("not a participant of this order")
|
||||
}
|
||||
@@ -82,22 +87,28 @@ func (l *SubmitReviewLogic) SubmitReview(req *types.SubmitReviewReq) (resp *type
|
||||
now := time.Now().Unix()
|
||||
sealed := false
|
||||
for _, r := range existing.GetReviews() {
|
||||
_, _ = l.svcCtx.ReviewRpc.UpdateReviews(l.ctx, &reviewpb.UpdateReviewsReq{
|
||||
_, err = l.svcCtx.ReviewRpc.UpdateReviews(l.ctx, &reviewpb.UpdateReviewsReq{
|
||||
Id: r.GetId(),
|
||||
Sealed: &sealed,
|
||||
UnsealedAt: &now,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
completedStatus := "completed"
|
||||
completedAt := now
|
||||
updatedAt := now
|
||||
_, _ = l.svcCtx.OrderRpc.UpdateOrders(l.ctx, &orderservice.UpdateOrdersReq{
|
||||
_, err = l.svcCtx.OrderRpc.UpdateOrders(l.ctx, &orderservice.UpdateOrdersReq{
|
||||
Id: req.Id,
|
||||
Status: &completedStatus,
|
||||
CompletedAt: &completedAt,
|
||||
UpdatedAt: &updatedAt,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &types.EmptyResp{}, nil
|
||||
|
||||
@@ -2,6 +2,7 @@ package svc
|
||||
|
||||
import (
|
||||
"juwan-backend/app/order/rpc/orderservice"
|
||||
"juwan-backend/app/player/rpc/playerservice"
|
||||
"juwan-backend/app/review/api/internal/config"
|
||||
"juwan-backend/app/review/rpc/reviewservice"
|
||||
|
||||
@@ -12,6 +13,7 @@ type ServiceContext struct {
|
||||
Config config.Config
|
||||
ReviewRpc reviewservice.ReviewService
|
||||
OrderRpc orderservice.OrderService
|
||||
PlayerRpc playerservice.PlayerService
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
@@ -19,5 +21,6 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
||||
Config: c,
|
||||
ReviewRpc: reviewservice.NewReviewService(zrpc.MustNewClient(c.ReviewRpcConf)),
|
||||
OrderRpc: orderservice.NewOrderService(zrpc.MustNewClient(c.OrderRpcConf)),
|
||||
PlayerRpc: playerservice.NewPlayerService(zrpc.MustNewClient(c.PlayerRpcConf)),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user