From 8213f6f8d7ed3aa132bc317e7f580d89f7bccfc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Thu, 23 Mar 2023 00:08:55 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AE=8C=E6=88=90=E8=AF=84?= =?UTF-8?q?=E8=AE=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApplicationContractsSwaggerDoc.xml | 65 ++++++++++++++++++ .../ApplicationSwaggerDoc.xml | 4 +- .../BBS/Yi.BBS.Domain/DomainSwaggerDoc.xml | 25 +++++++ .../project/BBS/Yi.BBS.Web/yi-sqlsugar-dev.db | Bin 303104 -> 323584 bytes .../ApplicationContractsSwaggerDoc.xml | 65 ++++++++++++++++++ .../Dtos/Comment/CommentCreateInputVo.cs | 10 ++- .../Dtos/Comment/CommentGetListOutputDto.cs | 15 ++-- .../ApplicationSwaggerDoc.xml | 4 +- .../Forum/CommentService.cs | 30 +++++--- .../bbs/Yi.BBS.Domain/DomainSwaggerDoc.xml | 25 +++++++ .../Forum/Entities/CommentEntity.cs | 25 ++++--- .../bbs/Yi.BBS.Domain/Forum/ForumManager.cs | 4 +- .../project/bbs/Yi.BBS.Web/yi-sqlsugar-dev.db | Bin 303104 -> 323584 bytes 13 files changed, 240 insertions(+), 32 deletions(-) diff --git a/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml b/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml index fc82778f..12192b58 100644 --- a/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml @@ -24,6 +24,71 @@ Comment输入创建对象 + + + 评论id + + + + + 主题id + + + + + 第一层评论id,第一层为0 + + + + + 被回复的CommentId,第一层为0 + + + + + 评论多反 + + + + + 主题id + + + + + 用户,评论人用户信息 + + + + + 被评论的用户信息 + + + + + 这个不是一个树形,而是存在一个二维数组,该Children只有在顶级时候,只有一层 + + + + + 单返回,返回单条评论即可 + + + + + 用户id联表为用户对象 + + + + + 根节点的评论id + + + + + 被回复的CommentId + + Discuss输入创建对象 diff --git a/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application/ApplicationSwaggerDoc.xml b/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application/ApplicationSwaggerDoc.xml index 18c08834..20162d43 100644 --- a/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application/ApplicationSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Application/ApplicationSwaggerDoc.xml @@ -51,12 +51,12 @@ - Comment服务实现 + 评论 - 获取改主题下的评论 + 获取改主题下的评论,结构为二维列表,该查询无分页 diff --git a/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Domain/DomainSwaggerDoc.xml b/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Domain/DomainSwaggerDoc.xml index 1f66dd82..fc516425 100644 --- a/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Domain/DomainSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Domain/DomainSwaggerDoc.xml @@ -21,6 +21,31 @@ + + + 评论表 + + + + + 采用二维数组方式,不使用树形方式 + + + + + 被回复的CommentId + + + + + 用户,评论人用户信息 + + + + + 被评论的用户信息 + + 论坛模块的领域服务 diff --git a/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Web/yi-sqlsugar-dev.db b/Yi.Framework.Net6/src/project/BBS/Yi.BBS.Web/yi-sqlsugar-dev.db index a2fe576f1fdecbf64d916aa6ea3a76cea1b53047..bfc403bbf444ae174f4859323331a4c5189e2656 100644 GIT binary patch delta 2719 zcmchZdrTBZ9LHy7m$|*i-hz)i1(Acc=mB@^;~w0Rmco@P3RaP%O%sGePD?#S5YgH{ z5DaP4q=|asinfYTTVII+(ZwoY?VrWefB46uNYh$1wiK;4+NSC3Jt(GNqHTJ+w>vvK z^PTT+c7LCptrw?ly)k`z;xx(v0Ch~GYhQ3Qj?_`yn0lv#`<;8pjdeD@ z&vE23%SH}KspOED&=n6avfM&I8H2z$%sY!@Hg5d65?-8!y>J(IQG-hsW!1 z*_|%uYN!gE$Azy9r{oEuBsiW+P9#AThl+>unn*#*_>wX6E>Z^|g@|)gWBK(H#AU>e zU=v*yk@pH7ufW@RmqcQ!BS8h8YjmfMj7o7=0rzXS?#6GY1k?@^z(K%ebAVmQLj7HR zuXa#-lo?_=aXt2dyWk-G6WvGMrgoxs*bTcw3Gt~6tTHDh!Pc3fa{M|jGGcSNJG4wQ ztEs|QyLN40T|-4}u)0F^&r70MAxv7$ZOdRaX15!*ZfNjV1p|{dnzYjBD=o|~E3}m5 z7Zev-(*ACvpD?Q2+=;Am$1#{D|I!ZM(`H#Jm-_38H~HZXm~Jest!*f(uC!Futgaz- zb9ccdv=z^QO5Jv<1a?27G7(LtDw~9xiEM_@6?#snMw6htvlHeaWYx*nFQ7S!vKL~g zY~2oTL1e>fBjwwDa2`GXF^C8K0CmB0)Fny_`i)lh4?~*%k+wwpqUJ+Q1^x!_r$?w! zIimx%VUG!$OXiUoOpyn6K@&}lf`0kW4tPHF5quPJ2DzBXu6P2D4=e*R$O zFjPhkBa1$pR2gsq(CG07T)^rL-x(GeX6u{vOSLJ?9gTx(qL#p6coqUM2=;^hGJhJa zM|d|$n~pen^bowSyxEP;KzWOToJ!FdBp`V~4-({43Tl^|d(fEjxC1^wyE`ELIeihG zrh>XwS+kxRq;)%WtwiRCR$lrk6*sfD@>o5J2SEdcp{aL87rqn^)+h(IP=Nx>yJnI+8L2HYObW;}0fFxuJM#Ks`o6)&Pk=$3Sv1KLxfXM?KvET2Cv0MMe?H}H`7}t zh=@~*_=$?>CYkN_L214E3e?i@@jvg*8`eH=GEvSnOlFwuFn&V*Nxo)nGrC!*sBi}h$42WL!GaM=aH z;g&=p)+VOvLt$0M$3(1#hn$>gF>aH!lS7npMA0)Y0-q2muI&1l7@izy<0`z}7s8(+dvrSKNOni2k&0e~-6K7PwIt54 GiN63oBj4Tt delta 596 zcmXw0OGuPa6u#&D_kYjK^#LY67zr!$(Kw^x;1Cin)G)|Rw97?7xF{Xa!ZwqeqBagg z-b6|*v7o?lEU#jtQwF7sXbV?`nGl3bkBviGi|zz|a6S&-cOD#0Xe&3A$QdZe!QX_C z(=rZFAFlM}OZ7zaQ&non(ix|c{b6Z4HPw5AMSg*5NvZINq=LLy79^Z9Q&buPn?4DTwTX=(_y!_42#v@WMld^&?IHa_XK9J@lk7X&tqNW~3itTV1O$W~ z$6Z8EDIcAH5`J+8Kit|L2eCblZrfvAC)wa4W~(t}g!Dp(k1sQ>i2IW?SA1Qio4}v1(gsl{@Fno2HF{FG=g^CMXBO-D z&3PQ+?ekb|nL%P?26@W<_YcOA^1v%xr}C>W1dC%7d2*S~@UdlDA)c+!tHAqLXt`)h u(hitOAdM=W)(F?TlnwdQC6k|hpr~TJPwCiI3e{R^(0Xa4si^It$?|{dBeewp diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml index fc82778f..12192b58 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/ApplicationContractsSwaggerDoc.xml @@ -24,6 +24,71 @@ Comment输入创建对象 + + + 评论id + + + + + 主题id + + + + + 第一层评论id,第一层为0 + + + + + 被回复的CommentId,第一层为0 + + + + + 评论多反 + + + + + 主题id + + + + + 用户,评论人用户信息 + + + + + 被评论的用户信息 + + + + + 这个不是一个树形,而是存在一个二维数组,该Children只有在顶级时候,只有一层 + + + + + 单返回,返回单条评论即可 + + + + + 用户id联表为用户对象 + + + + + 根节点的评论id + + + + + 被回复的CommentId + + Discuss输入创建对象 diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentCreateInputVo.cs b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentCreateInputVo.cs index 15986756..02002a15 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentCreateInputVo.cs +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentCreateInputVo.cs @@ -13,17 +13,23 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos public class CommentCreateInputVo { + /// + /// 评论id + /// public string Content { get; set; } + /// + /// 主题id + /// public long DiscussId { get; set; } /// - /// 根节点的评论id,这里也可根据树形查询获取到根节点,但是不够优雅,前端是二维数组,选择前端传值即可,如果是根,传0,如果不是 + /// 第一层评论id,第一层为0 /// public long RootId { get; set; } /// - /// 被回复的CommentId + /// 被回复的CommentId,第一层为0 /// public long ParentId { get; set; } } diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentGetListOutputDto.cs b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentGetListOutputDto.cs index 3a996a46..ae21a61d 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentGetListOutputDto.cs +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application.Contracts/Forum/Dtos/Comment/CommentGetListOutputDto.cs @@ -19,10 +19,6 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos public DateTime? CreateTime { get; set; } public string Content { get; set; } - /// - /// ڵid - /// - public long RootId { get; set; } /// /// id @@ -31,16 +27,21 @@ namespace Yi.BBS.Application.Contracts.Forum.Dtos public long ParentId { get; set; } + public long RootId { get; set; } /// - /// û,ûϢ۵ûϢһڵ + /// û,ûϢ /// - public UserGetOutputDto User { get; set; } + public UserGetOutputDto CreateUser { get; set; } + /// + /// ۵ûϢ + /// + public UserGetOutputDto CommentedUser { get; set; } /// - /// һΣǴһά飬Childrenֻһ + /// һΣǴһά飬Childrenֻڶʱֻһ /// public List Children { get; set; } = new List(); } diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/ApplicationSwaggerDoc.xml b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/ApplicationSwaggerDoc.xml index 18c08834..20162d43 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/ApplicationSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/ApplicationSwaggerDoc.xml @@ -51,12 +51,12 @@ - Comment服务实现 + 评论 - 获取改主题下的评论 + 获取改主题下的评论,结构为二维列表,该查询无分页 diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/Forum/CommentService.cs b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/Forum/CommentService.cs index 3fcfce99..3961633e 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/Forum/CommentService.cs +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Application/Forum/CommentService.cs @@ -46,24 +46,36 @@ namespace Yi.BBS.Application.Forum var entities = await _DbQueryable.WhereIF(!string.IsNullOrEmpty(input.Content), x => x.Content.Contains(input.Content)) .Where(x => x.DiscussId == discussId) + .Includes(x=>x.CreateUser) .ToListAsync(); - //获取全量主题评论, 先获取顶级的,将其他子组合到顶级下,形成一个二维,先转成dto - List? items = await MapToGetListOutputDtosAsync(entities); + //结果初始值,第一层等于全部根节点 + var outPut = entities.Where(x => x.ParentId == 0).ToList(); - //这里就是dto的处理啦 + //将全部数据进行hash + var dic = entities.ToDictionary(x => x.Id); - //获取根节点 - var rootDic = items.Where(x => x.ParentId != 0).ToDictionary(x => x.Id); - foreach (var comment in items) + foreach (var comment in entities) { + //不是根节点,需要赋值 被评论者用户信息等 if (comment.ParentId != 0) { - rootDic[comment.Id].Children.Add(comment); + var parentComment = dic[comment.ParentId]; + comment.CommentedUser = parentComment.CreateUser; } + + //root或者parent id,根节点都是等于0的 + var id = comment.RootId; + if (id is not 0) + { + dic[id].Children.Add(comment); + } + } - return new PagedResultDto(0, items); + //获取全量主题评论, 先获取顶级的,将其他子组合到顶级下,形成一个二维,先转成dto + List? items = await MapToGetListOutputDtosAsync(outPut); + return new PagedResultDto(0, items); } @@ -79,7 +91,7 @@ namespace Yi.BBS.Application.Forum { throw new UserFriendlyException(DiscussConst.主题不存在); } - var entity = await _forumManager.CreateCommentAsync(input.DiscussId, input.Content); + var entity = await _forumManager.CreateCommentAsync(input.DiscussId, input.ParentId,input.RootId, input.Content); return await MapToGetOutputDtoAsync(entity); } diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/DomainSwaggerDoc.xml b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/DomainSwaggerDoc.xml index 1f66dd82..fc516425 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/DomainSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/DomainSwaggerDoc.xml @@ -21,6 +21,31 @@ + + + 评论表 + + + + + 采用二维数组方式,不使用树形方式 + + + + + 被回复的CommentId + + + + + 用户,评论人用户信息 + + + + + 被评论的用户信息 + + 论坛模块的领域服务 diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/Entities/CommentEntity.cs b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/Entities/CommentEntity.cs index 865920b3..21372609 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/Entities/CommentEntity.cs +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/Entities/CommentEntity.cs @@ -33,27 +33,34 @@ namespace Yi.BBS.Domain.Forum.Entities [SugarColumn(IsPrimaryKey = true)] public long Id { get; set; } public bool IsDeleted { get; set; } - - public DateTime? CreateTime { get; set; } public string Content { get; set; } public long DiscussId { get; set; } - - /// - /// 根节点的评论id - /// - public long RootId { get; set; } - /// /// 被回复的CommentId /// public long ParentId { get; set; } public DateTime CreationTime { get; set; } + public long RootId { get; set; } + [SugarColumn(IsIgnore = true)] + public List Children { get; set; } = new(); + + + /// + /// 用户,评论人用户信息 + /// [Navigate(NavigateType.OneToOne, nameof(CreatorId))] - public UserEntity User { get; set; } + public UserEntity CreateUser { get; set; } + + /// + /// 被评论的用户信息 + /// + [SugarColumn(IsIgnore = true)] + public UserEntity CommentedUser { get; set; } + public long? CreatorId { get; set; } public long? LastModifierId { get; set; } diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/ForumManager.cs b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/ForumManager.cs index 270be8b4..dbbce85e 100644 --- a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/ForumManager.cs +++ b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Domain/Forum/ForumManager.cs @@ -40,11 +40,13 @@ namespace Yi.BBS.Domain.Forum return await _discussRepository.InsertReturnEntityAsync(entity); } - public async Task CreateCommentAsync(long discussId, string content) + public async Task CreateCommentAsync(long discussId,long parentId,long rootId, string content) { var entity = new CommentEntity(discussId); entity.Id = SnowflakeHelper.NextId; entity.Content = content; + entity.ParentId = parentId; + entity.RootId = rootId; return await _commentRepository.InsertReturnEntityAsync(entity); } } diff --git a/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Web/yi-sqlsugar-dev.db b/Yi.Framework.Net6/src/project/bbs/Yi.BBS.Web/yi-sqlsugar-dev.db index a2fe576f1fdecbf64d916aa6ea3a76cea1b53047..bfc403bbf444ae174f4859323331a4c5189e2656 100644 GIT binary patch delta 2719 zcmchZdrTBZ9LHy7m$|*i-hz)i1(Acc=mB@^;~w0Rmco@P3RaP%O%sGePD?#S5YgH{ z5DaP4q=|asinfYTTVII+(ZwoY?VrWefB46uNYh$1wiK;4+NSC3Jt(GNqHTJ+w>vvK z^PTT+c7LCptrw?ly)k`z;xx(v0Ch~GYhQ3Qj?_`yn0lv#`<;8pjdeD@ z&vE23%SH}KspOED&=n6avfM&I8H2z$%sY!@Hg5d65?-8!y>J(IQG-hsW!1 z*_|%uYN!gE$Azy9r{oEuBsiW+P9#AThl+>unn*#*_>wX6E>Z^|g@|)gWBK(H#AU>e zU=v*yk@pH7ufW@RmqcQ!BS8h8YjmfMj7o7=0rzXS?#6GY1k?@^z(K%ebAVmQLj7HR zuXa#-lo?_=aXt2dyWk-G6WvGMrgoxs*bTcw3Gt~6tTHDh!Pc3fa{M|jGGcSNJG4wQ ztEs|QyLN40T|-4}u)0F^&r70MAxv7$ZOdRaX15!*ZfNjV1p|{dnzYjBD=o|~E3}m5 z7Zev-(*ACvpD?Q2+=;Am$1#{D|I!ZM(`H#Jm-_38H~HZXm~Jest!*f(uC!Futgaz- zb9ccdv=z^QO5Jv<1a?27G7(LtDw~9xiEM_@6?#snMw6htvlHeaWYx*nFQ7S!vKL~g zY~2oTL1e>fBjwwDa2`GXF^C8K0CmB0)Fny_`i)lh4?~*%k+wwpqUJ+Q1^x!_r$?w! zIimx%VUG!$OXiUoOpyn6K@&}lf`0kW4tPHF5quPJ2DzBXu6P2D4=e*R$O zFjPhkBa1$pR2gsq(CG07T)^rL-x(GeX6u{vOSLJ?9gTx(qL#p6coqUM2=;^hGJhJa zM|d|$n~pen^bowSyxEP;KzWOToJ!FdBp`V~4-({43Tl^|d(fEjxC1^wyE`ELIeihG zrh>XwS+kxRq;)%WtwiRCR$lrk6*sfD@>o5J2SEdcp{aL87rqn^)+h(IP=Nx>yJnI+8L2HYObW;}0fFxuJM#Ks`o6)&Pk=$3Sv1KLxfXM?KvET2Cv0MMe?H}H`7}t zh=@~*_=$?>CYkN_L214E3e?i@@jvg*8`eH=GEvSnOlFwuFn&V*Nxo)nGrC!*sBi}h$42WL!GaM=aH z;g&=p)+VOvLt$0M$3(1#hn$>gF>aH!lS7npMA0)Y0-q2muI&1l7@izy<0`z}7s8(+dvrSKNOni2k&0e~-6K7PwIt54 GiN63oBj4Tt delta 596 zcmXw0OGuPa6u#&D_kYjK^#LY67zr!$(Kw^x;1Cin)G)|Rw97?7xF{Xa!ZwqeqBagg z-b6|*v7o?lEU#jtQwF7sXbV?`nGl3bkBviGi|zz|a6S&-cOD#0Xe&3A$QdZe!QX_C z(=rZFAFlM}OZ7zaQ&non(ix|c{b6Z4HPw5AMSg*5NvZINq=LLy79^Z9Q&buPn?4DTwTX=(_y!_42#v@WMld^&?IHa_XK9J@lk7X&tqNW~3itTV1O$W~ z$6Z8EDIcAH5`J+8Kit|L2eCblZrfvAC)wa4W~(t}g!Dp(k1sQ>i2IW?SA1Qio4}v1(gsl{@Fno2HF{FG=g^CMXBO-D z&3PQ+?ekb|nL%P?26@W<_YcOA^1v%xr}C>W1dC%7d2*S~@UdlDA)c+!tHAqLXt`)h u(hitOAdM=W)(F?TlnwdQC6k|hpr~TJPwCiI3e{R^(0Xa4si^It$?|{dBeewp