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; } }