niki/domain/wallet/service/transaction_history.go

57 lines
1.6 KiB
Go

package service
import (
"context"
"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")
dbPagination := postgres.DBPagination{
PageNumber: request.Pagination.PageNumber,
PageSize: s.cfg.PageSize,
}
transactionList, totalCount, err := s.repo.GetTransactionListByUserID(ctx, request.UserID, dbPagination)
if err != nil {
return param.TransactionResponse{}, richerror.New(op).WithErr(err)
}
totalPages := (totalCount + s.cfg.PageSize - 1) / s.cfg.PageSize
paginationInfo := postgres.ResponsePagination{
PageNumber: request.Pagination.PageNumber,
PageSize: s.cfg.PageSize,
TotalPages: totalPages,
}
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
}