コード例 #1
0
        public async Task <AddReportSubscriberResponse> Handle(AddReportSubscriberRequest request,
                                                               CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.AddComment)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            var addedReportSubscriber = await reportSubscriberService.AddSubscriber(report, request.UserId) ??
                                        throw new CrudException("Adding report subscriber failed");

            if (ReportStatusTypeSmartEnum.FromValue(report.Status)
                .ShouldBeOpened(report, httpContextReader.CurrentUserId))
            {
                await reportManager.ChangeStatus(ReportStatusType.Opened, report);
            }

            var notification = await notifier.Push(
                $"You were added to subscribers in report: {report.Subject}",
                request.UserId);

            await hubManager.Invoke(SignalrActions.NOTIFICATION_RECEIVED, request.UserId,
                                    mapper.Map <NotificationDto>(notification));

            return((AddReportSubscriberResponse) new AddReportSubscriberResponse
            {
                ReportSubscriber = mapper.Map <ReportSubscriberDto>(addedReportSubscriber)
            }.LogInformation(
                       $"Assignee #{httpContextReader.CurrentUserId} has added subscriber #{request.UserId} in report #{report.Id}"));
        }
コード例 #2
0
        public async Task <ArchiveReportResponse> Handle(ArchiveReportRequest request,
                                                         CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.ArchiveReport)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            if (await reportManager.ArchiveReport(report))
            {
                var membersGroup =
                    ReportManagerUtils.GenerateReportMembersGroup(report, httpContextReader.CurrentUserId);

                var notifications = await notifier.PushToGroup(
                    $"Report {report.Subject} has been archived",
                    membersGroup);

                foreach (var memberId in membersGroup)
                {
                    await hubManager.Invoke(SignalrActions.NOTIFICATION_RECEIVED, memberId,
                                            mapper.Map <IEnumerable <NotificationDto> >(notifications));
                }

                return((ArchiveReportResponse) new ArchiveReportResponse().LogInformation(
                           $"Report #{report.Id} has been archived"));
            }

            throw new CrudException("Archiving report failed");
        }
コード例 #3
0
        public async Task <MoveReportAssignmentResponse> Handle(MoveReportAssignmentRequest request,
                                                                CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.MoveAssignment)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            if (!(await reportManager.GetReportsAllowedAssignees((ReportCategoryType)report.CategoryType,
                                                                 isPrivate: report.Private)).Any(a => a.Id == request.NewAssigneeId))
            {
                throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);
            }

            if (await reportManager.MoveReportAssignment(report, request.NewAssigneeId))
            {
                var membersGroup = new List <int> {
                    report.CreatorId, request.NewAssigneeId
                };

                var notifications = await notifier.PushToGroup(
                    $"Report {report.Subject} assignment has been moved to another admin",
                    membersGroup);

                foreach (var memberId in membersGroup)
                {
                    await hubManager.Invoke(SignalrActions.NOTIFICATION_RECEIVED, memberId,
                                            mapper.Map <IEnumerable <NotificationDto> >(notifications));
                }

                return((MoveReportAssignmentResponse) new MoveReportAssignmentResponse().LogInformation(
                           $"Assignee #{httpContextReader.CurrentUserId} move report #{report.Id} assignment to user #{request.NewAssigneeId}"));
            }

            throw new CrudException("Toggling private status of report failed");
        }
コード例 #4
0
        public async Task <AttachReportImagesResponse> Handle(AttachReportImagesRequest request,
                                                              CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.AddComment)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            ;

            return(await reportImageService.UploadReportImages(httpContextReader.CurrentUserId, report,
                                                               request.Images)
                ? new AttachReportImagesResponse()
                : throw new UploadFileException());
        }
コード例 #5
0
        public async Task <AcceptReportAssignmentResponse> Handle(AcceptReportAssignmentRequest request,
                                                                  CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.AcceptAssignment)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            var reportAssignmentResult = await reportManager.AcceptReportAssignment(report);

            return(reportAssignmentResult.IsSucceeded
                ? new AcceptReportAssignmentResponse
            {
                IsSucceeded = reportAssignmentResult.IsSucceeded,
                IsAccepted = reportAssignmentResult.IsAccepted
            }
                : throw new CrudException("Accept report assignment failed"));
        }
コード例 #6
0
        public async Task <TogglePrivacyReportResponse> Handle(TogglePrivacyReportRequest request,
                                                               CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.TogglePrivacy)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            var result = await reportManager.TogglePrivacyReport(report);

            return(result.IsSucceeded
                ? new TogglePrivacyReportResponse
            {
                IsSucceeded = result.IsSucceeded,
                IsPrivate = result.IsPrivate
            }
                : throw new CrudException("Toggling private status of report failed"));
        }
コード例 #7
0
        public async Task <RemoveReportSubscriberResponse> Handle(RemoveReportSubscriberRequest request,
                                                                  CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.AddComment)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            if (await reportSubscriberService.RemoveSubscriber(report, request.UserId))
            {
                var notification = await notifier.Push(
                    $"You were removed from subscribers in report: {report.Subject}",
                    request.UserId);

                await hubManager.Invoke(SignalrActions.NOTIFICATION_RECEIVED, request.UserId,
                                        mapper.Map <NotificationDto>(notification));

                return((RemoveReportSubscriberResponse) new RemoveReportSubscriberResponse().LogInformation(
                           $"Assignee #{httpContextReader.CurrentUserId} has removed subscriber #{request.UserId} in report #{report.Id}"));
            }

            throw new CrudException("Removing report subscriber failed");
        }
コード例 #8
0
        public async Task <AddReportCommentResponse> Handle(AddReportCommentRequest request,
                                                            CancellationToken cancellationToken)
        {
            var report =
                await reportValidationHub.ValidateAndReturnReport(request.ReportId, ReportPermission.AddComment)
                ?? throw new NoPermissionsException(ErrorMessages.NotAllowedMessage);

            var addedReportComment = await reportCommentService.AddComment(request with {
                IsPrivate = report.Private
            })
                                     ?? throw new CrudException("Adding report comment failed");

            if (ReportStatusTypeSmartEnum.FromValue(report.Status)
                .ShouldBeOpened(report, addedReportComment.UserId))
            {
                await reportManager.ChangeStatus(ReportStatusType.Opened, report);
            }

            var membersGroup = ReportManagerUtils.GenerateReportMembersGroup(report, addedReportComment.UserId);

            var notifications = await notifier.PushToGroup(
                $"Someone responded to your report: {report.Subject}", membersGroup);

            foreach (var memberId in membersGroup)
            {
                await hubManager.Invoke(SignalrActions.NOTIFICATION_RECEIVED, memberId,
                                        mapper.Map <IEnumerable <NotificationDto> >(notifications));
            }

            return((AddReportCommentResponse) new AddReportCommentResponse
            {
                ReportComment = mapper.Map <ReportCommentDto>(addedReportComment)
            }
                   .LogInformation(
                       $"Member #{addedReportComment.UserId} of report #{report.Id} added comment #{addedReportComment.Id}"));
        }