Browse Source

blogging - implement concurrency stamp

pull/9838/head
enisn 5 years ago
parent
commit
c6f504af71
  1. 5
      modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs
  2. 2
      modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs
  3. 8
      modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs
  4. 5
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs
  5. 4
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs
  6. 5
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs
  7. 6
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs
  8. 2
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs
  9. 2
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
  10. 1
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml
  11. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml
  12. 7
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs
  13. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js

5
modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs

@ -1,8 +1,9 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Admin.Blogs namespace Volo.Blogging.Admin.Blogs
{ {
public class UpdateBlogDto public class UpdateBlogDto : IHasConcurrencyStamp
{ {
[Required] [Required]
public string Name { get; set; } public string Name { get; set; }
@ -11,5 +12,7 @@ namespace Volo.Blogging.Admin.Blogs
public string ShortName { get; set; } public string ShortName { get; set; }
public string Description { get; set; } public string Description { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

2
modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Blogging.Blogs; using Volo.Blogging.Blogs;
using Volo.Blogging.Blogs.Dtos; using Volo.Blogging.Blogs.Dtos;
using Volo.Blogging.Posts; using Volo.Blogging.Posts;
@ -58,6 +59,7 @@ namespace Volo.Blogging.Admin.Blogs
blog.SetName(input.Name); blog.SetName(input.Name);
blog.SetShortName(input.ShortName); blog.SetShortName(input.ShortName);
blog.Description = input.Description; blog.Description = input.Description;
blog.SetConcurrencyStamp(input.ConcurrencyStamp);
return ObjectMapper.Map<Blog, BlogDto>(blog); return ObjectMapper.Map<Blog, BlogDto>(blog);
} }

8
modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.Blogging.Admin.Blogs; using Volo.Blogging.Admin.Blogs;
using Volo.Blogging.Blogs; using Volo.Blogging.Blogs;
@ -53,7 +54,7 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs
return Page(); return Page();
} }
public class BlogEditViewModel public class BlogEditViewModel : IHasConcurrencyStamp
{ {
[HiddenInput] [HiddenInput]
[Required] [Required]
@ -69,8 +70,9 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs
[DynamicStringLength(typeof(BlogConsts), nameof(BlogConsts.MaxDescriptionLength))] [DynamicStringLength(typeof(BlogConsts), nameof(BlogConsts.MaxDescriptionLength))]
public string Description { get; set; } public string Description { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
} }
} }
} }

5
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs

