Browse Source

CmsKit - Add EntityTypeDefinition to Reactions

pull/7500/head
enisn 6 years ago
parent
commit
0d2d29d344
  1. 18
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs
  2. 5
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs
  3. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Comments/CommentConsts.cs
  4. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  5. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  6. 53
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs
  7. 3
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/CmsKitReactionOptions.cs
  8. 41
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/DefaultReactionDefinitionStore.cs
  9. 23
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/EntityCantHaveReactionException.cs
  10. 8
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs
  11. 10
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionDefinitionDictionary.cs
  12. 26
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionEntityTypeDefinition.cs
  13. 11
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs
  14. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Reactions/ReactionPublicAppService.cs
  15. 4
      modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Reactions/ReactionManager_Tests.cs
  16. 31
      modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs

18
modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs

@ -39,6 +39,8 @@ using Volo.Abp.Threading;
using Volo.Abp.VirtualFileSystem; using Volo.Abp.VirtualFileSystem;
using Volo.CmsKit.Admin.Web; using Volo.CmsKit.Admin.Web;
using Volo.CmsKit.Public.Web; using Volo.CmsKit.Public.Web;
using System;
using Volo.CmsKit.Reactions;
namespace Volo.CmsKit namespace Volo.CmsKit
{ {
@ -81,6 +83,8 @@ namespace Volo.CmsKit
var hostingEnvironment = context.Services.GetHostingEnvironment(); var hostingEnvironment = context.Services.GetHostingEnvironment();
var configuration = context.Services.GetConfiguration(); var configuration = context.Services.GetConfiguration();
ConfigureCmsKit(context);
Configure<AbpDbContextOptions>(options => Configure<AbpDbContextOptions>(options =>
{ {
options.UseSqlServer(); options.UseSqlServer();
@ -131,6 +135,20 @@ namespace Volo.CmsKit
}); });
} }
private void ConfigureCmsKit(ServiceConfigurationContext context)
{
Configure<CmsKitReactionOptions>(options =>
{
options.EntityTypes.Add(
new ReactionEntityTypeDefinition("quote",
reactions: new[]
{
new ReactionDefinition(StandardReactions.ThumbsUp),
new ReactionDefinition(StandardReactions.ThumbsDown),
}));
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context) public override void OnApplicationInitialization(ApplicationInitializationContext context)
{ {
var app = context.GetApplicationBuilder(); var app = context.GetApplicationBuilder();

5
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs

@ -15,6 +15,11 @@
public const string SlugAlreadyExist = "CmsKit:Page:0001"; public const string SlugAlreadyExist = "CmsKit:Page:0001";
} }
public static class Reactions
{
public const string EntityCantHaveReaction = "CmsKit:Reaction:0001";
}
public static class Blogs public static class Blogs
{ {
public const string SlugAlreadyExists = "CmsKit:Blog:0001"; public const string SlugAlreadyExists = "CmsKit:Blog:0001";

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Comments/CommentConsts.cs

@ -4,6 +4,7 @@ namespace Volo.CmsKit.Comments
{ {
public static class CommentConsts public static class CommentConsts
{ {
public const string EntityType = "Comment";
public static int MaxEntityTypeLength { get; set; } = CmsEntityConsts.MaxEntityTypeLength; public static int MaxEntityTypeLength { get; set; } = CmsEntityConsts.MaxEntityTypeLength;
public static int MaxEntityIdLength { get; set; } = CmsEntityConsts.MaxEntityIdLength; public static int MaxEntityIdLength { get; set; } = CmsEntityConsts.MaxEntityIdLength;

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -17,10 +17,11 @@
"CmsKit:0003": "The entity {0} is not taggable.", "CmsKit:0003": "The entity {0} is not taggable.",
"CmsKit:Blog:0001": "The given slug ({Slug}) already exists!", "CmsKit:Blog:0001": "The given slug ({Slug}) already exists!",
"CmsKit:BlogPost:0001": "The given slug already exists!", "CmsKit:BlogPost:0001": "The given slug already exists!",
"CmsKit:Comments:0001": "The entity {0} is not commentable.", "CmsKit:Comments:0001": "The entity {EntityType} is not commentable.",
"CmsKit:Media:0001": "'{Name}' is not a valid media name.", "CmsKit:Media:0001": "'{Name}' is not a valid media name.",
"CmsKit:Media:0002": "The entity can't have media.", "CmsKit:Media:0002": "The entity can't have media.",
"CmsKit:Page:0001": "The given url ({0}) already exists.", "CmsKit:Page:0001": "The given url ({0}) already exists.",
"CmsKit:Reaction:0001": "The entity {EntityType} can't have reactions.",
"CmsKit:Tag:0002": "The entity is not taggable!", "CmsKit:Tag:0002": "The entity is not taggable!",
"CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.",
"CommentDeletionConfirmationMessage": "This comment and all replies will be deleted!", "CommentDeletionConfirmationMessage": "This comment and all replies will be deleted!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -18,6 +18,7 @@
"CmsKit:0003": "{0} ögesi etiketlenebilir değil.", "CmsKit:0003": "{0} ögesi etiketlenebilir değil.",
"CmsKit:BlogPost:0001": "Aynı url etiketi zaten mevcut.", "CmsKit:BlogPost:0001": "Aynı url etiketi zaten mevcut.",
"CmsKit:Media:0002": "Bu öge için medya eklenemez.", "CmsKit:Media:0002": "Bu öge için medya eklenemez.",
"CmsKit:Reaction:0001": "Bu ögeye tepki verilemez.",
"CmsKit:Page:0001": "Girilen url ({0}) kullanımdadır.", "CmsKit:Page:0001": "Girilen url ({0}) kullanımdadır.",
"CmsKit:Tag:0002": "Bu öge etiketlenebilir değil.", "CmsKit:Tag:0002": "Bu öge etiketlenebilir değil.",
"CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.",

53
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs

@ -12,6 +12,8 @@ using Volo.CmsKit.Localization;
using Volo.CmsKit.Pages; using Volo.CmsKit.Pages;
using Volo.CmsKit.Reactions; using Volo.CmsKit.Reactions;
using Volo.CmsKit.Tags; using Volo.CmsKit.Tags;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
namespace Volo.CmsKit namespace Volo.CmsKit
{ {
@ -25,22 +27,45 @@ namespace Volo.CmsKit
{ {
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
Configure<CmsKitReactionOptions>(options => if (GlobalFeatureManager.Instance.IsEnabled<ReactionsFeature>())
{ {
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.ThumbsUp)); Configure<CmsKitReactionOptions>(options =>
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.ThumbsDown)); {
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Smile)); if (GlobalFeatureManager.Instance.IsEnabled<BlogsFeature>())
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Wink)); {
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Confused)); options.EntityTypes.Add(
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Victory)); new ReactionEntityTypeDefinition(
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Rock)); BlogPostConsts.EntityType,
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Eyes)); reactions: new[]
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Heart)); {
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.HeartBroken)); new ReactionDefinition(StandardReactions.Smile),
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Rocket)); new ReactionDefinition(StandardReactions.ThumbsUp),
options.Reactions.AddIfNotContains(new ReactionDefinition(StandardReactions.Pray)); new ReactionDefinition(StandardReactions.ThumbsDown),
new ReactionDefinition(StandardReactions.Confused),
new ReactionDefinition(StandardReactions.Eyes),
new ReactionDefinition(StandardReactions.Heart),
new ReactionDefinition(StandardReactions.HeartBroken),
new ReactionDefinition(StandardReactions.Wink),
new ReactionDefinition(StandardReactions.Pray),
new ReactionDefinition(StandardReactions.Rocket),
new ReactionDefinition(StandardReactions.Victory),
new ReactionDefinition(StandardReactions.Rock),
}));
}
}); if (GlobalFeatureManager.Instance.IsEnabled<CommentsFeature>())
{
options.EntityTypes.Add(
new ReactionEntityTypeDefinition(
CommentConsts.EntityType,
reactions: new[]
{
new ReactionDefinition(StandardReactions.ThumbsUp),
new ReactionDefinition(StandardReactions.ThumbsDown),
}));
}
});
}
if (GlobalFeatureManager.Instance.IsEnabled<TagsFeature>()) if (GlobalFeatureManager.Instance.IsEnabled<TagsFeature>())
{ {

3
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/CmsKitReactionOptions.cs

@ -1,10 +1,11 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using System.Collections.Generic;
namespace Volo.CmsKit.Reactions namespace Volo.CmsKit.Reactions
{ {
public class CmsKitReactionOptions public class CmsKitReactionOptions
{ {
[NotNull] [NotNull]
public ReactionDefinitionDictionary Reactions { get; } = new ReactionDefinitionDictionary(); public List<ReactionEntityTypeDefinition> EntityTypes { get; } = new ();
} }
} }

41
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/DefaultReactionDefinitionStore.cs

@ -1,7 +1,10 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace Volo.CmsKit.Reactions namespace Volo.CmsKit.Reactions
@ -15,14 +18,42 @@ namespace Volo.CmsKit.Reactions
Options = options.Value; Options = options.Value;
} }
public virtual Task<List<ReactionDefinition>> GetReactionsAsync(string entityType = null) public virtual async Task<List<ReactionDefinition>> GetReactionsAsync([NotNull] string entityType)
{ {
return Task.FromResult(Options.Reactions.ToList()); Check.NotNullOrEmpty(entityType, nameof(entityType));
var definition = await GetAsync(entityType);
return definition.Reactions;
}
public virtual async Task<ReactionDefinition> GetReactionOrNullAsync([NotNull] string reactionName, [NotNull] string entityType)
{
Check.NotNullOrEmpty(entityType, nameof(entityType));
Check.NotNullOrEmpty(reactionName, nameof(reactionName));
var definition = await GetAsync(entityType);
return definition.Reactions.SingleOrDefault(x => x.Name == reactionName);
} }
public virtual Task<ReactionDefinition> GetReactionOrNullAsync(string reactionName, string entityType = null) public virtual Task<bool> IsDefinedAsync([NotNull] string entityType)
{ {
return Task.FromResult(Options.Reactions.SingleOrDefault(x => x.Name == reactionName)); Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
var isDefined = Options.EntityTypes.Any(x => x.EntityType.Equals(entityType, StringComparison.InvariantCultureIgnoreCase));
return Task.FromResult(isDefined);
}
public virtual Task<ReactionEntityTypeDefinition> GetAsync([NotNull] string entityType)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
var definition = Options.EntityTypes.SingleOrDefault(x => x.EntityType.Equals(entityType, StringComparison.InvariantCultureIgnoreCase)) ??
throw new EntityCantHaveReactionException(entityType);
return Task.FromResult(definition);
} }
} }
} }

