using MD.PersianDateTime.Standard; namespace Netina.Core.BaseServices; public class DashboardService(IRepositoryWrapper repositoryWrapper, UserManager userManager) : IDashboardService { public async Task GetHomeDashboardAsyncTask(CancellationToken cancellationToken = default) { var response = new HomeDashboardDto { BlogsCount = await repositoryWrapper.SetRepository() .TableNoTracking .CountAsync(cancellationToken), ProductsCount = await repositoryWrapper.SetRepository() .TableNoTracking .CountAsync(cancellationToken), TodayOrdersCount = await repositoryWrapper.SetRepository() .TableNoTracking .Where(o => o.OrderAt.Date == DateTime.Today.Date) .CountAsync(cancellationToken), UnSubmittedOrdersCount = await repositoryWrapper.SetRepository() .TableNoTracking .Where(o => o.OrderStatus == OrderStatus.Paid || o.OrderStatus == OrderStatus.Submitted) .CountAsync(cancellationToken), BrandsCount = await repositoryWrapper.SetRepository() .TableNoTracking .CountAsync(cancellationToken), SubscribersCount = await userManager.Users.CountAsync(cancellationToken) }; return response; } public async Task GetOrdersDashboardAsyncTask(CancellationToken cancellationToken = default) { DateTime startOfThisMonth = new PersianDateTime(PersianDateTime.Today.Year, PersianDateTime.Today.Month, 1).ToDateTime(); DateTime endOfThisMonth = startOfThisMonth.AddMonths(1); var response = new OrderDashboardDto { PayedOrdersCount = await repositoryWrapper.SetRepository() .TableNoTracking .Where(o=>o.IsPayed && o.OrderStatus==OrderStatus.Paid) .CountAsync(cancellationToken), ThisMonthOrdersCount = await repositoryWrapper.SetRepository() .TableNoTracking .Where(s => s.OrderAt.Date >= startOfThisMonth.Date && s.OrderAt.Date < endOfThisMonth.Date) .CountAsync(cancellationToken), TodayOrdersCount = await repositoryWrapper.SetRepository() .TableNoTracking .Where(o => o.OrderAt.Date == DateTime.Now.Date) .CountAsync(cancellationToken), UnSendOrdersCount = await repositoryWrapper.SetRepository() .TableNoTracking .Where(o => o.IsPayed && o.OrderStatus == OrderStatus.Processing) .CountAsync(cancellationToken) }; return response; } }