using MiAssessment.Core.Interfaces;
using MiAssessment.Model.Data;
using MiAssessment.Model.Models.Home;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace MiAssessment.Core.Services;
///
/// 首页服务实现
///
public class HomeService : IHomeService
{
private readonly MiAssessmentDbContext _dbContext;
private readonly ILogger _logger;
///
/// 构造函数
///
/// 数据库上下文
/// 日志记录器
public HomeService(
MiAssessmentDbContext dbContext,
ILogger logger)
{
_dbContext = dbContext;
_logger = logger;
}
///
public async Task> GetBannerListAsync()
{
_logger.LogDebug("获取Banner列表");
var banners = await _dbContext.Banners
.AsNoTracking()
.Where(b => b.Status == 1 && !b.IsDeleted)
.OrderByDescending(b => b.Sort)
.Select(b => new BannerDto
{
Id = b.Id,
Title = b.Title,
ImageUrl = b.ImageUrl,
LinkType = b.LinkType,
LinkUrl = b.LinkUrl,
AppId = b.AppId
})
.ToListAsync();
_logger.LogDebug("获取到 {Count} 条Banner记录", banners.Count);
return banners;
}
///
public async Task> GetAssessmentListAsync()
{
_logger.LogDebug("获取测评类型列表");
var assessmentTypes = await _dbContext.AssessmentTypes
.AsNoTracking()
.Where(a => !a.IsDeleted)
.OrderByDescending(a => a.Sort)
.Select(a => new AssessmentTypeDto
{
Id = a.Id,
Name = a.Name,
Code = a.Code,
ImageUrl = a.ImageUrl ?? string.Empty,
Price = a.Price,
Status = a.Status
})
.ToListAsync();
_logger.LogDebug("获取到 {Count} 条测评类型记录", assessmentTypes.Count);
return assessmentTypes;
}
///
public async Task> GetNavigationListAsync()
{
_logger.LogDebug("获取首页导航入口列表");
var navigations = await _dbContext.HomeNavigations
.AsNoTracking()
.Where(n => n.Status == 1 && !n.IsDeleted)
.OrderByDescending(n => n.Sort)
.Select(n => new HomeNavigationDto
{
Id = n.Id,
Name = n.Name,
ImageUrl = n.ImageUrl ?? string.Empty,
LinkUrl = n.LinkUrl,
Status = n.Status
})
.ToListAsync();
_logger.LogDebug("获取到 {Count} 条导航入口记录", navigations.Count);
return navigations;
}
///
public async Task> GetPromotionListAsync()
{
_logger.LogDebug("获取首页宣传图列表");
var promotions = await _dbContext.Promotions
.AsNoTracking()
.Where(p => p.Position == 1 && p.Status == 1 && !p.IsDeleted)
.OrderByDescending(p => p.Sort)
.Select(p => new PromotionDto
{
Id = p.Id,
Title = p.Title,
ImageUrl = p.ImageUrl
})
.ToListAsync();
_logger.LogDebug("获取到 {Count} 条宣传图记录", promotions.Count);
return promotions;
}
}