forked from ebhomengo/niki
64 lines
1.9 KiB
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
|
|
|
|
}
|