23
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/EntityCantHaveReactionException.cs

@ -0,0 +1,23 @@

using JetBrains.Annotations;
using System.Runtime.Serialization;
using Volo.Abp;
namespace Volo.CmsKit.Reactions
{
public class EntityCantHaveReactionException : BusinessException
{
public EntityCantHaveReactionException(SerializationInfo serializationInfo, StreamingContext context) : base(serializationInfo, context)
{
}
public EntityCantHaveReactionException([NotNull] string entityType)
{
EntityType = Check.NotNullOrEmpty(entityType, nameof(entityType));
Code = CmsKitErrorCodes.Reactions.EntityCantHaveReaction;
WithData(nameof(EntityType), EntityType);
}
public string EntityType { get; }
}
}

8
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs

@ -6,8 +6,12 @@ namespace Volo.CmsKit.Reactions
{ {
public interface IReactionDefinitionStore public interface IReactionDefinitionStore
{ {
Task<List<ReactionDefinition>> GetReactionsAsync([CanBeNull] string entityType = null); Task<bool> IsDefinedAsync([NotNull]string entityType);
Task<ReactionDefinition> GetReactionOrNullAsync([NotNull] string reactionName, [CanBeNull] string entityType = null); Task<ReactionEntityTypeDefinition> GetAsync([NotNull] string entityType);
Task<List<ReactionDefinition>> GetReactionsAsync([NotNull] string entityType);
Task<ReactionDefinition> GetReactionOrNullAsync([NotNull] string reactionName, [NotNull] string entityType);
} }
} }

