61 lines
2.8 KiB
C#
61 lines
2.8 KiB
C#
using MD.PersianDateTime.Standard;
|
|
|
|
namespace Netina.Core.BaseServices;
|
|
|
|
public class DashboardService(IRepositoryWrapper repositoryWrapper, UserManager<ApplicationUser> userManager)
|
|
: IDashboardService
|
|
{
|
|
public async Task<HomeDashboardDto> GetHomeDashboardAsyncTask(CancellationToken cancellationToken = default)
|
|
{
|
|
var response = new HomeDashboardDto
|
|
{
|
|
BlogsCount = await repositoryWrapper.SetRepository<Blog>()
|
|
.TableNoTracking
|
|
.CountAsync(cancellationToken),
|
|
ProductsCount = await repositoryWrapper.SetRepository<Product>()
|
|
.TableNoTracking
|
|
.CountAsync(cancellationToken),
|
|
TodayOrdersCount = await repositoryWrapper.SetRepository<Order>()
|
|
.TableNoTracking
|
|
.Where(o => o.OrderAt.Date == DateTime.Today.Date)
|
|
.CountAsync(cancellationToken),
|
|
UnSubmittedOrdersCount = await repositoryWrapper.SetRepository<Order>()
|
|
.TableNoTracking
|
|
.Where(o => o.OrderStatus == OrderStatus.Paid || o.OrderStatus == OrderStatus.Submitted)
|
|
.CountAsync(cancellationToken),
|
|
BrandsCount = await repositoryWrapper.SetRepository<Brand>()
|
|
.TableNoTracking
|
|
.CountAsync(cancellationToken),
|
|
SubscribersCount = await userManager.Users.CountAsync(cancellationToken)
|
|
};
|
|
|
|
return response;
|
|
}
|
|
|
|
public async Task<OrderDashboardDto> 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<Order>()
|
|
.TableNoTracking
|
|
.Where(o=>o.IsPayed && o.OrderStatus==OrderStatus.Paid)
|
|
.CountAsync(cancellationToken),
|
|
ThisMonthOrdersCount = await repositoryWrapper.SetRepository<Order>()
|
|
.TableNoTracking
|
|
.Where(s => s.OrderAt.Date >= startOfThisMonth.Date && s.OrderAt.Date < endOfThisMonth.Date)
|
|
.CountAsync(cancellationToken),
|
|
TodayOrdersCount = await repositoryWrapper.SetRepository<Order>()
|
|
.TableNoTracking
|
|
.Where(o => o.OrderAt.Date == DateTime.Now.Date)
|
|
.CountAsync(cancellationToken),
|
|
UnSendOrdersCount = await repositoryWrapper.SetRepository<Order>()
|
|
.TableNoTracking
|
|
.Where(o => o.IsPayed && o.OrderStatus == OrderStatus.Processing)
|
|
.CountAsync(cancellationToken)
|
|
};
|
|
|
|
return response;
|
|
}
|
|
} |