You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

223 lines
5.2 KiB

package service
import (
"bytes"
"context"
"net/http"
"wallet-system/internal/biz"
"wallet-system/internal/service/result"
"wallet-system/internal/service/validation"
v1 "wallet-system/api/walletSystem/v1"
)
// WalletService
// @Description:
type WalletService struct {
v1.UnimplementedWalletServer
uc *biz.WalletInfo
}
// NewWalletService
//
// @Description:
// @param uc
// @return *WalletService
func NewWalletService(uc *biz.WalletInfo) *WalletService {
return &WalletService{uc: uc}
}
// GenerateAddress
//
// @Description:
// @receiver s
// @param ctx
// @param in
// @return *v1.WalletReply
// @return error
func (s *WalletService) GenerateAddress(ctx context.Context, in *v1.GenerateAddressRequest) (*v1.WalletReply, error) {
if err := validation.GenerateAddressValidation(in); err != nil {
return result.WalletReplyErrorResult(false, []string{}, err.Error()), err
}
data, err := s.uc.GenerateAddress(ctx, in.Wallet, in.Number)
if err != nil {
return result.WalletReplyErrorResult(false, []string{}, err.Error()), err
}
return &v1.WalletReply{
Code: http.StatusOK,
Data: data,
Message: validation.Success,
}, nil
}
// SignatureTrc20Grpc
//
// @Description:
// @receiver s
// @param ctx
// @param in
// @return *v1.SignatureTrc20Reply
// @return error
func (s *WalletService) SignatureTrc20Grpc(ctx context.Context, in *v1.SignatureTrc20Request) (*v1.SignatureTrc20Reply, error) {
if err := validation.SignatureTrc20GrpcValidation(in); err != nil {
return result.SignatureTrc20GrpcResult(false, &v1.Data{}, err.Error()), err
}
check, data, err := s.uc.SignatureTrc20Grpc(ctx, &biz.Wallet{
From: in.From,
To: in.To,
Amount: in.Amount,
Contract: in.Contract,
TrcCheck: in.TrcCheck,
TokenId: in.TokenId,
FeeLimit: in.FeeLimit,
})
if err != nil {
return result.SignatureTrc20GrpcResult(false, &v1.Data{}, err.Error()), err
}
return &v1.SignatureTrc20Reply{
Code: http.StatusOK,
Data: &v1.Data{
Result: check,
TxId: data,
},
Message: validation.Success,
}, nil
}
// GetAllAddress
//
// @Description:
// @receiver s
// @param ctx
// @param in
// @return *v1.WalletReply
// @return error
func (s *WalletService) GetAllAddress(ctx context.Context, in *v1.WalletRequest) (*v1.WalletReply, error) {
data, err := s.uc.GetAllAddress(ctx)
if err != nil {
return result.WalletReplyErrorResult(false, []string{}, err.Error()), err
}
return &v1.WalletReply{
Code: http.StatusOK,
Data: data,
Message: validation.Success,
}, nil
}
// GetAllAddressAndPrivateKey
//
// @Description:
// @receiver s
// @param ctx
// @param in
// @return *v1.WalletKeyReply
// @return error
func (s *WalletService) GetAllAddressAndPrivateKey(ctx context.Context, in *v1.WalletRequest) (*v1.WalletKeyReply, error) {
data, err := s.uc.GetAllAddressAndPrivateKey(ctx)
if err != nil {
return result.WalletKeyReplyErrorResult(false, []*v1.Keys{}, err.Error()), err
}
var keys []*v1.Keys
for key, value := range data {
var b bytes.Buffer
b.Write(value)
bytesData := b.Bytes()
vue := &v1.Keys{
Key: key,
Value: bytesData,
}
keys = append(keys, vue)
}
return &v1.WalletKeyReply{
Code: http.StatusOK,
Data: keys,
Message: validation.Success,
}, nil
}
// GetPrivateKeyByAddress
//
// @Description:
// @receiver s
// @param ctx
// @param in
// @return *v1.WalletPKeysReply
// @return error
func (s *WalletService) GetPrivateKeyByAddress(ctx context.Context, in *v1.GetPrivateKeyByAddressRequest) (*v1.WalletPKeysReply, error) {
if err := validation.GetPrivateKeyByAddressValidation(in); err != nil {
return result.WalletPKeysReplyErrorResult(false, "", err.Error()), err
}
data, err := s.uc.GetPrivateKeyByAddress(ctx, in.Address)
if err != nil {
return result.WalletPKeysReplyErrorResult(false, "", err.Error()), err
}
return &v1.WalletPKeysReply{
Code: http.StatusOK,
Data: data,
Message: validation.Success,
}, nil
}
// DeleteAddress
//
// @Description:
// @receiver s
// @param ctx
// @param in
// @return *v1.WalletReply
// @return error
func (s *WalletService) DeleteAddress(ctx context.Context, in *v1.WalletRequest) (*v1.WalletReply, error) {
if err := s.uc.DeleteAddress(ctx); err != nil {
return result.WalletReplyErrorResult(false, []string{}, err.Error()), err
}
return &v1.WalletReply{
Code: http.StatusOK,
Data: []string{},
Message: validation.Success,
}, nil
}
// WalletApprove
//
// @Description:
// @receiver s
// @param ctx
// @param in
// @return *v1.WalletApproveReply
// @return error
func (s *WalletService) WalletApprove(ctx context.Context, in *v1.WalletApproveRequest) (*v1.WalletApproveReply, error) {
if err := validation.WalletApproveValidation(in); err != nil {
return result.WalletApproveResult(false, []byte{}, err.Error()), err
}
check, data, err := s.uc.WalletApprove(ctx, &biz.Wallet{
From: in.From,
To: in.To,
Amount: in.Amount,
Contract: in.Contract,
TrcCheck: in.TrcCheck,
TokenId: in.TokenId,
FeeLimit: in.FeeLimit,
})
if err != nil || !check {
return result.WalletApproveResult(false, []byte{}, err.Error()), err
}
return &v1.WalletApproveReply{
Code: http.StatusOK,
Data: data,
Message: validation.Success,
}, nil
}