public OkObjectResult NewPrivateEventComment([FromBody] EventCommentDto dto) { var userId = GetUserId(); var ensembles = _context.Bookings .Where(ev => ev.EventId == dto.EventId && ev.Status == RequestStatus.Accepted) .Select(ev => ev.EnsembleId); var userIsInValidEnsemble = _context.EnsembleMembers .Any(em => ensembles.Contains(em.EnsembleId) && em.UserIdRecipient == userId && em.Status == RequestStatus.Accepted); var userIsEventMod = _context.EventModerators .Any(em => em.UserIdRecipient == userId && em.EventId == dto.EventId && em.Status == RequestStatus.Accepted); if (!(userIsInValidEnsemble || userIsEventMod)) { return(new OkObjectResult(new { success = false, error = "Not valid member or mod" })); } var comment = new EventComment { EventId = dto.EventId, Text = dto.Text, UserId = userId }; var user = _context.Users.Find(userId); var e = _context.Events.Find(dto.EventId); NotifyEventParticipants( userId, dto.EventId, $"{user.FullName} commented on the {e.Name} page", $"/event/{e.EventId}#comments" ); _context.EventComments.Add(comment); _context.SaveChanges(); return(new OkObjectResult(new { success = true })); }
public OkObjectResult GetEventComments([FromBody] EventCommentDto dto) { var userId = GetUserId(); var ensembles = _context.Bookings .Where(ev => ev.EventId == dto.EventId) .Select(ev => ev.Ensemble); var validUser = ensembles.Any(en => en.Members.Any(u => u.UserIdRecipient == userId && u.Status == RequestStatus.Accepted)); var validMod = _context.EventModerators .Any(em => em.UserIdRecipient == userId && em.Status == RequestStatus.Accepted); if (!(validUser || validMod)) { return(new OkObjectResult(new { success = false, error = "Not valid member or mod" })); } var userConnectionIds = GetUserConnections(userId); var comments = _context.EventComments .Include(c => c.User) .Where(c => c.EventId == dto.EventId) .OrderByDescending(c => c.Timestamp) .Select(c => new EventCommentDto { Text = c.Text, Timestamp = c.Timestamp, User = new MemberDto { FullName = c.User.FullName, PhotoUrl = c.User.PhotoUrl, UserId = c.UserId, ConnectedToUser = userConnectionIds.Contains(c.UserId) } }); return(new OkObjectResult(new { success = true, comments })); }