Browse Source

Admin: Create custom repositories for Event, EventRegistration and User

pull/53/head
Engincan VESKE 5 years ago
parent
commit
1548c36ce9
  1. 5
      src/EventHub.Admin.Application/EventHubApplicationAutoMapperProfile.cs
  2. 55
      src/EventHub.Admin.Application/Events/EventAppService.cs
  3. 42
      src/EventHub.Admin.Application/Events/Registrations/EventRegistrationAppService.cs
  4. 7
      src/EventHub.Admin.Application/Organizations/Memberships/OrganizationMembershipAppService.cs
  5. 5
      src/EventHub.Admin.Application/Organizations/OrganizationAppService.cs
  6. 32
      src/EventHub.Admin.Application/Users/UserAppService.cs
  7. 13
      src/EventHub.Application/Events/EventAppService.cs
  8. 14
      src/EventHub.Application/Events/Registrations/EventRegistrationAppService.cs
  9. 13
      src/EventHub.Application/Organizations/Memberships/OrganizationMembershipAppService.cs
  10. 10
      src/EventHub.Application/Organizations/OrganizationAppService.cs
  11. 4
      src/EventHub.Application/Users/UserAppService.cs
  12. 17
      src/EventHub.Domain/Events/EventWithDetails.cs
  13. 34
      src/EventHub.Domain/Events/IEventRepository.cs
  14. 20
      src/EventHub.Domain/Events/Registrations/EventRegistrationWithDetails.cs
  15. 21
      src/EventHub.Domain/Events/Registrations/IEventRegistrationRepository.cs
  16. 25
      src/EventHub.Domain/Users/IUserRepository.cs
  17. 102
      src/EventHub.EntityFrameworkCore/EntityFrameworkCore/Events/EventRepository.cs
  18. 61
      src/EventHub.EntityFrameworkCore/EntityFrameworkCore/Events/Registrations/EventRegistrationRepository.cs
  19. 43
      src/EventHub.EntityFrameworkCore/EntityFrameworkCore/Users/UserRepository.cs

5
src/EventHub.Admin.Application/EventHubApplicationAutoMapperProfile.cs

@ -6,6 +6,7 @@ using EventHub.Admin.Organizations.Memberships;
using EventHub.Admin.Users; using EventHub.Admin.Users;
using EventHub.Countries; using EventHub.Countries;
using EventHub.Events; using EventHub.Events;
using EventHub.Events.Registrations;
using EventHub.Organizations; using EventHub.Organizations;
using EventHub.Organizations.Memberships; using EventHub.Organizations.Memberships;
using Volo.Abp.AutoMapper; using Volo.Abp.AutoMapper;
@ -36,6 +37,10 @@ namespace EventHub.Admin
opt => opt.MapFrom(user => user.Id)); opt => opt.MapFrom(user => user.Id));
CreateMap<IdentityUser, UserDto>(); CreateMap<IdentityUser, UserDto>();
CreateMap<EventWithDetails, EventInListDto>();
CreateMap<EventRegistrationWithDetails, EventAttendeeDto>();
} }
} }
} }

55
src/EventHub.Admin.Application/Events/EventAppService.cs

