diff --git a/src/EventHub.Domain/Organizations/Memberships/OrganizationMembershipChangedEventHandler.cs b/src/EventHub.Domain/Organizations/Memberships/OrganizationMembershipChangedEventHandler.cs new file mode 100644 index 0000000..4625fd1 --- /dev/null +++ b/src/EventHub.Domain/Organizations/Memberships/OrganizationMembershipChangedEventHandler.cs @@ -0,0 +1,40 @@ +using System; +using System.Threading.Tasks; +using EventHub.Organizations; +using EventHub.Organizations.Memberships; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.EventBus; + +namespace EventHub.Domain.Organizations.Memberships +{ + public class OrganizationMembershipChangedEventHandler : ILocalEventHandler>, + ILocalEventHandler>, ITransientDependency + { + private readonly IRepository _organizationRepository; + + public OrganizationMembershipChangedEventHandler(IRepository organizationRepository) + { + _organizationRepository = organizationRepository; + } + + public async Task HandleEventAsync(EntityCreatedEventData eventData) + { + var organization = await _organizationRepository.GetAsync(eventData.Entity.OrganizationId); + + organization.MemberCount++; + + await _organizationRepository.UpdateAsync(organization); + } + + public async Task HandleEventAsync(EntityDeletedEventData eventData) + { + var organization = await _organizationRepository.GetAsync(eventData.Entity.OrganizationId); + + organization.MemberCount--; + + await _organizationRepository.UpdateAsync(organization); + } + } +}