Files
Yi.Admin/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Managers/ForumManager.cs

144 lines
6.0 KiB
C#
Raw Normal View History

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Domain.Services;
2025-01-19 13:14:08 +08:00
using Volo.Abp.Users;
2024-01-11 18:51:53 +08:00
using Yi.Framework.Bbs.Domain.Entities.Forum;
2023-12-30 02:42:12 +08:00
using Yi.Framework.Bbs.Domain.Managers.ArticleImport;
2025-01-19 13:14:08 +08:00
using Yi.Framework.Bbs.Domain.Shared.Consts;
using Yi.Framework.Bbs.Domain.Shared.Enums;
using Yi.Framework.Bbs.Domain.Shared.Model;
2025-01-19 18:40:42 +08:00
using Yi.Framework.Rbac.Domain.Shared.Consts;
2023-12-11 09:55:12 +08:00
using Yi.Framework.SqlSugarCore.Abstractions;
2023-04-15 22:44:33 +08:00
2023-12-11 09:55:12 +08:00
namespace Yi.Framework.Bbs.Domain.Managers
2023-04-15 22:44:33 +08:00
{
/// <summary>
/// 论坛模块的领域服务
/// </summary>
2023-12-11 09:55:12 +08:00
public class ForumManager : DomainService
2023-04-15 22:44:33 +08:00
{
2024-05-22 14:35:08 +08:00
public readonly ISqlSugarRepository<DiscussAggregateRoot, Guid> _discussRepository;
public readonly ISqlSugarRepository<PlateAggregateRoot, Guid> _plateEntityRepository;
public readonly ISqlSugarRepository<CommentAggregateRoot, Guid> _commentRepository;
public readonly ISqlSugarRepository<ArticleAggregateRoot, Guid> _articleRepository;
2025-04-12 23:18:06 +08:00
public readonly ISqlSugarRepository<DiscussRewardAggregateRoot,Guid> _discussRewardRepository;
public ForumManager(ISqlSugarRepository<DiscussAggregateRoot, Guid> discussRepository, ISqlSugarRepository<PlateAggregateRoot, Guid> plateEntityRepository, ISqlSugarRepository<CommentAggregateRoot, Guid> commentRepository, ISqlSugarRepository<ArticleAggregateRoot, Guid> articleRepository, ISqlSugarRepository<DiscussRewardAggregateRoot, Guid> discussRewardRepository)
2023-04-15 22:44:33 +08:00
{
_discussRepository = discussRepository;
_plateEntityRepository = plateEntityRepository;
_commentRepository = commentRepository;
2023-12-30 02:42:12 +08:00
_articleRepository = articleRepository;
2025-04-12 23:18:06 +08:00
_discussRewardRepository = discussRewardRepository;
2023-04-15 22:44:33 +08:00
}
//主题是不能直接创建的,需要由领域服务统一创建
2025-04-12 23:18:06 +08:00
public async Task<DiscussAggregateRoot> CreateDiscussAsync(DiscussAggregateRoot entity,DiscussRewardAggregateRoot rewardEntity=null)
2023-04-15 22:44:33 +08:00
{
entity.CreationTime = DateTime.Now;
entity.AgreeNum = 0;
entity.SeeNum = 0;
2025-04-12 23:18:06 +08:00
var discuss = await _discussRepository.InsertReturnEntityAsync(entity);
if (discuss.DiscussType==DiscussTypeEnum.Reward)
{
rewardEntity.DiscussId=discuss.Id;
Check.NotNull(rewardEntity,"悬赏类型,悬赏信息不能为空");
await _discussRewardRepository.InsertAsync(rewardEntity);
}
return discuss;
2023-04-15 22:44:33 +08:00
}
2024-05-22 14:35:08 +08:00
public async Task<CommentAggregateRoot> CreateCommentAsync(Guid discussId, Guid parentId, Guid rootId, string content)
2023-04-15 22:44:33 +08:00
{
2024-05-22 14:35:08 +08:00
var entity = new CommentAggregateRoot(discussId);
2023-04-15 22:44:33 +08:00
entity.Content = content;
entity.ParentId = parentId;
entity.RootId = rootId;
return await _commentRepository.InsertReturnEntityAsync(entity);
}
2025-01-19 13:14:08 +08:00
/// <summary>
/// 校验主题查询权限
/// </summary>
/// <param name="discussId"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
2025-01-19 18:40:42 +08:00
public async Task<bool> VerifyDiscussPermissionAsync(Guid discussId,Guid? userId,string[] roles=null,bool isVerifyLook=true)
2025-01-19 13:14:08 +08:00
{
var discuss = await _discussRepository.GetFirstAsync(x => x.Id == discussId);
if (discuss is null)
{
throw new UserFriendlyException(DiscussConst.No_Exist);
}
2025-01-19 18:40:42 +08:00
//作者是自己,直接有权限
if (discuss.CreatorId ==userId)
2025-01-19 13:14:08 +08:00
{
2025-01-19 18:40:42 +08:00
return true;
2025-01-19 13:14:08 +08:00
}
2025-01-19 18:40:42 +08:00
//管理员,直接放行
2025-01-19 18:53:09 +08:00
if (roles is not null&&roles.Contains(UserConst.AdminRolesCode))
2025-01-19 13:14:08 +08:00
{
2025-01-19 18:40:42 +08:00
return true;
}
//是否为校验 查看权限, 其他操作权限(增删改)
if (isVerifyLook)
{
//要求角色
if (discuss.PermissionType == DiscussPermissionTypeEnum.Role)
2025-01-19 13:14:08 +08:00
{
2025-01-19 18:40:42 +08:00
if (roles is null)
{
return false;
}
List<string> roleList = roles.ToList();
//所选角色,没有任何交集
if (!discuss.PermissionRoleCodes.Intersect(roleList).Any())
{
return false;
}
2025-01-19 13:14:08 +08:00
}
2025-01-19 18:40:42 +08:00
//通过了上面要求,剩下的都是有权限的,可以直接看
return true;
}
else
{
//通过了上面的要求,剩下的就是没有权限了,直接拦截
return false;
2025-01-19 13:14:08 +08:00
}
2025-01-19 18:40:42 +08:00
2025-01-19 13:14:08 +08:00
}
/// <summary>
/// 导入文章
/// </summary>
/// <param name="discussId"></param>
/// <param name="articleParentId"></param>
/// <param name="fileObjs"></param>
/// <param name="importType"></param>
/// <returns></returns>
public async Task PostImportAsync(Guid discussId,Guid articleParentId, List<FileObject> fileObjs, ArticleImportTypeEnum importType)
{
2023-12-30 02:42:12 +08:00
AbstractArticleImport abstractArticleImport = default;
switch (importType)
{
2024-01-05 09:46:29 +08:00
case ArticleImportTypeEnum.Default:
2023-12-30 02:42:12 +08:00
abstractArticleImport = new DefaultArticleImport();
break;
case ArticleImportTypeEnum.VuePress:
abstractArticleImport = new VuePressArticleImport();
break;
default: abstractArticleImport = new DefaultArticleImport(); break;
}
2024-01-05 09:44:34 +08:00
abstractArticleImport.SetLogger(LoggerFactory);
var articleHandled = abstractArticleImport.Import(discussId, articleParentId, fileObjs);
2023-12-30 02:42:12 +08:00
2024-01-04 10:42:20 +08:00
await _articleRepository.InsertManyAsync(articleHandled);
2023-12-30 02:42:12 +08:00
}
2023-04-15 22:44:33 +08:00
}
}