Browse Source

Merge pull request #9838 from abpframework/concurrency-stamps

Concurrency Stamp Implementation to modules
pull/9961/head
Halil İbrahim Kalkan 5 years ago
committed by GitHub
parent
commit
cb46781ab6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      framework/src/Volo.Abp.Data/Volo/Abp/Data/ConcurrencyStampExtensions.cs
  2. 6
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs
  3. 2
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml
  4. 5
      modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs
  5. 2
      modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs
  6. 8
      modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs
  7. 5
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs
  8. 4
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs
  9. 5
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs
  10. 6
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs
  11. 2
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs
  12. 2
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
  13. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml
  14. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml
  15. 7
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs
  16. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js
  17. 2036
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.Designer.cs
  18. 24
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.cs
  19. 8
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs
  20. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs
  21. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs
  22. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs
  23. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogPostDto.cs
  24. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs
  25. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs
  26. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageInputDto.cs
  27. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs
  28. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs
  29. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs
  30. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs
  31. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs
  32. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs
  33. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Update.cshtml.cs
  34. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml.cs
  35. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml
  36. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs
  37. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml
  38. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml.cs
  39. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/EditModal.cshtml.cs
  40. 15
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs
  41. 5
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs
  42. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs
  43. 10
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs
  44. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentDto.cs
  45. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentWithDetailsDto.cs
  46. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs
  47. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs
  48. 7
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml
  49. 3
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js
  50. 6
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ProjectDto.cs
  51. 6
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/UpdateProjectDto.cs
  52. 2
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs
  53. 7
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Edit.cshtml.cs
  54. 7
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/ProfileDto.cs
  55. 3
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/UpdateProfileDto.cs
  56. 6
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs
  57. 4
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
  58. 3
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs
  59. 9
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimType.cs
  60. 5
      modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs
  61. 8
      modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantUpdateDto.cs
  62. 5
      modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs
  63. 1
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml
  64. 6
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs

18
framework/src/Volo.Abp.Data/Volo/Abp/Data/ConcurrencyStampExtensions.cs

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Domain.Entities;
using JetBrains.Annotations;
namespace Volo.Abp.Data
{
public static class ConcurrencyStampExtensions
{
public static void SetConcurrencyStampIfNotNull(this IHasConcurrencyStamp entity, [CanBeNull] string concurrencyStamp)
{
if (!concurrencyStamp.IsNullOrEmpty())
{
entity.ConcurrencyStamp = concurrencyStamp;
}
}
}
}

6
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs

@ -2,6 +2,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Identity;
using Volo.Abp.Validation;
@ -28,7 +29,7 @@ namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.P
return View("~/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml", model);
}
public class PersonalInfoModel
public class PersonalInfoModel : IHasConcurrencyStamp
{
[Required]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxUserNameLength))]
@ -51,6 +52,9 @@ namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.P
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))]
[Display(Name = "DisplayName:PhoneNumber")]
public string PhoneNumber { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}

2
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml

@ -19,6 +19,8 @@
<h4>@L["PersonalSettings"]</h4><hr/>
<form method="post" id="PersonalSettingsForm">
<abp-input asp-for="ConcurrencyStamp" />
<abp-input asp-for="UserName" readonly="!isUserNameUpdateEnabled"/>

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

