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 }