Api/Netina.Core/BaseServices/DashboardService.cs

61 lines
2.8 KiB
C#
Raw Permalink Normal View History

2024-05-16 13:52:54 +03:30
using MD.PersianDateTime.Standard;
2024-04-16 20:01:34 +03:30
namespace Netina.Core.BaseServices;
2024-08-09 21:55:16 +03:30
public class DashboardService(IRepositoryWrapper repositoryWrapper, UserManager<ApplicationUser> userManager)
: IDashboardService
{
public async Task<HomeDashboardDto> GetHomeDashboardAsyncTask(CancellationToken cancellationToken = default)
{
2024-05-16 13:52:54 +03:30
var response = new HomeDashboardDto
{
2024-08-09 21:55:16 +03:30
BlogsCount = await repositoryWrapper.SetRepository<Blog>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
ProductsCount = await repositoryWrapper.SetRepository<Product>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
TodayOrdersCount = await repositoryWrapper.SetRepository<Order>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.Where(o => o.OrderAt.Date == DateTime.Today.Date)
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
UnSubmittedOrdersCount = await repositoryWrapper.SetRepository<Order>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.Where(o => o.OrderStatus == OrderStatus.Paid || o.OrderStatus == OrderStatus.Submitted)
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
BrandsCount = await repositoryWrapper.SetRepository<Brand>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
SubscribersCount = await userManager.Users.CountAsync(cancellationToken)
2024-05-16 13:52:54 +03:30
};
2024-05-16 13:52:54 +03:30
return response;
}
2024-05-16 13:52:54 +03:30
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
{
2024-08-09 21:55:16 +03:30
PayedOrdersCount = await repositoryWrapper.SetRepository<Order>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.Where(o=>o.IsPayed && o.OrderStatus==OrderStatus.Paid)
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
ThisMonthOrdersCount = await repositoryWrapper.SetRepository<Order>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.Where(s => s.OrderAt.Date >= startOfThisMonth.Date && s.OrderAt.Date < endOfThisMonth.Date)
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
TodayOrdersCount = await repositoryWrapper.SetRepository<Order>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.Where(o => o.OrderAt.Date == DateTime.Now.Date)
.CountAsync(cancellationToken),
2024-08-09 21:55:16 +03:30
UnSendOrdersCount = await repositoryWrapper.SetRepository<Order>()
2024-05-16 13:52:54 +03:30
.TableNoTracking
.Where(o => o.IsPayed && o.OrderStatus == OrderStatus.Processing)
.CountAsync(cancellationToken)
};
return response;
}
}