@ -1,15 +1,18 @@
using System; using System;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Blogging.Posts; using Volo.Blogging.Posts;
namespace Volo.Blogging.Comments.Dtos namespace Volo.Blogging.Comments.Dtos
{ {
public class CommentWithDetailsDto : FullAuditedEntityDto<Guid> public class CommentWithDetailsDto : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{ {
public Guid? RepliedCommentId { get; set; } public Guid? RepliedCommentId { get; set; }
public string Text { get; set; } public string Text { get; set; }
public BlogUserDto Writer { get; set; } public BlogUserDto Writer { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

4
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs

@ -1,10 +1,12 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Comments.Dtos namespace Volo.Blogging.Comments.Dtos
{ {
public class UpdateCommentDto public class UpdateCommentDto : IHasConcurrencyStamp
{ {
[Required] [Required]
public string Text { get; set; } public string Text { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

5
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs

@ -2,11 +2,12 @@
using System.Collections.Generic; using System.Collections.Generic;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Blogging.Tagging.Dtos; using Volo.Blogging.Tagging.Dtos;
namespace Volo.Blogging.Posts namespace Volo.Blogging.Posts
{ {
public class PostWithDetailsDto : FullAuditedEntityDto<Guid> public class PostWithDetailsDto : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{ {
public Guid BlogId { get; set; } public Guid BlogId { get; set; }
@ -28,5 +29,7 @@ namespace Volo.Blogging.Posts
public BlogUserDto Writer { get; set; } public BlogUserDto Writer { get; set; }
public List<TagDto> Tags { get; set; } public List<TagDto> Tags { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

6
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs

@ -1,10 +1,10 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Reflection; using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Posts namespace Volo.Blogging.Posts
{ {
public class UpdatePostDto public class UpdatePostDto : IHasConcurrencyStamp
{ {
public Guid BlogId { get; set; } public Guid BlogId { get; set; }
@ -23,5 +23,7 @@ namespace Volo.Blogging.Posts
public string Description { get; set; } public string Description { get; set; }
public string Tags { get; set; } public string Tags { get; set; }
public string ConcurrencyStamp { get; set; }
} }
} }

2
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Data;
using Volo.Abp.Guids; using Volo.Abp.Guids;
using Volo.Blogging.Comments.Dtos; using Volo.Blogging.Comments.Dtos;
using Volo.Blogging.Posts; using Volo.Blogging.Posts;
@ -99,6 +100,7 @@ namespace Volo.Blogging.Comments
await AuthorizationService.CheckAsync(comment, CommonOperations.Update); await AuthorizationService.CheckAsync(comment, CommonOperations.Update);
comment.SetText(input.Text); comment.SetText(input.Text);
comment.SetConcurrencyStamp(input.ConcurrencyStamp);
comment = await _commentRepository.UpdateAsync(comment); comment = await _commentRepository.UpdateAsync(comment);

2
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs

@ -11,6 +11,7 @@ using Volo.Blogging.Comments;
using Volo.Blogging.Tagging; using Volo.Blogging.Tagging;
using Volo.Blogging.Tagging.Dtos; using Volo.Blogging.Tagging.Dtos;
using Volo.Blogging.Users; using Volo.Blogging.Users;
using Volo.Abp.Data;
namespace Volo.Blogging.Posts namespace Volo.Blogging.Posts
{ {
@ -173,6 +174,7 @@ namespace Volo.Blogging.Posts
post.SetTitle(input.Title); post.SetTitle(input.Title);
post.SetUrl(input.Url); post.SetUrl(input.Url);
post.SetConcurrencyStamp(input.ConcurrencyStamp);
post.Content = input.Content; post.Content = input.Content;
post.Description = input.Description; post.Description = input.Description;
post.CoverImage = input.CoverImage; post.CoverImage = input.CoverImage;

1
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml

@ -230,6 +230,7 @@
<div> <div>
<form class="editFormClass"> <form class="editFormClass">
<input name="commentId" value="@commentWithRepliesDto.Comment.Id" hidden /> <input name="commentId" value="@commentWithRepliesDto.Comment.Id" hidden />
<input name="concurrencyStamp" value="@commentWithRepliesDto.Comment.ConcurrencyStamp" hidden />
<div class="form-group"> <div class="form-group">
<textarea class="form-control" name="text" id="textBoxId" rows="4">@commentWithRepliesDto.Comment.Text</textarea> <textarea class="form-control" name="text" id="textBoxId" rows="4">@commentWithRepliesDto.Comment.Text</textarea>
</div> </div>

3
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml

@ -28,6 +28,9 @@
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<form method="post" id="edit-post-form"> <form method="post" id="edit-post-form">
<abp-input asp-for="Post.ConcurrencyStamp" />
<abp-input asp-for="Post.Title" auto-focus="true" /> <abp-input asp-for="Post.Title" auto-focus="true" />
<abp-alert <abp-alert

7
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Volo.Blogging.Blogs; using Volo.Blogging.Blogs;
using Volo.Blogging.Pages.Blogs.Shared.Helpers; using Volo.Blogging.Pages.Blogs.Shared.Helpers;
@ -75,7 +76,8 @@ namespace Volo.Blogging.Pages.Blog.Posts
} }
} }
public class EditPostViewModel public class EditPostViewModel : IHasConcurrencyStamp
{ {
[Required] [Required]
[HiddenInput] [HiddenInput]
@ -106,5 +108,8 @@ namespace Volo.Blogging.Pages.Blog.Posts
public string Description { get; set; } public string Description { get; set; }
public string Tags { get; set; } public string Tags { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
} }
} }

3
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js

@ -60,11 +60,14 @@
id: form.commentId, id: form.commentId,
commentDto: { commentDto: {
text: form.text, text: form.text,
// TODO: Implement concurrencyStamp here:
//concurrencyStamp: form.concurrencyStamp
}, },
}, },
success: function (response) { success: function (response) {
$('div .editForm').hide(); $('div .editForm').hide();
$('#' + form.commentId).text(form.text); $('#' + form.commentId).text(form.text);
//$(this).find('[name=concurrencyStamp]').val(response.concurrencyStamp);
}, },
}); });
}); });

Loading…
Cancel
Save