/// <inheritdoc /> public async Task <int> SubscribeOnEventAsync(Event targetEvent, string userId) { try { int undeterminedStatus = await _participantStatusManager.GetStatusIdAsync("Розглядається"); int finishedEvent = await _eventStatusManager.GetStatusIdAsync("Завершений(-на)"); if (targetEvent.EventStatusID == finishedEvent) { return(StatusCodes.Status409Conflict); } await _repoWrapper.Participant.CreateAsync(new Participant() { ParticipantStatusId = undeterminedStatus, EventId = targetEvent.ID, UserId = userId }); await _repoWrapper.SaveAsync(); return(StatusCodes.Status200OK); } catch { return(StatusCodes.Status400BadRequest); } }
public async Task <EventUserDTO> EventUserAsync(string userId, ClaimsPrincipal user) { var currentUserId = _userManager.GetUserId(user); if (string.IsNullOrEmpty(userId)) { userId = currentUserId; } var targetUser = await _repoWrapper.User.GetFirstAsync(predicate : q => q.Id == userId); User userWithRoles = await _userManager.FindByIdAsync(userId); var userRoles = await _userManager.GetRolesAsync(userWithRoles); var model = new EventUserDTO { User = _mapper.Map <User, UserDTO>(targetUser), UserRoles = userRoles }; var eventAdmins = await _eventAdmininistrationManager.GetEventAdmininistrationByUserIdAsync(userId); var participants = await _participantManager.GetParticipantsByUserIdAsync(userId); model.CreatedEvents = new List <EventGeneralInfoDTO>(); foreach (var eventAdmin in eventAdmins) { var eventToAdd = _mapper.Map <Event, EventGeneralInfoDTO>(eventAdmin.Event); if (eventToAdd.EventDateEnd > DateTime.Now) { model.CreatedEvents.Add(eventToAdd); } } model.PlanedEvents = new List <EventGeneralInfoDTO>(); model.VisitedEvents = new List <EventGeneralInfoDTO>(); foreach (var participant in participants) { var eventToAdd = _mapper.Map <Event, EventGeneralInfoDTO>(participant.Event); if (participant.Event.EventDateEnd >= DateTime.Now) { model.PlanedEvents.Add(eventToAdd); } else if (participant.Event.EventDateEnd < DateTime.Now && participant.ParticipantStatusId == await _participantStatusManager.GetStatusIdAsync("Учасник")) { model.VisitedEvents.Add(eventToAdd); } } return(model); }
/// <inheritdoc /> public async Task <EventDTO> GetEventInfoAsync(int id, User user) { int approvedStatus = await _participantStatusManager.GetStatusIdAsync("Учасник"); int undeterminedStatus = await _participantStatusManager.GetStatusIdAsync("Розглядається"); int rejectedStatus = await _participantStatusManager.GetStatusIdAsync("Відмовлено"); int finishedEvent = await _eventWrapper.EventStatusManager.GetStatusIdAsync("Завершений(-на)"); var userRoles = await _userManager.GetRolesAsync(user); bool isUserGlobalEventAdmin = userRoles?.Contains(Roles.EventAdministrator) ?? false; var targetEvent = await _repoWrapper.Event .GetFirstAsync( e => e.ID == id, source => source .Include(e => e.Participants) .ThenInclude(p => p.User) .Include(e => e.Participants) .ThenInclude(p => p.ParticipantStatus) .Include(e => e.EventStatus) .Include(e => e.EventAdministrations) .ThenInclude(a => a.User) .Include(e => e.EventAdministrations) .ThenInclude(a => a.EventAdministrationType) .Include(e => e.EventType) .Include(e => e.EventCategory) ); var dto = new EventDTO() { Event = _mapper.Map <Event, EventInfoDTO>(targetEvent), IsUserEventAdmin = (targetEvent.EventAdministrations.Any(evAdm => evAdm.UserID == _userManager.GetUserIdAsync(user).Result)) || isUserGlobalEventAdmin, IsUserParticipant = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result), IsUserApprovedParticipant = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result&& p.ParticipantStatusId == approvedStatus), IsUserUndeterminedParticipant = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result&& p.ParticipantStatusId == undeterminedStatus), IsUserRejectedParticipant = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result&& p.ParticipantStatusId == rejectedStatus), IsEventFinished = targetEvent.EventStatusID == finishedEvent }; if (!dto.IsUserEventAdmin && dto.ParticipantAssessment != 0) { dto.Event.EventParticipants = dto.Event.EventParticipants.Where(p => p.StatusId == approvedStatus); } if (dto.IsUserApprovedParticipant && dto.IsEventFinished && (DateTime.Now < targetEvent.EventDateEnd.Add(new TimeSpan(3, 0, 0, 0)))) { dto.CanEstimate = true; dto.ParticipantAssessment = targetEvent.Participants.First(p => p.UserId == _userManager.GetUserIdAsync(user).Result).Estimate; } return(dto); }
/// <inheritdoc /> public async Task <List <GeneralEventDTO> > GetEventsAsync(int categoryId, int eventTypeId, ClaimsPrincipal user) { int approvedStatus = await _participantStatusManager.GetStatusIdAsync("Учасник"); int undeterminedStatus = await _participantStatusManager.GetStatusIdAsync("Розглядається"); int rejectedStatus = await _participantStatusManager.GetStatusIdAsync("Відмовлено"); int approvedEvent = await _eventStatusManager.GetStatusIdAsync("Затверджений(-на)"); int finishedEvent = await _eventStatusManager.GetStatusIdAsync("Завершений(-на)"); int notApprovedEvent = await _eventStatusManager.GetStatusIdAsync("Не затверджені"); var events = await _repoWrapper.Event .GetAllAsync( e => e.EventCategoryID == categoryId && e.EventTypeID == eventTypeId, source => source .Include(e => e.EventAdministrations) .Include(e => e.Participants) ); var dto = events .Select(ev => new GeneralEventDTO { EventId = ev.ID, EventName = ev.EventName, IsUserEventAdmin = (ev.EventAdministrations.Any(e => e.UserID == _userManager.GetUserId(user))) || user.IsInRole("Адміністратор подій"), IsUserParticipant = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user)), IsUserApprovedParticipant = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user) && p.ParticipantStatusId == approvedStatus), IsUserUndeterminedParticipant = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user) && p.ParticipantStatusId == undeterminedStatus), IsUserRejectedParticipant = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user) && p.ParticipantStatusId == rejectedStatus), IsEventApproved = ev.EventStatusID == approvedEvent, IsEventNotApproved = ev.EventStatusID == notApprovedEvent, IsEventFinished = ev.EventStatusID == finishedEvent }) .ToList(); return(dto); }