using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Domain.Services; using Volo.Abp.Users; using Yi.Framework.Bbs.Domain.Entities.Forum; using Yi.Framework.Bbs.Domain.Managers.ArticleImport; using Yi.Framework.Bbs.Domain.Shared.Consts; using Yi.Framework.Bbs.Domain.Shared.Enums; using Yi.Framework.Bbs.Domain.Shared.Model; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Framework.Bbs.Domain.Managers { /// /// 论坛模块的领域服务 /// public class ForumManager : DomainService { public readonly ISqlSugarRepository _discussRepository; public readonly ISqlSugarRepository _plateEntityRepository; public readonly ISqlSugarRepository _commentRepository; public readonly ISqlSugarRepository _articleRepository; public ForumManager(ISqlSugarRepository discussRepository, ISqlSugarRepository plateEntityRepository, ISqlSugarRepository commentRepository, ISqlSugarRepository articleRepository) { _discussRepository = discussRepository; _plateEntityRepository = plateEntityRepository; _commentRepository = commentRepository; _articleRepository = articleRepository; } //主题是不能直接创建的,需要由领域服务统一创建 public async Task CreateDiscussAsync(DiscussAggregateRoot entity) { entity.CreationTime = DateTime.Now; entity.AgreeNum = 0; entity.SeeNum = 0; return await _discussRepository.InsertReturnEntityAsync(entity); } public async Task CreateCommentAsync(Guid discussId, Guid parentId, Guid rootId, string content) { var entity = new CommentAggregateRoot(discussId); entity.Content = content; entity.ParentId = parentId; entity.RootId = rootId; return await _commentRepository.InsertReturnEntityAsync(entity); } /// /// 校验主题查询权限 /// /// /// /// public async Task VerifyDiscussPermissionAsync(Guid discussId,Guid? userId) { var discuss = await _discussRepository.GetFirstAsync(x => x.Id == discussId); if (discuss is null) { throw new UserFriendlyException(DiscussConst.No_Exist); } if (discuss.PermissionType == DiscussPermissionTypeEnum.Oneself) { if (discuss.CreatorId != userId) { throw new UserFriendlyException(DiscussConst.Privacy); } } if (discuss.PermissionType == DiscussPermissionTypeEnum.User) { if (discuss.CreatorId !=userId && !discuss.PermissionUserIds.Contains(userId?? Guid.Empty)) { throw new UserFriendlyException(DiscussConst.Privacy); } } } /// /// 导入文章 /// /// /// /// /// /// public async Task PostImportAsync(Guid discussId,Guid articleParentId, List fileObjs, ArticleImportTypeEnum importType) { AbstractArticleImport abstractArticleImport = default; switch (importType) { case ArticleImportTypeEnum.Default: abstractArticleImport = new DefaultArticleImport(); break; case ArticleImportTypeEnum.VuePress: abstractArticleImport = new VuePressArticleImport(); break; default: abstractArticleImport = new DefaultArticleImport(); break; } abstractArticleImport.SetLogger(LoggerFactory); var articleHandled = abstractArticleImport.Import(discussId, articleParentId, fileObjs); await _articleRepository.InsertManyAsync(articleHandled); } } }