using System.Data.Common; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GoodBooks.PAY.PAYDAL.DTO.Cashback; using GoodBooks.PAY.PAYDAL.Query.Cashback; using Newtonsoft.Json; namespace GoodBooks.PAY.PAYDAL.CustomCode.Cashback { public class CashbackLedgerDAL : ICashbackLedgerDAL { private readonly IQueryExecutor _queryExecutor; public CashbackLedgerDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetCashbackLedger(int cashbackLedgerId, LoginDTO login) { try { var result = await _queryExecutor.QuerySingleAsync( login, CashbackLedgerQB.GET_CASHBACK_LEDGER, new { CashbackLedgerId = cashbackLedgerId, TenantId = login.ClientId }).ConfigureAwait(false); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetCashbackLedgerList(int customerId, int pageOffset, int pageSize, LoginDTO login) { try { var result = await _queryExecutor.QueryPagedAsync( login, CashbackLedgerQB.GET_CASHBACK_LEDGER_LIST, new { CustomerId = customerId, TenantId = login.ClientId, Offset = pageOffset, PageSize = pageSize }).ConfigureAwait(false); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetCashbackLedgerListByOrder(int payOrderId, LoginDTO login) { try { var result = await _queryExecutor.QueryAsync( login, CashbackLedgerQB.GET_CASHBACK_LEDGER_LIST_BY_ORDER, new { PayOrderId = payOrderId, TenantId = login.ClientId }).ConfigureAwait(false); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task> GetPendingPayouts(LoginDTO login) { try { return await _queryExecutor.QueryAsync( login, CashbackLedgerQB.GET_PENDING_PAYOUTS, new { }).ConfigureAwait(false); } catch (Exception) { throw; } } public async Task SaveCashbackLedger(CashbackLedgerDTO dto, LoginDTO login, DbTransaction? tx) { try { return await _queryExecutor.ExecuteAsync( login, CashbackLedgerQB.SAVE_CASHBACK_LEDGER, dto, tx).ConfigureAwait(false); } catch (Exception) { throw; } } public async Task UpdatePayoutStatus(CashbackLedgerDTO dto, LoginDTO login) { try { return await _queryExecutor.ExecuteAsync( login, CashbackLedgerQB.UPDATE_PAYOUT_STATUS, dto).ConfigureAwait(false); } catch (Exception) { throw; } } } }