예제 #1
0
        public async Task <UserReport> CreateUserReport(CreateUserReportRequest request)
        {
            var baseReport = await CreateBaseReport(request.Subject, request.Content, request.IsPrivate,
                                                    request.EventDate, ReportCategoryType.User);

            if (await database.UserRepository.FindById(request.UserToReportId) == null)
            {
                throw new EntityNotFoundException("User to report not found");
            }

            var userReport = UserReport.Create(baseReport.Id, request.UserToReportId, request.WitnessId);

            userReport.SetReport(baseReport);

            using (var transaction = database.BeginTransaction().Transaction)
            {
                if (!await database.ReportRepository.Insert(baseReport, false))
                {
                    throw new DatabaseException();
                }

                if (!await database.UserReportRepository.Insert(userReport, false))
                {
                    throw new DatabaseException();
                }

                transaction.Complete();
            }

            await reportImageService.UploadReportImages(httpContextReader.CurrentUserId,
                                                        baseReport,
                                                        request.Images);

            return(userReport);
        }