95 lines
3.9 KiB
Go
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,
|
|
}
|
|
}
|