@ -1,8 +1,9 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Admin.Blogs
{
public class UpdateBlogDto
public class UpdateBlogDto : IHasConcurrencyStamp
{
[Required]
public string Name { get; set; }
@ -11,5 +12,7 @@ namespace Volo.Blogging.Admin.Blogs
public string ShortName { 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 Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Blogging.Blogs;
using Volo.Blogging.Blogs.Dtos;
using Volo.Blogging.Posts;
@ -58,6 +59,7 @@ namespace Volo.Blogging.Admin.Blogs
blog.SetName(input.Name);
blog.SetShortName(input.ShortName);
blog.Description = input.Description;
blog.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
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 Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.Blogging.Admin.Blogs;
using Volo.Blogging.Blogs;
@ -53,7 +54,7 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs
return Page();
}
public class BlogEditViewModel
public class BlogEditViewModel : IHasConcurrencyStamp
{
[HiddenInput]
[Required]
@ -69,8 +70,9 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs
[DynamicStringLength(typeof(BlogConsts), nameof(BlogConsts.MaxDescriptionLength))]
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 Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Blogging.Posts;
namespace Volo.Blogging.Comments.Dtos
{
public class CommentWithDetailsDto : FullAuditedEntityDto<Guid>
public class CommentWithDetailsDto : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{
public Guid? RepliedCommentId { get; set; }
public string Text { 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 Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Comments.Dtos
{
public class UpdateCommentDto
public class UpdateCommentDto : IHasConcurrencyStamp
{
[Required]
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 JetBrains.Annotations;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Blogging.Tagging.Dtos;
namespace Volo.Blogging.Posts
{
public class PostWithDetailsDto : FullAuditedEntityDto<Guid>
public class PostWithDetailsDto : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{
public Guid BlogId { get; set; }
@ -28,5 +29,7 @@ namespace Volo.Blogging.Posts
public BlogUserDto Writer { 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.ComponentModel.DataAnnotations;
using System.Reflection;
using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Posts
{
public class UpdatePostDto
public class UpdatePostDto : IHasConcurrencyStamp
{
public Guid BlogId { get; set; }
@ -23,5 +23,7 @@ namespace Volo.Blogging.Posts
public string Description { 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.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Data;
using Volo.Abp.Guids;
using Volo.Blogging.Comments.Dtos;
using Volo.Blogging.Posts;
@ -99,6 +100,7 @@ namespace Volo.Blogging.Comments
await AuthorizationService.CheckAsync(comment, CommonOperations.Update);
comment.SetText(input.Text);
comment.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
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.Dtos;
using Volo.Blogging.Users;
using Volo.Abp.Data;
namespace Volo.Blogging.Posts
{
@ -173,6 +174,7 @@ namespace Volo.Blogging.Posts
post.SetTitle(input.Title);
post.SetUrl(input.Url);
post.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
post.Content = input.Content;
post.Description = input.Description;
post.CoverImage = input.CoverImage;

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

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

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

@ -28,6 +28,9 @@
<div class="card">
<div class="card-body">
<form method="post" id="edit-post-form">
<abp-input asp-for="Post.ConcurrencyStamp" />
<abp-input asp-for="Post.Title" auto-focus="true" />
<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.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.Blogging.Blogs;
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]
[HiddenInput]
@ -106,5 +108,8 @@ namespace Volo.Blogging.Pages.Blog.Posts
public string Description { 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,
commentDto: {
text: form.text,
// TODO: Implement concurrencyStamp here:
//concurrencyStamp: form.concurrencyStamp
},
},
success: function (response) {
$('div .editForm').hide();
$('#' + form.commentId).text(form.text);
//$(this).find('[name=concurrencyStamp]').val(response.concurrencyStamp);
},
});
});

2036
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.Designer.cs

File diff suppressed because it is too large

24
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.cs

@ -0,0 +1,24 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Volo.CmsKit.Migrations
{
public partial class ConcurrencyStampUpdate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "ConcurrencyStamp",
table: "CmsComments",
type: "nvarchar(40)",
maxLength: 40,
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ConcurrencyStamp",
table: "CmsComments");
}
}
}

8
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs

@ -18,7 +18,7 @@ namespace Volo.CmsKit.Migrations
modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("ProductVersion", "5.0.7")
.HasAnnotation("ProductVersion", "5.0.9")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
@ -1341,6 +1341,12 @@ namespace Volo.CmsKit.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");

4
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs

@ -1,13 +1,15 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Blogs
{
[Serializable]
public class BlogDto : EntityDto<Guid>
public class BlogDto : EntityDto<Guid>, IHasConcurrencyStamp
{
public string Name { get; set; }
public string Slug { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs

@ -1,11 +1,12 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Auditing;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Blogs
{
[Serializable]
public class BlogPostDto : EntityDto<Guid>, IHasCreationTime, IHasModificationTime
public class BlogPostDto : EntityDto<Guid>, IHasCreationTime, IHasModificationTime, IHasConcurrencyStamp
{
public Guid BlogId { get; set; }
@ -22,5 +23,7 @@ namespace Volo.CmsKit.Admin.Blogs
public DateTime CreationTime { get; set; }
public DateTime? LastModificationTime { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogDto.cs

@ -1,10 +1,11 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Blogs;
namespace Volo.CmsKit.Admin.Blogs
{
public class UpdateBlogDto
public class UpdateBlogDto : IHasConcurrencyStamp
{
[Required]
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))]
@ -13,5 +14,7 @@ namespace Volo.CmsKit.Admin.Blogs
[Required]
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))]
public string Slug { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/UpdateBlogPostDto.cs

@ -1,12 +1,13 @@
using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Blogs;
namespace Volo.CmsKit.Admin.Blogs
{
[Serializable]
public class UpdateBlogPostDto
public class UpdateBlogPostDto : IHasConcurrencyStamp
{
[Required]
[DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxTitleLength))]
@ -23,5 +24,7 @@ namespace Volo.CmsKit.Admin.Blogs
public string Content { get; set; }
public Guid? CoverImageMediaId { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs

@ -1,10 +1,11 @@
using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Menus
{
[Serializable]
public class MenuItemUpdateInput
public class MenuItemUpdateInput : IHasConcurrencyStamp
{
[Required]
public string DisplayName { get; set; }
@ -22,5 +23,7 @@ namespace Volo.CmsKit.Admin.Menus
public string CssClass { get; set; }
public Guid? PageId { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs

@ -1,10 +1,11 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Admin.Pages
{
[Serializable]
public class PageDto : AuditedEntityDto<Guid>
public class PageDto : AuditedEntityDto<Guid>, IHasConcurrencyStamp
{
public string Title { get; set; }
@ -15,5 +16,7 @@ namespace Volo.CmsKit.Admin.Pages
public string Script { get; set; }
public string Style { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageInputDto.cs

@ -1,12 +1,13 @@
using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Pages;
namespace Volo.CmsKit.Admin.Pages
{
[Serializable]
public class UpdatePageInputDto
public class UpdatePageInputDto : IHasConcurrencyStamp
{
[Required]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))]
@ -15,7 +16,7 @@ namespace Volo.CmsKit.Admin.Pages
[Required]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxSlugLength))]
public string Slug { get; set; }
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxContentLength))]
public string Content { get; set; }
@ -24,5 +25,7 @@ namespace Volo.CmsKit.Admin.Pages
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxStyleLength))]
public string Style { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs

@ -1,15 +1,18 @@
using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Tags;
namespace Volo.CmsKit.Admin.Tags
{
[Serializable]
public class TagUpdateDto
public class TagUpdateDto : IHasConcurrencyStamp
{
[Required]
[DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))]
public string Name { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.GlobalFeatures;
@ -67,6 +68,8 @@ namespace Volo.CmsKit.Admin.Blogs
blog = await BlogManager.UpdateAsync(blog, input.Name, input.Slug);
blog.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
await BlogRepository.UpdateAsync(blog);
return ObjectMapper.Map<Blog, BlogDto>(blog);

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs

@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Users;
using Volo.CmsKit.Blogs;
@ -63,6 +63,7 @@ namespace Volo.CmsKit.Admin.Blogs
blogPost.SetTitle(input.Title);
blogPost.SetShortDescription(input.ShortDescription);
blogPost.SetContent(input.Content);
blogPost.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
blogPost.CoverImageMediaId = input.CoverImageMediaId;
if (blogPost.Slug != input.Slug)

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs

@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Menus;
@ -87,6 +88,7 @@ namespace Volo.CmsKit.Admin.Menus
menuItem.Target = input.Target;
menuItem.ElementId = input.ElementId;
menuItem.CssClass = input.CssClass;
menuItem.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
await MenuItemRepository.UpdateAsync(menuItem);

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.Admin.Menus;
using Volo.CmsKit.GlobalFeatures;
@ -72,6 +73,7 @@ namespace Volo.CmsKit.Admin.Pages
page.SetContent(input.Content);
page.SetScript(input.Script);
page.SetStyle(input.Style);
page.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
await PageRepository.UpdateAsync(page);

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Permissions;
@ -53,6 +54,8 @@ namespace Volo.CmsKit.Admin.Tags
id,
input.Name);
tag.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
await Repository.UpdateAsync(tag);
return ObjectMapper.Map<Tag, TagDto>(tag);

5
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Update.cshtml.cs

@ -8,6 +8,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Blogs;
using Volo.CmsKit.Blogs;
@ -56,7 +57,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts
[AutoMap(typeof(BlogPostDto))]
[AutoMap(typeof(UpdateBlogPostDto), ReverseMap = true)]
public class UpdateBlogPostViewModel
public class UpdateBlogPostViewModel : IHasConcurrencyStamp
{
[DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxTitleLength))]
[Required]
@ -79,6 +80,8 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts
[HiddenInput]
public Guid? CoverImageMediaId { get; set; }
public string ConcurrencyStamp { get; set; }
}
}
}

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml.cs

@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc;
using System;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Blogs;
using Volo.CmsKit.Blogs;
@ -43,7 +44,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs
[AutoMap(typeof(BlogDto))]
[AutoMap(typeof(UpdateBlogDto), ReverseMap = true)]
public class UpdateBlogViewModel
public class UpdateBlogViewModel : IHasConcurrencyStamp
{
[Required]
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))]
@ -52,6 +53,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs
[DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxSlugLength))]
[Required]
public string Slug { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}

