Paging in .net core api

   public async Task<Tuple<List<GetCustomerResponse>, int>> GetCustomerWithPaginations(GetCustomerRequest oRequest)

        {

            int totalCount = 0;

            int skipData = (oRequest.PageIndex - 1) * oRequest.PageSize;


            List<GetCustomerResponse> customerResponse = new List<GetCustomerResponse>();


            if (oRequest.FromBalance != null || oRequest.ToBalance != null || oRequest.FromFreeBet != null || oRequest.ToFreeBet != null)

            {

                // get balance

                IQueryable<GetCustomerResponse> data_balance = umpContext.Deposits

                    .Join(umpContext.FreebetsDeposits, bal => bal.PlayerId, fb => fb.PlayerId

                    , (bal, fb) => new { PlayerId = bal.PlayerId.ToString(), Balance = bal.Amount, FreeBet = fb.Amount })

                    .Join(umpContext.JPWallet, bal => bal.PlayerId, jp => jp.PlayerId.ToString()

                    , (bal, jp) => new { PlayerId = bal.PlayerId, bal.Balance, bal.FreeBet, JPToken = jp.Token })

                    .Select(x => new GetCustomerResponse { PlayerId = x.PlayerId, Balance = x.Balance, FreeBet = x.FreeBet, JPToken = x.JPToken })

                    .Distinct().OrderByDescending(x => x.PlayerId).AsQueryable();


                if (oRequest.FromBalance != null && oRequest.ToBalance != null)

                {

                    data_balance = data_balance.Where(x => x.Balance >= oRequest.FromBalance && x.Balance <= oRequest.ToBalance);

                }


                if (oRequest.FromFreeBet != null && oRequest.ToFreeBet != null)

                {

                    data_balance = data_balance.Where(x => x.FreeBet >= oRequest.FromFreeBet && x.FreeBet <= oRequest.ToFreeBet);

                }


                totalCount = await data_balance.CountAsync();

                var data_balance_filter = await data_balance.Skip(skipData).Take(oRequest.PageSize).ToListAsync();


                // get player details

                var playerIds = data_balance_filter.Select(x => x.PlayerId).Distinct().ToList();


                List<GetCustomerResponse> list = await bbcContext.BbCustomer.Where(x => playerIds.Contains(x.provider_identification))

                .Join(bbcContext.BbCustomerLoginIdentification, x => x.bb_customer_id, y => y.BbCustomerId, (x, y) => new { x.bb_customer_id, x.provider_identification, y.IdentificationValue, y.BbLoginIdentificationId, x.is_deleted, x.created_date })

                .Where(x => x.BbLoginIdentificationId == 2 && x.is_deleted == oRequest.IsDeleted)

                .Select(x => new GetCustomerResponse

                {

                    UserId = x.bb_customer_id,

                    PlayerId = x.provider_identification,

                    PlayerMobile = x.IdentificationValue,

                    RegisteredDate = x.created_date,

                    LatestLogin = (bbcContext.BbLoginHistory.Where(lh => lh.bb_customer_id == x.bb_customer_id).OrderByDescending(lh => lh.created_date).FirstOrDefault().created_date)

                })

                .OrderByDescending(x => x.PlayerId).ToListAsync();


                var all_data = data_balance_filter.GroupJoin(list,

                    bal => bal.PlayerId,

                    detail => detail.PlayerId,

                    (b, d) => new { bal = b, detail = d.SingleOrDefault() });



                customerResponse = all_data.Select(x => new GetCustomerResponse()

                {

                    PlayerId = x.bal.PlayerId,

                    UserId = x.detail == null ? null : x.detail.UserId,

                    PlayerMobile = x.detail == null ? null : x.detail.PlayerMobile,

                    Balance = x.bal.Balance,

                    FreeBet = x.bal.FreeBet,

                    JPToken = x.bal.JPToken,

                    RegisteredDate = x.detail == null ? null : x.detail.RegisteredDate,

                    LatestLogin = x.detail == null ? null : x.detail.LatestLogin

                }).OrderByDescending(x => x.PlayerId).ToList();


                return Tuple.Create(customerResponse, totalCount);

            }

            else

            {

                // get player details

                IQueryable<GetCustomerResponse> data = bbcContext.BbCustomer.Where(x => x.bb_site_id == oRequest.SiteId)

                .Join(bbcContext.BbCustomerLoginIdentification, x => x.bb_customer_id, y => y.BbCustomerId, (x, y) => new { x.bb_customer_id, x.provider_identification, y.IdentificationValue, y.BbLoginIdentificationId, x.is_deleted, x.created_date })

                .Where(x => x.BbLoginIdentificationId == 2 && x.is_deleted == oRequest.IsDeleted)

                .Select(x => new GetCustomerResponse

                {

                    UserId = x.bb_customer_id,

                    PlayerId = x.provider_identification,

                    PlayerMobile = x.IdentificationValue,

                    RegisteredDate = x.created_date,

                    LatestLogin = (bbcContext.BbLoginHistory.Where(lh => lh.bb_customer_id == x.bb_customer_id).OrderByDescending(lh => lh.created_date).FirstOrDefault().created_date)

                })

                .OrderByDescending(x => x.PlayerId)

                .Distinct()

                .AsQueryable();


                if (!string.IsNullOrEmpty(oRequest.UserId))

                {

                    data = data.Where(x => x.UserId.ToString() == oRequest.UserId);

                }

                else if (!string.IsNullOrEmpty(oRequest.PlayerId))

                {

                    data = data.Where(x => x.PlayerId.ToString() == oRequest.PlayerId);

                }

                else if (!string.IsNullOrEmpty(oRequest.PlayerMobile))

                {

                    data = data.Where(x => x.PlayerMobile == oRequest.PlayerMobile);

                }

                else if (oRequest.FromDateReg != null && oRequest.ToDateReg != null)

                {

                    data = data.Where(x => x.RegisteredDate >= oRequest.FromDateReg && x.RegisteredDate <= oRequest.ToDateReg);

                }


                totalCount = await data.CountAsync();

                data = data.Skip(skipData).Take(oRequest.PageSize);

                List<GetCustomerResponse> list = await data.ToListAsync();


                // get balance

                var playerIds = list.Select(x => x.PlayerId).Distinct().ToList();

                IQueryable<GetCustomerResponse> data_balance = umpContext.Deposits.Where(x => playerIds.Contains(x.PlayerId.ToString()))

                   .Join(umpContext.FreebetsDeposits, bal => bal.PlayerId, fb => fb.PlayerId

                   , (bal, fb) => new { PlayerId = bal.PlayerId.ToString(), Balance = bal.Amount, FreeBet = fb.Amount })

                   .Join(umpContext.JPWallet, bal => bal.PlayerId, jp => jp.PlayerId.ToString()

                   , (bal, jp) => new { bal.PlayerId, bal.Balance, bal.FreeBet, jp.Token })

                   .Select(x => new GetCustomerResponse()

                   {

                       PlayerId = x.PlayerId,

                       Balance = x.Balance,

                       FreeBet = x.FreeBet,

                       JPToken = x.Token

                   })

                   .AsQueryable();


                var all_data = list.GroupJoin(

                    data_balance,

                    detail => detail.PlayerId,

                    bal => bal.PlayerId,

                    (d, b) => new { detail = d, bal = b.SingleOrDefault() });



                customerResponse = all_data.Select(x => new GetCustomerResponse()

                {

                    PlayerId = x.detail.PlayerId,

                    UserId = x.detail.UserId,

                    PlayerMobile = x.detail.PlayerMobile,

                    Balance = x.bal == null ? null : x.bal.Balance,

                    FreeBet = x.bal == null ? null : x.bal.FreeBet,

                    JPToken = x.bal == null ? 0 : x.bal.JPToken,

                    RegisteredDate = x.detail.RegisteredDate,

                    LatestLogin = x.detail.LatestLogin

                }).OrderByDescending(x => x.PlayerId).ToList();


                return Tuple.Create(customerResponse, totalCount);

            }

        }



