niki/domain/wallet/service/transaction_history.go

64 lines
1.9 KiB
Go

package service
import (
"context"
"time"
"git.gocasts.ir/ebhomengo/niki/domain/wallet/entity"
"git.gocasts.ir/ebhomengo/niki/domain/wallet/param"
"git.gocasts.ir/ebhomengo/niki/pkg/database/postgres"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
)
func (s Service) GetUserTransactionHistory(ctx context.Context, request param.TransactionRequest) (param.TransactionResponse, error) {
const op = richerror.Op("wallet.service.GetUserTransactionHistory")
lastTimeStamp := request.Pagination.LastTimeStamp
if lastTimeStamp.IsZero() {
lastTimeStamp = time.Now()
}
dbPagination := postgres.DBPagination{
LastTimeStamp: lastTimeStamp,
PageNumber: request.Pagination.PageNumber,
MaxNextPages: s.cfg.MaxNextPages,
PageSize: s.cfg.PageSize,
}
transactionList, listLen, err := s.repo.GetTransactionListByUserID(ctx, request.UserID, dbPagination)
showableNextPagesNum := postgres.ComputeNextPages(listLen, s.cfg.PageSize, s.cfg.MaxNextPages)
if err != nil {
return param.TransactionResponse{}, richerror.New(op).WithErr(err)
}
paginationInfo := postgres.ResponsePagination{
PageNumber: request.Pagination.PageNumber,
PageSize: s.cfg.PageSize,
ShowableNextPagesNum: showableNextPagesNum,
}
return param.TransactionResponse{
Transaction: transactionEntityToTransactionInfo(transactionList),
Pagination: paginationInfo,
}, nil
}
func transactionEntityToTransactionInfo(TransactionList []entity.Transaction) []param.TransactionInfo {
transactionInfoList := make([]param.TransactionInfo, len(TransactionList))
for i, transaction := range TransactionList {
transactionInfoList[i] = param.TransactionInfo{
ID: transaction.ID,
UserID: transaction.UserID,
Amount: transaction.Amount,
Currency: transaction.Currency,
ActionType: transaction.ActionType,
Timestamp: transaction.Timestamp,
}
}
return transactionInfoList
}