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