1
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml

@ -17,6 +17,7 @@
<abp-modal-header title="@L["New"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="Id"/>
<abp-input asp-for="ViewModel.ConcurrencyStamp"/>
<abp-tabs tab-style="Tab">
<abp-tab name="url" title="@L["Url"]">

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Volo.Abp.Domain.Entities;
using Volo.CmsKit.Admin.Menus;
using Volo.CmsKit.Menus;
@ -43,7 +44,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
[AutoMap(typeof(MenuItemDto))]
[AutoMap(typeof(MenuItemUpdateInput), ReverseMap = true)]
public class MenuItemUpdateViewModel
public class MenuItemUpdateViewModel : IHasConcurrencyStamp
{
[Required]
public string DisplayName { get; set; }
@ -61,6 +62,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
public string CssClass { get; set; }
public Guid? PageId { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}

2
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml

@ -40,6 +40,8 @@
<form asp-page="/CmsKit/Pages/Update" id="form-page-update">
<abp-input asp-for="@Model.Id" />
<abp-input asp-for="@Model.ViewModel.ConcurrencyStamp" />
<abp-input asp-for="@Model.ViewModel.Title" />
<abp-input asp-for="ViewModel.Slug" title="@L["PageSlugInformation"]" data-toggle="tooltip" />

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml.cs

@ -4,6 +4,7 @@ using System;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Pages;
using Volo.CmsKit.Pages;
@ -44,7 +45,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages
[AutoMap(typeof(PageDto))]
[AutoMap(typeof(UpdatePageInputDto), ReverseMap = true)]
public class UpdatePageViewModel
public class UpdatePageViewModel : IHasConcurrencyStamp
{
[Required]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))]
@ -65,6 +66,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages
[TextArea(Rows = 6)]
[DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxStyleLength))]
public string Style { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/EditModal.cshtml.cs

@ -6,6 +6,7 @@ using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Admin.Tags;
using Volo.CmsKit.Tags;
@ -44,11 +45,14 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags
[AutoMap(typeof(TagDto))]
[AutoMap(typeof(TagUpdateDto), ReverseMap = true)]
public class TagEditViewModel
public class TagEditViewModel : IHasConcurrencyStamp
{
[Required]
[DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))]
public string Name { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}