10
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionDefinitionDictionary.cs

@ -1,10 +0,0 @@
using System.Collections.Generic;
using JetBrains.Annotations;
using Volo.Abp.Localization;
namespace Volo.CmsKit.Reactions
{
public class ReactionDefinitionDictionary : List<ReactionDefinition>
{
}
}

26
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionEntityTypeDefinition.cs

@ -0,0 +1,26 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
namespace Volo.CmsKit.Reactions
{
public class ReactionEntityTypeDefinition : PolicySpecifiedDefinition
{
[NotNull]
public List<ReactionDefinition> Reactions { get; } = new();
public ReactionEntityTypeDefinition(
[NotNull] string entityType,
[NotNull] IEnumerable<ReactionDefinition> reactions,
IEnumerable<string> createPolicies = null,
IEnumerable<string> updatePolicies = null,
IEnumerable<string> deletePolicies = null) : base(entityType, createPolicies, updatePolicies, deletePolicies)
{
Reactions = Check.NotNull(reactions, nameof(reactions)).ToList();
}
}
}

11
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs

@ -22,8 +22,10 @@ namespace Volo.CmsKit.Reactions
} }
public virtual async Task<List<ReactionDefinition>> GetReactionsAsync( public virtual async Task<List<ReactionDefinition>> GetReactionsAsync(
[CanBeNull] string entityType = null) [NotNull] string entityType)
{ {
Check.NotNullOrEmpty(entityType, nameof(entityType));
return await ReactionDefinitionStore.GetReactionsAsync(entityType); return await ReactionDefinitionStore.GetReactionsAsync(entityType);
} }
@ -51,7 +53,7 @@ namespace Volo.CmsKit.Reactions
.ToList(); .ToList();
} }
public virtual async Task<UserReaction> CreateAsync( public virtual async Task<UserReaction> GetOrCreateAsync(
Guid creatorId, Guid creatorId,
[NotNull] string entityType, [NotNull] string entityType,
[NotNull] string entityId, [NotNull] string entityId,
@ -67,6 +69,11 @@ namespace Volo.CmsKit.Reactions
return existingReaction; return existingReaction;
} }
if (!await ReactionDefinitionStore.IsDefinedAsync(entityType))
{
throw new EntityCantHaveReactionException(entityType);
}
return await UserReactionRepository.InsertAsync( return await UserReactionRepository.InsertAsync(
new UserReaction( new UserReaction(
GuidGenerator.Create(), GuidGenerator.Create(),

2
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Reactions/ReactionPublicAppService.cs

@ -59,7 +59,7 @@ namespace Volo.CmsKit.Public.Reactions
[Authorize] [Authorize]
public virtual async Task CreateAsync(string entityType, string entityId, string reaction) public virtual async Task CreateAsync(string entityType, string entityId, string reaction)
{ {
await ReactionManager.CreateAsync( await ReactionManager.GetOrCreateAsync(
CurrentUser.GetId(), CurrentUser.GetId(),
entityType, entityType,
entityId, entityId,

4
modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Reactions/ReactionManager_Tests.cs

@ -19,7 +19,7 @@ namespace Volo.CmsKit.Reactions
[Fact] [Fact]
public async Task GetReactionsAsync() public async Task GetReactionsAsync()
{ {
var reactions = await _reactionManager.GetReactionsAsync(); var reactions = await _reactionManager.GetReactionsAsync(_cmsKitTestData.EntityType1);
reactions.Count.ShouldBe(12); reactions.Count.ShouldBe(12);
@ -44,7 +44,7 @@ namespace Volo.CmsKit.Reactions
[Fact] [Fact]
public async Task CreateAsync() public async Task CreateAsync()
{ {
var reaction = await _reactionManager.CreateAsync( var reaction = await _reactionManager.GetOrCreateAsync(
_cmsKitTestData.User2Id, _cmsKitTestData.User2Id,
_cmsKitTestData.EntityType1, _cmsKitTestData.EntityType1,
_cmsKitTestData.EntityId2, _cmsKitTestData.EntityId2,

31
modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs

@ -64,6 +64,7 @@ namespace Volo.CmsKit
BlogPostManager blogPostmanager, BlogPostManager blogPostmanager,
IBlogFeatureRepository blogFeatureRepository, IBlogFeatureRepository blogFeatureRepository,
EntityTagManager entityTagManager, EntityTagManager entityTagManager,
IOptions<CmsKitReactionOptions> reactionOptions,
IOptions<CmsKitTagOptions> tagOptions, IOptions<CmsKitTagOptions> tagOptions,
IMediaDescriptorRepository mediaDescriptorRepository, IMediaDescriptorRepository mediaDescriptorRepository,
IBlobContainer<MediaContainer> mediaBlobContainer, IBlobContainer<MediaContainer> mediaBlobContainer,
@ -87,6 +88,7 @@ namespace Volo.CmsKit
_blogPostRepository = blogPostRepository; _blogPostRepository = blogPostRepository;
_blogPostManager = blogPostmanager; _blogPostManager = blogPostmanager;
_blogFeatureRepository = blogFeatureRepository; _blogFeatureRepository = blogFeatureRepository;
_reactionOptions = reactionOptions;
_tagOptions = tagOptions; _tagOptions = tagOptions;
_mediaDescriptorRepository = mediaDescriptorRepository; _mediaDescriptorRepository = mediaDescriptorRepository;
_mediaBlobContainer = mediaBlobContainer; _mediaBlobContainer = mediaBlobContainer;
@ -138,6 +140,25 @@ namespace Volo.CmsKit
_commentsOptions.Value.EntityTypes.Add( _commentsOptions.Value.EntityTypes.Add(
new CommentEntityTypeDefinition(_cmsKitTestData.EntityType1)); new CommentEntityTypeDefinition(_cmsKitTestData.EntityType1));
List<ReactionDefinition> reactions = new()
{
new ReactionDefinition(StandardReactions.Smile),
new ReactionDefinition(StandardReactions.ThumbsUp),
new ReactionDefinition(StandardReactions.ThumbsDown),
new ReactionDefinition(StandardReactions.Confused),
new ReactionDefinition(StandardReactions.Eyes),
new ReactionDefinition(StandardReactions.Heart),
new ReactionDefinition(StandardReactions.HeartBroken),
new ReactionDefinition(StandardReactions.Wink),
new ReactionDefinition(StandardReactions.Pray),
new ReactionDefinition(StandardReactions.Rocket),
new ReactionDefinition(StandardReactions.Victory),
new ReactionDefinition(StandardReactions.Rock),
};
_reactionOptions.Value.EntityTypes.Add(new ReactionEntityTypeDefinition(_cmsKitTestData.EntityType1, reactions));
_reactionOptions.Value.EntityTypes.Add(new ReactionEntityTypeDefinition(_cmsKitTestData.EntityType2, reactions));
return Task.CompletedTask; return Task.CompletedTask;
} }
@ -207,31 +228,31 @@ namespace Volo.CmsKit
private async Task SeedReactionsAsync() private async Task SeedReactionsAsync()
{ {
await _reactionManager.CreateAsync( await _reactionManager.GetOrCreateAsync(
_cmsKitTestData.User1Id, _cmsKitTestData.User1Id,
_cmsKitTestData.EntityType1, _cmsKitTestData.EntityType1,
_cmsKitTestData.EntityId1, _cmsKitTestData.EntityId1,
StandardReactions.Confused); StandardReactions.Confused);
await _reactionManager.CreateAsync( await _reactionManager.GetOrCreateAsync(
_cmsKitTestData.User1Id, _cmsKitTestData.User1Id,
_cmsKitTestData.EntityType1, _cmsKitTestData.EntityType1,
_cmsKitTestData.EntityId1, _cmsKitTestData.EntityId1,
StandardReactions.ThumbsUp); StandardReactions.ThumbsUp);
await _reactionManager.CreateAsync( await _reactionManager.GetOrCreateAsync(
_cmsKitTestData.User1Id, _cmsKitTestData.User1Id,
_cmsKitTestData.EntityType1, _cmsKitTestData.EntityType1,
_cmsKitTestData.EntityId2, _cmsKitTestData.EntityId2,
StandardReactions.Heart); StandardReactions.Heart);
await _reactionManager.CreateAsync( await _reactionManager.GetOrCreateAsync(
_cmsKitTestData.User1Id, _cmsKitTestData.User1Id,
_cmsKitTestData.EntityType2, _cmsKitTestData.EntityType2,
_cmsKitTestData.EntityId1, _cmsKitTestData.EntityId1,
StandardReactions.Rocket); StandardReactions.Rocket);
await _reactionManager.CreateAsync( await _reactionManager.GetOrCreateAsync(
_cmsKitTestData.User2Id, _cmsKitTestData.User2Id,
_cmsKitTestData.EntityType1, _cmsKitTestData.EntityType1,
_cmsKitTestData.EntityId1, _cmsKitTestData.EntityId1,

Loading…
Cancel
Save