customer/internal/interface/controller/grpc/customer/customer.go
Pasha 34a88a3a70
Some checks failed
Lint / Lint (push) Failing after 1m2s
rename go.mod
2024-11-18 21:44:09 +00:00

104 lines
3.1 KiB
Go

package customer
import (
"context"
"google.golang.org/protobuf/types/known/timestamppb"
"log"
"gitea.pena/PenaSide/customer/internal/interface/repository"
"go.uber.org/zap"
"google.golang.org/protobuf/types/known/emptypb"
"gitea.pena/PenaSide/customer/internal/errors"
"gitea.pena/PenaSide/customer/internal/models"
"gitea.pena/PenaSide/customer/internal/proto/customer"
"gitea.pena/PenaSide/customer/internal/service/history"
)
type Deps struct {
Logger *zap.Logger
HistoryService *history.Service
AccountRepo *repository.AccountRepository
}
type Controller struct {
logger *zap.Logger
historyService *history.Service
accountRepo *repository.AccountRepository
customer.UnimplementedCustomerServiceServer
}
func New(deps Deps) *Controller {
if deps.Logger == nil {
log.Panicln("logger is nil on <NewCustomerController>")
}
if deps.HistoryService == nil {
log.Panicln("HistoryService is nil on <NewCustomerController>")
}
if deps.AccountRepo == nil {
log.Panicln("AccountRepo is nil on <NewCustomerController>")
}
return &Controller{
logger: deps.Logger,
historyService: deps.HistoryService,
accountRepo: deps.AccountRepo,
}
}
func (receiver *Controller) InsertHistory(ctx context.Context, in *customer.History) (*emptypb.Empty, error) {
if _, err := receiver.historyService.CreateHistory(ctx, &models.History{
UserID: in.UserID,
Comment: in.Comment,
Key: in.Key,
//RawDetails: in.RawDetails,
}); err != nil {
receiver.logger.Error("failed to insert history on <InsertHistory> of <HistoryController>", zap.Error(err))
return nil, errors.GRPC("failed to insert history", err)
}
return &emptypb.Empty{}, nil
}
func (receiver *Controller) SetAccountVerificationStatus(ctx context.Context, req *customer.SetVerificationReq) (*customer.Account, error) {
status := customer.AccountStatus_name[int32(req.Status)]
account, err := receiver.accountRepo.SetStatus(ctx, req.UserID, models.AccountStatus(status))
if err != nil {
receiver.logger.Error("failed to set status on <SetAccountVerificationStatus> of <RPC_CustomerController>", zap.Error(err))
return nil, err
}
var deletedAt *timestamppb.Timestamp
if account.DeletedAt != nil {
deletedAt = timestamppb.New(*account.DeletedAt)
}
return &customer.Account{
Id: account.ID,
UserID: account.UserID,
Cart: account.Cart,
Wallet: &customer.Wallet{
Cash: account.Wallet.Cash,
Currency: account.Wallet.Currency,
Spent: account.Wallet.Spent,
PurchasesAmount: account.Wallet.PurchasesAmount,
Money: account.Wallet.Money,
LastPaymentId: account.Wallet.LastPaymentID,
},
Name: &customer.Name{
Middlename: account.Name.Middlename,
Firstname: account.Name.FirstName,
Orgname: account.Name.Orgname,
Secondname: account.Name.Secondname,
},
Status: customer.AccountStatus(customer.AccountStatus_value[string(account.Status)]),
IsDeleted: account.Deleted,
CreatedAt: timestamppb.New(account.CreatedAt),
UpdatedAt: timestamppb.New(account.UpdatedAt),
DeletedAt: deletedAt,
From: account.From,
Partner: account.Partner,
}, nil
}