15
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs

@ -1,21 +1,32 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Menus
{
[Serializable]
public class MenuItemDto : AuditedEntityDto<Guid>
public class MenuItemDto : AuditedEntityDto<Guid>, IHasConcurrencyStamp
{
public Guid? ParentId { get; set; }
public string DisplayName { get; set; }
public bool IsActive { get; set; }
public string Url { get; set; }
public string Icon { get; set; }
public int Order { get; set; }
public string Target { get; set; }
public string ElementId { get; set; }
public string CssClass { get; set; }
public Guid? PageId { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs

@ -1,13 +1,16 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Tags
{
[Serializable]
public class TagDto : EntityDto<Guid>
public class TagDto : EntityDto<Guid>, IHasConcurrencyStamp
{
public string EntityType { get; set; }
public string Name { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Comments/Comment.cs

@ -7,7 +7,7 @@ using Volo.Abp.MultiTenancy;
namespace Volo.CmsKit.Comments
{
public class Comment: BasicAggregateRoot<Guid>, IHasCreationTime, IMustHaveCreator, IMultiTenant
public class Comment: AggregateRoot<Guid>, IHasCreationTime, IMustHaveCreator, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }

10
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs

@ -156,6 +156,11 @@ namespace Volo.CmsKit.MongoDB.Comments
.Where(x => x.RepliedCommentId == comment.Id)
.ToListAsync(GetCancellationToken(cancellationToken));
await base.DeleteAsync(
comment,
cancellationToken: GetCancellationToken(cancellationToken)
);
foreach (var reply in replies)
{
await base.DeleteAsync(
@ -163,11 +168,6 @@ namespace Volo.CmsKit.MongoDB.Comments
cancellationToken: GetCancellationToken(cancellationToken)
);
}
await base.DeleteAsync(
comment,
cancellationToken: GetCancellationToken(cancellationToken)
);
}
protected virtual async Task<IQueryable<Comment>> GetListQueryAsync(

5
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentDto.cs

@ -1,9 +1,10 @@
using System;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Public.Comments
{
[Serializable]
public class CommentDto
public class CommentDto : IHasConcurrencyStamp
{
public Guid Id { get; set; }
@ -20,5 +21,7 @@ namespace Volo.CmsKit.Public.Comments
public DateTime CreationTime { get; set; }
public CmsUserDto Author { get; set; } //TODO: Should only have AuthorId for the basic dto. see https://docs.abp.io/en/abp/latest/Best-Practices/Application-Services
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/CommentWithDetailsDto.cs

@ -1,10 +1,11 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Domain.Entities;
namespace Volo.CmsKit.Public.Comments
{
[Serializable]
public class CommentWithDetailsDto
public class CommentWithDetailsDto : IHasConcurrencyStamp
{
public Guid Id { get; set; }
@ -21,5 +22,7 @@ namespace Volo.CmsKit.Public.Comments
public List<CommentDto> Replies { get; set; }
public CmsUserDto Author { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

5
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs

@ -1,15 +1,18 @@
using System;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.CmsKit.Comments;
namespace Volo.CmsKit.Public.Comments
{
[Serializable]
public class UpdateCommentInput
public class UpdateCommentInput : IHasConcurrencyStamp
{
[Required]
[DynamicStringLength(typeof(CommentConsts), nameof(CommentConsts.MaxTextLength))]
public string Text { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

2
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs

@ -5,6 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Authorization;
using Volo.Abp.Data;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Users;
@ -86,6 +87,7 @@ namespace Volo.CmsKit.Public.Comments
}
comment.SetText(input.Text);
comment.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
var updatedComment = await CommentRepository.UpdateAsync(comment);

7
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml

@ -89,7 +89,7 @@
</div>;
}
@{
Func<dynamic, IHtmlContent> GetEditArea(Guid id, string text) =>
Func<dynamic, IHtmlContent> GetEditArea(Guid id, string text, string concurrencyStamp) =>
@<div class="cms-comment-edit-area" id="@($"cms-comment_{Model.EntityType}_{Model.EntityId}_{id}")" data-id="@id.ToString()" style="display:none">
<div class="card bg-light p-3 mx-0 mt-3">
<form class="cms-comment-update-form">
@ -98,6 +98,7 @@
<div class="col">
<div class="form-group m-0">
<textarea class="form-control" name="commentText" rows="3">@text</textarea>
<input name="commentConcurrencyStamp" value="@concurrencyStamp" type="hidden" />
</div>
</div>
<div class="col-auto">
@ -151,7 +152,7 @@
</div>
</div>
</div>
@GetEditArea(comment.Id, comment.Text).Invoke(null)
@GetEditArea(comment.Id, comment.Text, comment.ConcurrencyStamp).Invoke(null)
@if (comment.Replies.Any())
{
@ -181,7 +182,7 @@
</div>
</div>
@GetEditArea(reply.Id, reply.Text).Invoke(null)
@GetEditArea(reply.Id, reply.Text, reply.ConcurrencyStamp).Invoke(null)
</div>
</div>
}

3
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js

@ -106,7 +106,8 @@
volo.cmsKit.public.comments.commentPublic.update(
formAsObject.id,
{
text: formAsObject.commentText
text: formAsObject.commentText,
concurrencyStamp: formAsObject.commentConcurrencyStamp
}
).then(function () {
widgetManager.refresh($widget);

6
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ProjectDto.cs

@ -1,12 +1,12 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Application.Dtos;
using Volo.Docs.Projects;
using Volo.Abp.Domain.Entities;
namespace Volo.Docs.Admin.Projects
{
[Serializable]
public class ProjectDto : EntityDto<Guid>
public class ProjectDto : EntityDto<Guid>, IHasConcurrencyStamp
{
public string Name { get; set; }
@ -29,5 +29,7 @@ namespace Volo.Docs.Admin.Projects
public string DocumentStoreType { get; set; }
public Dictionary<string, object> ExtraProperties { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

6
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/UpdateProjectDto.cs

@ -1,9 +1,9 @@
using System.Collections.Generic;
using Volo.Docs.Projects;
using Volo.Abp.Domain.Entities;
namespace Volo.Docs.Admin.Projects
{
public class UpdateProjectDto
public class UpdateProjectDto : IHasConcurrencyStamp
{
public string Name { get; set; }
@ -22,5 +22,7 @@ namespace Volo.Docs.Admin.Projects
public string LatestVersionBranchName { get; set; }
public Dictionary<string, object> ExtraProperties { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

2
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Data;
using Volo.Abp.Guids;
using Volo.Docs.Documents;
using Volo.Docs.Documents.FullSearch.Elastic;
@ -96,6 +97,7 @@ namespace Volo.Docs.Admin.Projects
project.SetFormat(input.Format);
project.SetNavigationDocumentName(input.NavigationDocumentName);
project.SetDefaultDocumentName(input.DefaultDocumentName);
project.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
project.MinimumVersion = input.MinimumVersion;
project.MainWebsiteUrl = input.MainWebsiteUrl;

7
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Edit.cshtml.cs

@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc.Rendering;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Projects;
@ -33,7 +34,7 @@ namespace Volo.Docs.Admin.Pages.Docs.Admin.Projects
public virtual async Task<ActionResult> OnGetAsync(Guid id)
{
var project = await _projectAppService.GetAsync(id);
if (project.DocumentStoreType == "GitHub")
{
SetGithubProjectFromDto(project);
@ -89,7 +90,7 @@ namespace Volo.Docs.Admin.Pages.Docs.Admin.Projects
}
}
public abstract class EditProjectViewModelBase
public abstract class EditProjectViewModelBase : IHasConcurrencyStamp
{
[Required]
[HiddenInput]
@ -119,6 +120,8 @@ namespace Volo.Docs.Admin.Pages.Docs.Admin.Projects
[DynamicStringLength(typeof(ProjectConsts), nameof(ProjectConsts.MaxLatestVersionBranchNameLength))]
public string LatestVersionBranchName { get; set; }
public string ConcurrencyStamp { get; set; }
}
public class EditGithubProjectViewModel : EditProjectViewModelBase

7
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/ProfileDto.cs

@ -1,8 +1,9 @@
using Volo.Abp.ObjectExtending;
using Volo.Abp.Domain.Entities;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.Identity
{
public class ProfileDto : ExtensibleObject
public class ProfileDto : ExtensibleObject, IHasConcurrencyStamp
{
public string UserName { get; set; }
@ -17,5 +18,7 @@ namespace Volo.Abp.Identity
public bool IsExternal { get; set; }
public bool HasPassword { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

3
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/UpdateProfileDto.cs

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Validation;
@ -20,5 +21,7 @@ namespace Volo.Abp.Identity
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))]
public string PhoneNumber { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

6
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.Identity
@ -72,8 +73,9 @@ namespace Volo.Abp.Identity
[Authorize(IdentityPermissions.Roles.Update)]
public virtual async Task<IdentityRoleDto> UpdateAsync(Guid id, IdentityRoleUpdateDto input)
{
var role = await RoleManager.GetByIdAsync(id);
role.ConcurrencyStamp = input.ConcurrencyStamp;
var role = await RoleManager.GetByIdAsync(id);
role.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
(await RoleManager.SetRoleNameAsync(role, input.Name)).CheckErrors();

4
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs

@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.Identity
@ -98,7 +99,8 @@ namespace Volo.Abp.Identity
await IdentityOptions.SetAsync();
var user = await UserManager.GetByIdAsync(id);
user.ConcurrencyStamp = input.ConcurrencyStamp;
user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
(await UserManager.SetUserNameAsync(user, input.UserName)).CheckErrors();

3
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using Volo.Abp.Data;
using Volo.Abp.Identity.Settings;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Settings;
@ -62,6 +63,8 @@ namespace Volo.Abp.Identity
user.Name = input.Name;
user.Surname = input.Surname;
user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
input.MapExtraPropertiesTo(user);
(await UserManager.UpdateAsync(user)).CheckErrors();

9
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimType.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.Identity
public virtual string Description { get; set; }
public virtual IdentityClaimValueType ValueType { get; protected set; }
public virtual IdentityClaimValueType ValueType { get; set; }
protected IdentityClaimType()
{
@ -36,7 +36,7 @@ namespace Volo.Abp.Identity
IdentityClaimValueType valueType = IdentityClaimValueType.String)
{
Id = id;
Name = Check.NotNull(name, nameof(name));
SetName(name);
Required = required;
IsStatic = isStatic;
Regex = regex;
@ -44,5 +44,10 @@ namespace Volo.Abp.Identity
Description = description;
ValueType = valueType;
}
public void SetName([NotNull] string name)
{
Name = Check.NotNull(name, nameof(name));
}
}
}

5
modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs

@ -1,10 +1,13 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.TenantManagement
{
public class TenantDto : ExtensibleEntityDto<Guid>
public class TenantDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
public string Name { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

8
modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantUpdateDto.cs

@ -1,7 +1,9 @@
namespace Volo.Abp.TenantManagement
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.TenantManagement
{
public class TenantUpdateDto : TenantCreateOrUpdateDtoBase
public class TenantUpdateDto : TenantCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
public string ConcurrencyStamp { get; set; }
}
}

5
modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs

@ -98,9 +98,14 @@ namespace Volo.Abp.TenantManagement
public virtual async Task<TenantDto> UpdateAsync(Guid id, TenantUpdateDto input)
{
var tenant = await TenantRepository.GetAsync(id);
await TenantManager.ChangeNameAsync(tenant, input.Name);
tenant.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
input.MapExtraPropertiesTo(tenant);
await TenantRepository.UpdateAsync(tenant);
return ObjectMapper.Map<Tenant, TenantDto>(tenant);
}

1
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml

@ -18,6 +18,7 @@
<abp-modal-header title="@L["Edit"].Value"></abp-modal-header>
<abp-modal-body>
<input asp-for="Tenant.Id" />
<input asp-for="Tenant.ConcurrencyStamp" />
<abp-input asp-for="Tenant.Name" label="@L["TenantName"].Value" />
@foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties<EditModalModel.TenantInfoModel>())
{

6
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs

@ -2,6 +2,7 @@ using System;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Domain.Entities;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Validation;
@ -38,7 +39,7 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
return NoContent();
}
public class TenantInfoModel : ExtensibleObject
public class TenantInfoModel : ExtensibleObject, IHasConcurrencyStamp
{
[HiddenInput]
public Guid Id { get; set; }
@ -47,6 +48,9 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
[DynamicStringLength(typeof(TenantConsts), nameof(TenantConsts.MaxNameLength))]
[Display(Name = "DisplayName:TenantName")]
public string Name { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}
Loading…
Cancel
Save