@ -6,8 +6,6 @@ using System.Threading.Tasks;
using EventHub.Admin.Permissions; using EventHub.Admin.Permissions;
using EventHub.Countries; using EventHub.Countries;
using EventHub.Events; using EventHub.Events;
using EventHub.Events.Registrations;
using EventHub.Organizations;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring;
@ -18,25 +16,18 @@ namespace EventHub.Admin.Events
[Authorize(EventHubPermissions.Events.Default)] [Authorize(EventHubPermissions.Events.Default)]
public class EventAppService : EventHubAdminAppService, IEventAppService public class EventAppService : EventHubAdminAppService, IEventAppService
{ {
private readonly IRepository<Event, Guid> _eventRepository; private readonly IEventRepository _eventRepository;
private readonly IRepository<EventRegistration, Guid> _eventRegistrationRepository;
private readonly IRepository<Organization, Guid> _organizationRepository;
private readonly IBlobContainer<EventCoverImageContainer> _eventBlobContainer; private readonly IBlobContainer<EventCoverImageContainer> _eventBlobContainer;
private readonly EventManager _eventManager; private readonly EventManager _eventManager;
private readonly IRepository<Country, Guid> _countryRepository; private readonly IRepository<Country, Guid> _countryRepository;
public EventAppService( public EventAppService(
IRepository<Event, Guid> eventRepository, IEventRepository eventRepository,
IRepository<EventRegistration, Guid> eventRegistrationRepository,
IRepository<Organization, Guid> organizationRepository,
IBlobContainer<EventCoverImageContainer> eventBlobContainer, IBlobContainer<EventCoverImageContainer> eventBlobContainer,
EventManager eventManager, EventManager eventManager,
IRepository<Country, Guid> countryRepository) IRepository<Country, Guid> countryRepository)
{ {
_eventRepository = eventRepository; _eventRepository = eventRepository;
_eventRegistrationRepository = eventRegistrationRepository;
_organizationRepository = organizationRepository;
_eventBlobContainer = eventBlobContainer; _eventBlobContainer = eventBlobContainer;
_eventManager = eventManager; _eventManager = eventManager;
_countryRepository = countryRepository; _countryRepository = countryRepository;
@ -54,34 +45,14 @@ namespace EventHub.Admin.Events
public async Task<PagedResultDto<EventInListDto>> GetListAsync(EventListFilterDto input) public async Task<PagedResultDto<EventInListDto>> GetListAsync(EventListFilterDto input)
{ {
var eventQueryable = await _eventRepository.GetQueryableAsync(); var totalCount = await _eventRepository.GetCountAsync(input.Title, input.OrganizationDisplayName, input.MinAttendeeCount,
var eventRegistrationQueryable = await _eventRegistrationRepository.GetQueryableAsync(); input.MaxAttendeeCount, input.MinStartTime, input.MaxStartTime);
var organizationQueryable = await _organizationRepository.GetQueryableAsync();
var items = await _eventRepository.GetListAsync(input.Sorting, input.SkipCount, input.MaxResultCount,
var query = (from @event in eventQueryable input.Title, input.OrganizationDisplayName, input.MinAttendeeCount, input.MaxAttendeeCount,
join organization in organizationQueryable on @event.OrganizationId equals organization.Id input.MinStartTime, input.MaxStartTime);
select new EventInListDto
{ var events = ObjectMapper.Map<List<EventWithDetails>, List<EventInListDto>>(items);
Id = @event.Id,
Title = @event.Title,
StartTime = @event.StartTime,
OrganizationDisplayName = organization.DisplayName,
AttendeeCount = (from eventRegistration in eventRegistrationQueryable
where eventRegistration.EventId == @event.Id
select @eventRegistration).Count()
})
.WhereIf(!string.IsNullOrWhiteSpace(input.Title), x => x.Title.ToLower().Contains(input.Title.ToLower()))
.WhereIf(!string.IsNullOrWhiteSpace(input.OrganizationDisplayName), x => x.OrganizationDisplayName.ToLower().Contains(input.OrganizationDisplayName.ToLower()))
.WhereIf(input.MinStartTime.HasValue, x => x.StartTime >= input.MinStartTime)
.WhereIf(input.MaxStartTime.HasValue, x => x.StartTime <= input.MaxStartTime)
.WhereIf(input.MinAttendeeCount.HasValue, x => x.AttendeeCount >= input.MinAttendeeCount)
.WhereIf(input.MaxAttendeeCount.HasValue, x => x.AttendeeCount <= input.MaxAttendeeCount);
var totalCount = await AsyncExecuter.CountAsync(query);
query = query.OrderBy(string.IsNullOrWhiteSpace(input.Sorting) ? EventConsts.DefaultSorting : input.Sorting);
query = query.PageBy(input);
var events = await AsyncExecuter.ToListAsync(query);
return new PagedResultDto<EventInListDto>(totalCount, events); return new PagedResultDto<EventInListDto>(totalCount, events);
} }
@ -115,8 +86,8 @@ namespace EventHub.Admin.Events
var countriesQueryable = await _countryRepository.GetQueryableAsync(); var countriesQueryable = await _countryRepository.GetQueryableAsync();
var query = from country in countriesQueryable var query = from country in countriesQueryable
orderby country.Name orderby country.Name
select country; select country;
var countries = await AsyncExecuter.ToListAsync(query); var countries = await AsyncExecuter.ToListAsync(query);

42
src/EventHub.Admin.Application/Events/Registrations/EventRegistrationAppService.cs

@ -5,27 +5,25 @@ using System.Linq.Dynamic.Core;
using System.Threading.Tasks; using System.Threading.Tasks;
using EventHub.Admin.Permissions; using EventHub.Admin.Permissions;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Identity;
using EventHub.Events.Registrations; using EventHub.Events.Registrations;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using EventHub.Events; using EventHub.Events;
using Volo.Abp; using EventHub.Users;
namespace EventHub.Admin.Events.Registrations namespace EventHub.Admin.Events.Registrations
{ {
[Authorize(EventHubPermissions.Events.Registrations.Default)] [Authorize(EventHubPermissions.Events.Registrations.Default)]
public class EventRegistrationAppService : EventHubAdminAppService, IEventRegistrationAppService public class EventRegistrationAppService : EventHubAdminAppService, IEventRegistrationAppService
{ {
private readonly IRepository<IdentityUser, Guid> _userRepository; private readonly IUserRepository _userRepository;
private readonly IRepository<EventRegistration, Guid> _eventRegistrationRepository; private readonly IEventRegistrationRepository _eventRegistrationRepository;
private readonly IRepository<Event, Guid> _eventRepository; private readonly IEventRepository _eventRepository;
private readonly EventRegistrationManager _eventRegistrationManager; private readonly EventRegistrationManager _eventRegistrationManager;
public EventRegistrationAppService( public EventRegistrationAppService(
IRepository<IdentityUser, Guid> userRepository, IUserRepository userRepository,
IRepository<EventRegistration, Guid> eventRegistrationRepository, IEventRegistrationRepository eventRegistrationRepository,
IRepository<Event, Guid> eventRepository, IEventRepository eventRepository,
EventRegistrationManager eventRegistrationManager) EventRegistrationManager eventRegistrationManager)
{ {
_userRepository = userRepository; _userRepository = userRepository;
@ -36,29 +34,11 @@ namespace EventHub.Admin.Events.Registrations
public async Task<PagedResultDto<EventAttendeeDto>> GetAttendeesAsync(GetEventRegistrationListInput input) public async Task<PagedResultDto<EventAttendeeDto>> GetAttendeesAsync(GetEventRegistrationListInput input)
{ {
var eventRegistrationQueryable = await _eventRegistrationRepository.GetQueryableAsync(); var totalCount = await _eventRegistrationRepository.GetCountAsync(input.EventId);
var userQueryable = await _userRepository.GetQueryableAsync(); var items = await _eventRegistrationRepository.GetListAsync(input.EventId, input.Sorting, input.SkipCount, input.MaxResultCount);
var users = ObjectMapper.Map<List<EventRegistrationWithDetails>, List<EventAttendeeDto>>(items);
var query = from eventRegistration in eventRegistrationQueryable
join user in userQueryable on eventRegistration.UserId equals user.Id
where eventRegistration.EventId == input.EventId
orderby eventRegistration.CreationTime descending
select user;
var totalCount = await AsyncExecuter.CountAsync(query);
if (!string.IsNullOrWhiteSpace(input.Sorting))
{
query = query.OrderBy(input.Sorting);
}
query = query.PageBy(input);
var users = await AsyncExecuter.ToListAsync(query.Take(10));
return new PagedResultDto<EventAttendeeDto>( return new PagedResultDto<EventAttendeeDto>(totalCount, users);
totalCount,
ObjectMapper.Map<List<IdentityUser>, List<EventAttendeeDto>>(users)
);
} }
[Authorize(EventHubPermissions.Events.Registrations.RemoveAttendee)] [Authorize(EventHubPermissions.Events.Registrations.RemoveAttendee)]

7
src/EventHub.Admin.Application/Organizations/Memberships/OrganizationMembershipAppService.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using EventHub.Admin.Permissions; using EventHub.Admin.Permissions;
using EventHub.Organizations.Memberships; using EventHub.Organizations.Memberships;
using EventHub.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
@ -17,11 +18,11 @@ namespace EventHub.Admin.Organizations.Memberships
public class OrganizationMembershipAppService : ApplicationService, IOrganizationMembershipAppService public class OrganizationMembershipAppService : ApplicationService, IOrganizationMembershipAppService
{ {
private readonly IOrganizationMembershipRepository _organizationMembershipRepository; private readonly IOrganizationMembershipRepository _organizationMembershipRepository;
private readonly IRepository<IdentityUser, Guid> _userRepository; private readonly IUserRepository _userRepository;
public OrganizationMembershipAppService( public OrganizationMembershipAppService(
IOrganizationMembershipRepository organizationMembershipRepository, IOrganizationMembershipRepository organizationMembershipRepository,
IRepository<IdentityUser, Guid> userRepository) IUserRepository userRepository)
{ {
_organizationMembershipRepository = organizationMembershipRepository; _organizationMembershipRepository = organizationMembershipRepository;
_userRepository = userRepository; _userRepository = userRepository;

5
src/EventHub.Admin.Application/Organizations/OrganizationAppService.cs

@ -5,6 +5,7 @@ using System.Linq.Dynamic.Core;
using System.Threading.Tasks; using System.Threading.Tasks;
using EventHub.Admin.Permissions; using EventHub.Admin.Permissions;
using EventHub.Organizations; using EventHub.Organizations;
using EventHub.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
@ -18,12 +19,12 @@ namespace EventHub.Admin.Organizations
public class OrganizationAppService : EventHubAdminAppService, IOrganizationAppService public class OrganizationAppService : EventHubAdminAppService, IOrganizationAppService
{ {
private readonly IRepository<Organization, Guid> _organizationRepository; private readonly IRepository<Organization, Guid> _organizationRepository;
private readonly IRepository<IdentityUser, Guid> _identityUserRepository; private readonly IUserRepository _identityUserRepository;
private readonly IBlobContainer<OrganizationProfilePictureContainer> _organizationBlobContainer; private readonly IBlobContainer<OrganizationProfilePictureContainer> _organizationBlobContainer;
public OrganizationAppService( public OrganizationAppService(
IRepository<Organization, Guid> organizationRepository, IRepository<Organization, Guid> organizationRepository,
IRepository<IdentityUser, Guid> identityUserRepository, IUserRepository identityUserRepository,
IBlobContainer<OrganizationProfilePictureContainer> organizationBlobContainer) IBlobContainer<OrganizationProfilePictureContainer> organizationBlobContainer)
{ {
_organizationRepository = organizationRepository; _organizationRepository = organizationRepository;

32
src/EventHub.Admin.Application/Users/UserAppService.cs

@ -1,12 +1,9 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks; using System.Threading.Tasks;
using EventHub.Admin.Permissions; using EventHub.Admin.Permissions;
using EventHub.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Identity; using Volo.Abp.Identity;
namespace EventHub.Admin.Users namespace EventHub.Admin.Users
@ -14,31 +11,20 @@ namespace EventHub.Admin.Users
[Authorize(EventHubPermissions.Users.Default)] [Authorize(EventHubPermissions.Users.Default)]
public class UserAppService : EventHubAdminAppService, IUserAppService public class UserAppService : EventHubAdminAppService, IUserAppService
{ {
private readonly IRepository<IdentityUser, Guid> _identityUserRepository; private readonly IUserRepository _userRepository;
public UserAppService(IRepository<IdentityUser, Guid> identityUserRepository) public UserAppService(IUserRepository userRepository)
{ {
_identityUserRepository = identityUserRepository; _userRepository = userRepository;
} }
public async Task<PagedResultDto<UserDto>> GetListAsync(GetUserListInput input) public async Task<PagedResultDto<UserDto>> GetListAsync(GetUserListInput input)
{ {
var identityUserQueryable = await _identityUserRepository.GetQueryableAsync(); var totalCount = await _userRepository.GetCountAsync(input.Username);
var items = await _userRepository.GetListAsync(input.Sorting, input.SkipCount, input.MaxResultCount, input.Username);
var users = ObjectMapper.Map<List<IdentityUser>, List<UserDto>>(items);
var query = identityUserQueryable return new PagedResultDto<UserDto>(totalCount, users);
.WhereIf(!string.IsNullOrWhiteSpace(input.Username), user => user.UserName.ToLower().Contains(input.Username.ToLower()));
var totalCount = await AsyncExecuter.CountAsync(query);
if (!string.IsNullOrWhiteSpace(input.Sorting))
{
query = query.OrderBy(input.Sorting);
}
query = query.PageBy(input);
var users = await AsyncExecuter.ToListAsync(query);
return new PagedResultDto<UserDto>(totalCount, ObjectMapper.Map<List<IdentityUser>, List<UserDto>>(users));
} }
} }
} }

13
src/EventHub.Application/Events/EventAppService.cs

@ -5,6 +5,7 @@ using System.Threading.Tasks;
using EventHub.Countries; using EventHub.Countries;
using EventHub.Events.Registrations; using EventHub.Events.Registrations;
using EventHub.Organizations; using EventHub.Organizations;
using EventHub.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Authorization; using Volo.Abp.Authorization;
@ -19,20 +20,20 @@ namespace EventHub.Events
{ {
private readonly EventManager _eventManager; private readonly EventManager _eventManager;
private readonly EventRegistrationManager _eventRegistrationManager; private readonly EventRegistrationManager _eventRegistrationManager;
private readonly IRepository<EventRegistration, Guid> _eventRegistrationRepository; private readonly IEventRegistrationRepository _eventRegistrationRepository;
private readonly IRepository<Event, Guid> _eventRepository; private readonly IEventRepository _eventRepository;
private readonly IRepository<Organization, Guid> _organizationRepository; private readonly IRepository<Organization, Guid> _organizationRepository;
private readonly IRepository<IdentityUser, Guid> _userRepository; private readonly IUserRepository _userRepository;
private readonly IRepository<Country, Guid> _countriesRepository; private readonly IRepository<Country, Guid> _countriesRepository;
private readonly IBlobContainer<EventCoverImageContainer> _eventBlobContainer; private readonly IBlobContainer<EventCoverImageContainer> _eventBlobContainer;
public EventAppService( public EventAppService(
EventManager eventManager, EventManager eventManager,
EventRegistrationManager eventRegistrationManager, EventRegistrationManager eventRegistrationManager,
IRepository<EventRegistration, Guid> eventRegistrationRepository, IEventRegistrationRepository eventRegistrationRepository,
IRepository<Event, Guid> eventRepository, IEventRepository eventRepository,
IRepository<Organization, Guid> organizationRepository, IRepository<Organization, Guid> organizationRepository,
IRepository<IdentityUser, Guid> userRepository, IUserRepository userRepository,
IRepository<Country, Guid> countriesRepository, IRepository<Country, Guid> countriesRepository,
IBlobContainer<EventCoverImageContainer> eventBlobContainer) IBlobContainer<EventCoverImageContainer> eventBlobContainer)
{ {

14
src/EventHub.Application/Events/Registrations/EventRegistrationAppService.cs

@ -2,9 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using EventHub.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users; using Volo.Abp.Users;
using Volo.Abp.Identity; using Volo.Abp.Identity;
@ -13,16 +13,16 @@ namespace EventHub.Events.Registrations
public class EventRegistrationAppService : EventHubAppService, IEventRegistrationAppService public class EventRegistrationAppService : EventHubAppService, IEventRegistrationAppService
{ {
private readonly EventRegistrationManager _eventRegistrationManager; private readonly EventRegistrationManager _eventRegistrationManager;
private readonly IRepository<IdentityUser, Guid> _userRepository; private readonly IUserRepository _userRepository;
private readonly IRepository<Event, Guid> _eventRepository; private readonly IEventRepository _eventRepository;
private readonly IRepository<EventRegistration, Guid> _eventRegistrationRepository; private readonly IEventRegistrationRepository _eventRegistrationRepository;
private readonly EventRegistrationNotifier _eventRegistrationNotifier; private readonly EventRegistrationNotifier _eventRegistrationNotifier;
public EventRegistrationAppService( public EventRegistrationAppService(
EventRegistrationManager eventRegistrationManager, EventRegistrationManager eventRegistrationManager,
IRepository<IdentityUser, Guid> userRepository, IUserRepository userRepository,
IRepository<Event, Guid> eventRepository, IEventRepository eventRepository,
IRepository<EventRegistration, Guid> eventRegistrationRepository, IEventRegistrationRepository eventRegistrationRepository,
EventRegistrationNotifier eventRegistrationNotifier) EventRegistrationNotifier eventRegistrationNotifier)
{ {
_eventRegistrationManager = eventRegistrationManager; _eventRegistrationManager = eventRegistrationManager;

13
src/EventHub.Application/Organizations/Memberships/OrganizationMembershipAppService.cs

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using EventHub.Users;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
@ -13,15 +14,15 @@ namespace EventHub.Organizations.Memberships
public class OrganizationMembershipAppService : EventHubAppService, IOrganizationMembershipAppService public class OrganizationMembershipAppService : EventHubAppService, IOrganizationMembershipAppService
{ {
private readonly OrganizationMembershipManager _organizationMembershipManager; private readonly OrganizationMembershipManager _organizationMembershipManager;
private readonly IRepository<IdentityUser, Guid> _userRepository; private readonly IUserRepository _userRepository;
private readonly IRepository<Organization, Guid> _organizationRepository; private readonly IRepository<Organization, Guid> _organizationRepository;
private readonly IRepository<OrganizationMembership, Guid> _organizationMembershipsRepository; private readonly IOrganizationMembershipRepository _organizationMembershipsRepository;
public OrganizationMembershipAppService( public OrganizationMembershipAppService(
OrganizationMembershipManager organizationMembershipManager, OrganizationMembershipManager organizationMembershipManager,
IRepository<IdentityUser, Guid> userRepository, IUserRepository userRepository,
IRepository<Organization, Guid> organizationRepository, IRepository<Organization, Guid> organizationRepository,
IRepository<OrganizationMembership, Guid> organizationMembershipsRepository) IOrganizationMembershipRepository organizationMembershipsRepository)
{ {
_organizationMembershipManager = organizationMembershipManager; _organizationMembershipManager = organizationMembershipManager;
_userRepository = userRepository; _userRepository = userRepository;

10
src/EventHub.Application/Organizations/OrganizationAppService.cs

@ -17,17 +17,17 @@ namespace EventHub.Organizations
public class OrganizationAppService : EventHubAppService, IOrganizationAppService public class OrganizationAppService : EventHubAppService, IOrganizationAppService
{ {
private readonly IRepository<Organization, Guid> _organizationRepository; private readonly IRepository<Organization, Guid> _organizationRepository;
private readonly IRepository<OrganizationMembership, Guid> _organizationMembershipsRepository; private readonly IOrganizationMembershipRepository _organizationMembershipsRepository;
private readonly OrganizationManager _organizationManager; private readonly OrganizationManager _organizationManager;
private readonly IBlobContainer<OrganizationProfilePictureContainer> _organizationBlobContainer; private readonly IBlobContainer<OrganizationProfilePictureContainer> _organizationBlobContainer;
private readonly IRepository<IdentityUser, Guid> _userRepository; private readonly IUserRepository _userRepository;
public OrganizationAppService( public OrganizationAppService(
IRepository<Organization, Guid> organizationRepository, IRepository<Organization, Guid> organizationRepository,
IRepository<OrganizationMembership, Guid> organizationMembershipsRepository, IOrganizationMembershipRepository organizationMembershipsRepository,
OrganizationManager organizationManager, OrganizationManager organizationManager,
IBlobContainer<OrganizationProfilePictureContainer> organizationBlobContainer, IBlobContainer<OrganizationProfilePictureContainer> organizationBlobContainer,
IRepository<IdentityUser, Guid> userRepository) IUserRepository userRepository)
{ {
_organizationRepository = organizationRepository; _organizationRepository = organizationRepository;
_organizationMembershipsRepository = organizationMembershipsRepository; _organizationMembershipsRepository = organizationMembershipsRepository;

4
src/EventHub.Application/Users/UserAppService.cs

@ -8,9 +8,9 @@ namespace EventHub.Users
{ {
public class UserAppService : EventHubAppService, IUserAppService public class UserAppService : EventHubAppService, IUserAppService
{ {
private readonly IRepository<IdentityUser, Guid> _userRepository; private readonly IUserRepository _userRepository;
public UserAppService(IRepository<IdentityUser, Guid> userRepository) public UserAppService(IUserRepository userRepository)
{ {
_userRepository = userRepository; _userRepository = userRepository;
} }

17
src/EventHub.Domain/Events/EventWithDetails.cs

@ -0,0 +1,17 @@
using System;
namespace EventHub.Events
{
public class EventWithDetails
{
public Guid Id { get; set; }
public string Title { get; set; }
public string OrganizationDisplayName { get; set; }
public int AttendeeCount { get; set; }
public DateTime StartTime { get; set; }
}
}

34
src/EventHub.Domain/Events/IEventRepository.cs

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace EventHub.Events
{
public interface IEventRepository : IRepository<Event, Guid>
{
Task<int> GetCountAsync(
string title = null,
string organizationDisplayName = null,
int? minAttendeeCount = null,
int? maxAttendeeCount = null,
DateTime? minStartTime = null,
DateTime? maxStartTime = null,
CancellationToken cancellationToken = default
);
Task<List<EventWithDetails>> GetListAsync(
string sorting = null,
int skipCount = 0,
int maxResultCount = int.MaxValue,
string title = null,
string organizationDisplayName = null,
int? minAttendeeCount = null,
int? maxAttendeeCount = null,
DateTime? minStartTime = null,
DateTime? maxStartTime = null,
CancellationToken cancellationToken = default
);
}
}

20
src/EventHub.Domain/Events/Registrations/EventRegistrationWithDetails.cs

@ -0,0 +1,20 @@
using System;
using Volo.Abp.Auditing;
namespace EventHub.Events.Registrations
{
public class EventRegistrationWithDetails : IHasCreationTime
{
public Guid UserId { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public DateTime CreationTime { get; set; }
}
}

21
src/EventHub.Domain/Events/Registrations/IEventRegistrationRepository.cs

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace EventHub.Events.Registrations
{
public interface IEventRegistrationRepository : IRepository<EventRegistration, Guid>
{
Task<int> GetCountAsync(Guid eventId, CancellationToken cancellationToken = default);
Task<List<EventRegistrationWithDetails>> GetListAsync(
Guid eventId,
string sorting = null,
int skipCount = 0,
int maxResultCount = int.MaxValue,
CancellationToken cancellationToken = default
);
}
}

25
src/EventHub.Domain/Users/IUserRepository.cs

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Identity;
namespace EventHub.Users
{
public interface IUserRepository : IRepository<IdentityUser, Guid>
{
Task<List<IdentityUser>> GetListAsync(
string sorting = null,
int skipCount = 0,
int maxResultCount = int.MaxValue,
string username = null,
CancellationToken cancellationToken = default
);
Task<int> GetCountAsync(
string username = null,
CancellationToken cancellationToken = default
);
}
}

102
src/EventHub.EntityFrameworkCore/EntityFrameworkCore/Events/EventRepository.cs

@ -0,0 +1,102 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading;
using System.Threading.Tasks;
using EventHub.Events;
using EventHub.Events.Registrations;
using EventHub.Organizations;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace EventHub.EntityFrameworkCore.Events
{
public class EventRepository : EfCoreRepository<EventHubDbContext, Event, Guid>, IEventRepository
{
public EventRepository(IDbContextProvider<EventHubDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<int> GetCountAsync(
string title = null,
string organizationDisplayName = null,
int? minAttendeeCount = null,
int? maxAttendeeCount = null,
DateTime? minStartTime = null,
DateTime? maxStartTime = null,
CancellationToken cancellationToken = default
)
{
var dbContext = await GetDbContextAsync();
var eventQueryable = await GetQueryableAsync();
var eventRegistrationQueryable = dbContext.Set<EventRegistration>().AsQueryable();
var organizationQueryable = dbContext.Set<Organization>().AsQueryable();
var query = (from @event in eventQueryable
join organization in organizationQueryable on @event.OrganizationId equals organization.Id
select new
{
Event = @event,
Organization = organization,
AttendeeCount = (from eventRegistration in eventRegistrationQueryable
where eventRegistration.EventId == @event.Id
select @eventRegistration).Count()
})
.WhereIf(!string.IsNullOrWhiteSpace(title), x => x.Event.Title.ToLower().Contains(title.ToLower()))
.WhereIf(!string.IsNullOrWhiteSpace(organizationDisplayName), x => x.Organization.DisplayName.ToLower().Contains(organizationDisplayName.ToLower()))
.WhereIf(minStartTime.HasValue, x => x.Event.StartTime >= minStartTime)
.WhereIf(maxStartTime.HasValue, x => x.Event.StartTime <= maxStartTime)
.WhereIf(minAttendeeCount.HasValue, x => x.AttendeeCount >= minAttendeeCount)
.WhereIf(maxAttendeeCount.HasValue, x => x.AttendeeCount <= maxAttendeeCount);
return await query.CountAsync(GetCancellationToken(cancellationToken));
}
public async Task<List<EventWithDetails>> GetListAsync(
string sorting = null,
int skipCount = 0,
int maxResultCount = int.MaxValue,
string title = null,
string organizationDisplayName = null,
int? minAttendeeCount = null,
int? maxAttendeeCount = null,
DateTime? minStartTime = null,
DateTime? maxStartTime = null,
CancellationToken cancellationToken = default
)
{
var dbContext = await GetDbContextAsync();
var eventQueryable = await GetQueryableAsync();
var eventRegistrationQueryable = dbContext.Set<EventRegistration>().AsQueryable();
var organizationQueryable = dbContext.Set<Organization>().AsQueryable();
var query = (from @event in eventQueryable
join organization in organizationQueryable on @event.OrganizationId equals organization.Id
select new EventWithDetails
{
Id = @event.Id,
Title = @event.Title,
StartTime = @event.StartTime,
OrganizationDisplayName = organization.DisplayName,
AttendeeCount = (from eventRegistration in eventRegistrationQueryable
where eventRegistration.EventId == @event.Id
select @eventRegistration).Count()
})
.WhereIf(!string.IsNullOrWhiteSpace(title), x => x.Title.ToLower().Contains(title.ToLower()))
.WhereIf(!string.IsNullOrWhiteSpace(organizationDisplayName),
x => x.OrganizationDisplayName.ToLower().Contains(organizationDisplayName.ToLower()))
.WhereIf(minStartTime.HasValue, x => x.StartTime >= minStartTime)
.WhereIf(maxStartTime.HasValue, x => x.StartTime <= maxStartTime)
.WhereIf(minAttendeeCount.HasValue, x => x.AttendeeCount >= minAttendeeCount)
.WhereIf(maxAttendeeCount.HasValue, x => x.AttendeeCount <= maxAttendeeCount)
.OrderBy(string.IsNullOrWhiteSpace(sorting) ? EventConsts.DefaultSorting : sorting)
.PageBy(skipCount, maxResultCount);
return await query.ToListAsync(GetCancellationToken(cancellationToken));
}
}
}

61
src/EventHub.EntityFrameworkCore/EntityFrameworkCore/Events/Registrations/EventRegistrationRepository.cs

@ -0,0 +1,61 @@
using EventHub.Events.Registrations;
using System;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Identity;
namespace EventHub.EntityFrameworkCore.Events.Registrations
{
public class EventRegistrationRepository : EfCoreRepository<EventHubDbContext, EventRegistration, Guid>, IEventRegistrationRepository
{
public EventRegistrationRepository(IDbContextProvider<EventHubDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<int> GetCountAsync(Guid eventId, CancellationToken cancellationToken = default)
{
var userQueryable = (await GetDbContextAsync()).Set<IdentityUser>().AsQueryable();
var query = from eventRegistration in (await GetQueryableAsync())
join user in userQueryable on eventRegistration.UserId equals user.Id
where eventRegistration.EventId == eventId
select user;
return await query.CountAsync(GetCancellationToken(cancellationToken));
}
public async Task<List<EventRegistrationWithDetails>> GetListAsync(
Guid eventId,
string sorting = null,
int skipCount = 0,
int maxResultCount = int.MaxValue,
CancellationToken cancellationToken = default
)
{
var userQueryable = (await GetDbContextAsync()).Set<IdentityUser>().AsQueryable();
var query = (from eventRegistration in (await GetQueryableAsync())
join user in userQueryable on eventRegistration.UserId equals user.Id
where eventRegistration.EventId == eventId
select new EventRegistrationWithDetails
{
UserId = user.Id,
Name = user.Name,
Surname = user.Surname,
UserName = user.UserName,
Email = user.Email,
CreationTime = user.CreationTime
})
.OrderBy(string.IsNullOrWhiteSpace(sorting) ? nameof(EventRegistrationWithDetails.CreationTime) : sorting)
.PageBy(skipCount, maxResultCount);
return await query.ToListAsync(GetCancellationToken(cancellationToken));
}
}
}

43
src/EventHub.EntityFrameworkCore/EntityFrameworkCore/Users/UserRepository.cs

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading;
using System.Threading.Tasks;
using EventHub.Users;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Identity;
namespace EventHub.EntityFrameworkCore.Users
{
public class UserRepository : EfCoreRepository<EventHubDbContext, IdentityUser, Guid>, IUserRepository
{
public UserRepository(IDbContextProvider<EventHubDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<int> GetCountAsync(string username = null, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync())
.WhereIf(!string.IsNullOrWhiteSpace(username), user => user.UserName.ToLower().Contains(username.ToLower()))
.CountAsync(GetCancellationToken(cancellationToken));
}
public async Task<List<IdentityUser>> GetListAsync(
string sorting = null,
int skipCount = 0,
int maxResultCount = int.MaxValue,
string username = null,
CancellationToken cancellationToken = default
)
{
return await (await GetQueryableAsync())
.WhereIf(!string.IsNullOrWhiteSpace(username), user => user.UserName.ToLower().Contains(username.ToLower()))
.OrderBy(string.IsNullOrWhiteSpace(sorting) ? nameof(IdentityUser.CreationTime) : sorting)
.PageBy(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken));
}
}
}
Loading…
Cancel
Save