Api/Netina.Core/BaseServices/DashboardService.cs

52 lines
2.0 KiB
C#

using Netina.Core.BaseServices.Abstracts;
using Netina.Domain.Dtos.DashboardDtos;
using Netina.Domain.Entities.Blogs;
using Netina.Domain.Entities.Brands;
using Netina.Domain.Entities.Orders;
using Netina.Domain.Entities.Products;
using Netina.Domain.Entities.Users;
using Netina.Domain.Enums;
using Netina.Repository.Repositories.Base.Contracts;
namespace Netina.Core.BaseServices;
public class DashboardService : IDashboardService
{
private readonly IRepositoryWrapper _repositoryWrapper;
private readonly UserManager<ApplicationUser> _userManager;
public DashboardService(IRepositoryWrapper repositoryWrapper,UserManager<ApplicationUser> userManager)
{
_repositoryWrapper = repositoryWrapper;
_userManager = userManager;
}
public async Task<HomeDashboardDto> GetHomeDashboardAsyncTask(CancellationToken cancellationToken = default)
{
var response = new HomeDashboardDto();
response.BlogsCount = await _repositoryWrapper.SetRepository<Blog>()
.TableNoTracking
.CountAsync(cancellationToken);
response.ProductsCount = await _repositoryWrapper.SetRepository<Product>()
.TableNoTracking
.CountAsync(cancellationToken);
response.TodayOrdersCount = await _repositoryWrapper.SetRepository<Order>()
.TableNoTracking
.Where(o => o.OrderAt.Date == DateTime.Today.Date)
.CountAsync(cancellationToken);
response.UnSubmittedOrdersCount = await _repositoryWrapper.SetRepository<Order>()
.TableNoTracking
.Where(o => o.OrderStatus == OrderStatus.Paid || o.OrderStatus == OrderStatus.Submitted)
.CountAsync(cancellationToken);
response.BrandsCount = await _repositoryWrapper.SetRepository<Brand>()
.TableNoTracking
.CountAsync(cancellationToken);
response.SubscribersCount = await _userManager.Users.CountAsync(cancellationToken);
return response;
}
}