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

95 lines
2.9 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 HomePopupsService : IHomePopupsService
{
private readonly IBaseRepository<T_HomePopups> _homePopupsRepository;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="homePopupsRepository">首页弹窗仓储</param>
public HomePopupsService(IBaseRepository<T_HomePopups> homePopupsRepository)
{
_homePopupsRepository = homePopupsRepository;
}
/// <summary>
/// 获取首页弹窗
/// </summary>
/// <returns></returns>
public async Task<BaseResponse<HomePopupDto>> GetHomePopup()
{
var now = DateTime.Now;
// 查询启用的弹窗,按排序顺序取第一个
var popup = await _homePopupsRepository.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)
.FirstAsync();
if (popup == null)
{
return new BaseResponse<HomePopupDto>(ResponseCode.Success, null);
}
// 增加浏览次数
popup.ViewCount++;
await _homePopupsRepository.UpdateAsync(popup);
var result = new HomePopupDto
{
PopupId = popup.Id,
Title = popup.Title ?? "",
ImageUrl = popup.ImageUrl ?? "",
LinkUrl = popup.LinkUrl ?? "",
LinkType = popup.LinkType ?? 4,
TargetId = popup.LinkUrl,
SortOrder = popup.SortOrder
};
return new BaseResponse<HomePopupDto>(result);
}
/// <summary>
/// 点击弹窗
/// </summary>
/// <param name="request">请求参数</param>
/// <returns></returns>
public async Task<BaseResponse<HomePopupClickRespDto>> ClickPopup(HomePopupClickReq request)
{
// 获取弹窗
var popup = await _homePopupsRepository.Select
.Where(x => x.Id == request.PopupId)
.FirstAsync();
if (popup == null)
{
return new BaseResponse<HomePopupClickRespDto>(ResponseCode.Error, "弹窗不存在");
}
// 增加点击次数
popup.ClickCount++;
await _homePopupsRepository.UpdateAsync(popup);
return new BaseResponse<HomePopupClickRespDto>(new HomePopupClickRespDto
{
ClickCount = popup.ClickCount
});
}
}
}