Пример #1
0
        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 }));
        }
Пример #2
0
        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 }));
        }