2026-06-25 19:57:16 +08:00

95 lines
3.9 KiB
Go

package grpc
import (
"context"
activityv1 "hyapp.local/api/proto/activity/v1"
"hyapp/pkg/appcode"
"hyapp/pkg/xerr"
messagedomain "hyapp/services/activity-service/internal/domain/message"
messageservice "hyapp/services/activity-service/internal/service/message"
)
// ActionConfirmServer adapts generic IM action confirmations to gRPC.
type ActionConfirmServer struct {
activityv1.UnimplementedMessageActionConfirmServiceServer
svc *messageservice.ActionConfirmService
}
func NewActionConfirmServer(svc *messageservice.ActionConfirmService) *ActionConfirmServer {
return &ActionConfirmServer{svc: svc}
}
func (s *ActionConfirmServer) AcceptActionConfirm(ctx context.Context, req *activityv1.AcceptActionConfirmRequest) (*activityv1.AcceptActionConfirmResponse, error) {
if s.svc == nil {
return nil, xerr.ToGRPCError(xerr.New(xerr.Unavailable, "action confirm service is not configured"))
}
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
confirm, err := s.svc.AcceptActionConfirm(ctx, req.GetActorUserId(), req.GetConfirmId(), req.GetCommandId())
if err != nil {
return nil, xerr.ToGRPCError(err)
}
return &activityv1.AcceptActionConfirmResponse{Confirm: actionConfirmProto(confirm)}, nil
}
func (s *ActionConfirmServer) RejectActionConfirm(ctx context.Context, req *activityv1.RejectActionConfirmRequest) (*activityv1.RejectActionConfirmResponse, error) {
if s.svc == nil {
return nil, xerr.ToGRPCError(xerr.New(xerr.Unavailable, "action confirm service is not configured"))
}
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
confirm, err := s.svc.RejectActionConfirm(ctx, req.GetActorUserId(), req.GetConfirmId(), req.GetCommandId(), req.GetReason())
if err != nil {
return nil, xerr.ToGRPCError(err)
}
return &activityv1.RejectActionConfirmResponse{Confirm: actionConfirmProto(confirm)}, nil
}
func (s *ActionConfirmServer) BatchGetActionConfirmStatus(ctx context.Context, req *activityv1.BatchGetActionConfirmStatusRequest) (*activityv1.BatchGetActionConfirmStatusResponse, error) {
if s.svc == nil {
return nil, xerr.ToGRPCError(xerr.New(xerr.Unavailable, "action confirm service is not configured"))
}
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
items, err := s.svc.BatchGetActionConfirmStatus(ctx, req.GetUserId(), req.GetConfirmIds())
if err != nil {
return nil, xerr.ToGRPCError(err)
}
resp := &activityv1.BatchGetActionConfirmStatusResponse{Items: make([]*activityv1.ActionConfirm, 0, len(items))}
for _, item := range items {
resp.Items = append(resp.Items, actionConfirmProto(item))
}
return resp, nil
}
func (s *ActionConfirmServer) ListConversationActionConfirms(ctx context.Context, req *activityv1.ListConversationActionConfirmsRequest) (*activityv1.ListConversationActionConfirmsResponse, error) {
if s.svc == nil {
return nil, xerr.ToGRPCError(xerr.New(xerr.Unavailable, "action confirm service is not configured"))
}
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
items, nextPageToken, err := s.svc.ListConversationActionConfirms(ctx, req.GetUserId(), req.GetPeerUserId(), req.GetPageSize(), req.GetPageToken())
if err != nil {
return nil, xerr.ToGRPCError(err)
}
resp := &activityv1.ListConversationActionConfirmsResponse{Items: make([]*activityv1.ActionConfirm, 0, len(items)), NextPageToken: nextPageToken}
for _, item := range items {
resp.Items = append(resp.Items, actionConfirmProto(item))
}
return resp, nil
}
func actionConfirmProto(confirm messagedomain.ActionConfirm) *activityv1.ActionConfirm {
return &activityv1.ActionConfirm{
ConfirmId: confirm.ConfirmID,
BusinessType: confirm.BusinessType,
BusinessSubtype: confirm.BusinessSubtype,
BusinessId: confirm.BusinessID,
SenderUserId: confirm.SenderUserID,
ReceiverUserId: confirm.ReceiverUserID,
Status: confirm.Status,
Action: confirm.Action,
ProcessedAtMs: confirm.ProcessedAtMS,
CreatedAtMs: confirm.CreatedAtMS,
UpdatedAtMs: confirm.UpdatedAtMS,
}
}