-----------------------


  public class GetCustomerResponse

    {

        [Key]

        public string PlayerId { get; set; }

        public string PlayerMobile { get; set; }

        public long? UserId { get; set; }

        public decimal? Balance { get; set; }

        public decimal? FreeBet { get; set; }

        public int? JPToken { get; set; }

        public DateTime? RegisteredDate { get; set; }

        public DateTime? LatestLogin { get; set; }

    }

-----------------------


public class PaginationInfo

    {

        private const int MaxPageSize = 9999;

        private int _pageSize = 5;

        public int PageSize

        {

            get => _pageSize;

            set => _pageSize = (value > MaxPageSize) ? MaxPageSize : value;

        }

        public int PageIndex { get; set; }

        public PaginationInfo()

        {

            this.PageIndex = 1;

            this.PageSize = 5;

        }

    }

public class GetCustomerRequest : PaginationInfo

    {

        public int SiteId { get; set; }

        public decimal? FromBalance { get; set; }

        public decimal? ToBalance { get; set; }

        public decimal? FromFreeBet { get; set; }

        public decimal? ToFreeBet { get; set; }

        public decimal? FromJPToken { get; set; }

        public decimal? ToJPToken { get; set; }

        public string UserId { get; set; }

        public string PlayerId { get; set; }

        public string PlayerMobile { get; set; }

        public bool IsDeleted { get; set; } = false;

        public DateTime? FromDateReg { get; set; }

        public DateTime? ToDateReg { get; set; }

        public GetCustomerRequest() : base()

        { }

    }

Comments

Popular posts from this blog

tech note

Vue js Standalone