live-forum/server/webapi/LiveForum/LiveForum.Service/Others/BannersService.cs
2026-03-24 11:27:37 +08:00

92 lines
2.8 KiB
C#

using FreeSql;
using LiveForum.Code.Base;
using LiveForum.IService.Others;
using LiveForum.Model;
using LiveForum.Model.Dto.Others;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace LiveForum.Service.Others
{
public class BannersService : IBannersService
{
private readonly IBaseRepository<T_Banners> _bannersRepository;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="bannersRepository">轮播图仓储</param>
public BannersService(IBaseRepository<T_Banners> bannersRepository)
{
_bannersRepository = bannersRepository;
}
/// <summary>
/// 获取轮播图列表
/// </summary>
/// <returns></returns>
public async Task<BaseResponseList<BannerDto>> GetBanners()
{
var now = DateTime.Now;
// 查询启用的轮播图
var banners = await _bannersRepository.Select
.Where(x => x.IsActive &&
(x.StartTime == null || x.StartTime <= now) &&
(x.EndTime == null || x.EndTime >= now))
.OrderBy(x => x.SortOrder)
//.ThenByDescending(x => x.CreatedAt)
.ToListAsync();
var items = banners.Select(banner => new BannerDto
{
BannerId = banner.Id,
Title = banner.Title ?? "",
ImageUrl = banner.ImageUrl ?? "",
LinkUrl = banner.LinkUrl ?? "",
LinkType = banner.LinkType ?? 0,
TargetId = banner.LinkUrl??"",
SortOrder = banner.SortOrder
}).ToList();
return new BaseResponseList<BannerDto>
{
Code = ResponseCode.Success,
Data = items
};
}
/// <summary>
/// 点击轮播图
/// </summary>
/// <param name="request">请求参数</param>
/// <returns></returns>
public async Task<BaseResponse<BannerClickRespDto>> ClickBanner(BannerClickReq request)
{
// 获取轮播图
var banner = await _bannersRepository.Select
.Where(x => x.Id == request.BannerId)
.FirstAsync();
if (banner == null)
{
return new BaseResponse<BannerClickRespDto>(ResponseCode.Error, "轮播图不存在");
}
// 增加点击次数
banner.ClickCount++;
await _bannersRepository.UpdateAsync(banner);
return new BaseResponse<BannerClickRespDto>(new BannerClickRespDto
{
ClickCount = banner.ClickCount
});
}
}
}