diff --git a/src/EventHub.Application.Contracts/Events/EventListFilterDto.cs b/src/EventHub.Application.Contracts/Events/EventListFilterDto.cs index 90fc35e..87f1f01 100644 --- a/src/EventHub.Application.Contracts/Events/EventListFilterDto.cs +++ b/src/EventHub.Application.Contracts/Events/EventListFilterDto.cs @@ -10,6 +10,8 @@ namespace EventHub.Events public DateTime? MaxDate { get; set; } public Guid? OrganizationId { get; set; } + + public Guid? RegisteredUserId { get; set; } public bool? IsOnline { get; set; } diff --git a/src/EventHub.Application/Events/EventAppService.cs b/src/EventHub.Application/Events/EventAppService.cs index 3f66981..4c0c1ac 100644 --- a/src/EventHub.Application/Events/EventAppService.cs +++ b/src/EventHub.Application/Events/EventAppService.cs @@ -20,6 +20,7 @@ namespace EventHub.Events { private readonly EventManager _eventManager; private readonly EventRegistrationManager _eventRegistrationManager; + private readonly IRepository _eventRegistrationRepository; private readonly IRepository _eventRepository; private readonly IRepository _organizationRepository; private readonly IRepository _userRepository; @@ -29,14 +30,16 @@ namespace EventHub.Events public EventAppService( EventManager eventManager, EventRegistrationManager eventRegistrationManager, + IRepository eventRegistrationRepository, IRepository eventRepository, - IRepository organizationRepository, - IRepository userRepository, - IRepository countriesRepository, + IRepository organizationRepository, + IRepository userRepository, + IRepository countriesRepository, IBlobContainer eventBlobContainer) { _eventManager = eventManager; _eventRegistrationManager = eventRegistrationManager; + _eventRegistrationRepository = eventRegistrationRepository; _eventRepository = eventRepository; _organizationRepository = organizationRepository; _userRepository = userRepository; @@ -74,7 +77,7 @@ namespace EventHub.Events { await SaveCoverImageAsync(@event.Id, input.CoverImageContent); } - + await _eventRepository.InsertAsync(@event); return ObjectMapper.Map(@event); @@ -83,12 +86,23 @@ namespace EventHub.Events public async Task> GetListAsync(EventListFilterDto input) { var eventQueryable = await _eventRepository.GetQueryableAsync(); + var eventRegistrationQueryable = await _eventRegistrationRepository.GetQueryableAsync(); var organizationQueryable = await _organizationRepository.GetQueryableAsync(); var query = from @event in eventQueryable join organization in organizationQueryable on @event.OrganizationId equals organization.Id select new {@event, organization}; + if (input.RegisteredUserId.HasValue) + { + var registeredEvent = _eventRegistrationRepository + .Where(x => x.UserId == input.RegisteredUserId) + .Select(s => s.EventId); + + var eventIds = await AsyncExecuter.ToListAsync(registeredEvent); + query = query.Where(x => eventIds.Contains(x.@event.Id)); + } + if (input.MinDate.HasValue) { query = query.Where(i => i.@event.EndTime >= input.MinDate.Value); @@ -103,17 +117,17 @@ namespace EventHub.Events { query = query.Where(i => i.@event.OrganizationId == input.OrganizationId.Value); } - + if (input.IsOnline.HasValue) { query = query.Where(i => i.@event.IsOnline == input.IsOnline); } - + if (!input.Language.IsNullOrWhiteSpace()) { query = query.Where(i => i.@event.Language == input.Language); } - + if (input.CountryId.HasValue && input.CountryId != Guid.Empty) { query = query.Where(i => i.@event.CountryId == input.CountryId); @@ -177,15 +191,15 @@ namespace EventHub.Events var user = await _userRepository.GetAsync(CurrentUser.GetId()); var dto = ObjectMapper.Map(@event); - + dto.IsRegistered = await _eventRegistrationManager.IsRegisteredAsync(@event, user); - + if (!dto.IsRegistered) { dto.OnlineLink = null; dto.City = null; } - + if (dto.IsRegistered && @event.CountryId.HasValue) { dto.Country = (await _countriesRepository.GetAsync(@event.CountryId.Value)).Name; @@ -193,7 +207,7 @@ namespace EventHub.Events return dto; } - + public async Task> GetCountriesLookupAsync() { var countriesQueryable = await _countriesRepository.GetQueryableAsync(); @@ -233,7 +247,7 @@ namespace EventHub.Events @event.SetTitle(input.Title); @event.SetDescription(input.Description); @event.Language = input.Language; - + await _eventManager.SetCapacityAsync(@event, input.Capacity); await _eventRepository.UpdateAsync(@event); @@ -252,7 +266,7 @@ namespace EventHub.Events @event.SetTime(input.StartTime, input.EndTime); @event.TimingChangeCount++; - + await _eventRepository.UpdateAsync(@event); } @@ -260,10 +274,10 @@ namespace EventHub.Events public async Task SaveCoverImageAsync(Guid id, byte[] coverImageContent) { var blobName = id.ToString(); - + await _eventBlobContainer.SaveAsync(blobName, coverImageContent, overrideExisting: true); } - + private async Task GetCoverImageAsync(Guid id) { var blobName = id.ToString(); diff --git a/src/EventHub.Web.Theme/Themes/EventHub/Components/MainNavbar/Default.cshtml b/src/EventHub.Web.Theme/Themes/EventHub/Components/MainNavbar/Default.cshtml index 1419209..70515fb 100644 --- a/src/EventHub.Web.Theme/Themes/EventHub/Components/MainNavbar/Default.cshtml +++ b/src/EventHub.Web.Theme/Themes/EventHub/Components/MainNavbar/Default.cshtml @@ -56,7 +56,7 @@