Пример #1
0
        public async Task <ReviewItemDto> ReviewAsync(ReviewForestPlotActorDto dto)
        {
            var forestPlotActorFromDb = await _unitOfWork.GetRepository <ICForestPlot>()
                                        .GetAllIncluding(x => x.APActor)
                                        .Where(x => x.Id == dto.ForestPlotId && x.APActor != null)
                                        .FirstOrDefaultAsync();

            if (forestPlotActorFromDb == null)
            {
                throw new BusinessException("Không tìm thấy chủ rừng của lô này.");
            }

            var contactReviewFromDb = await _unitOfWork.GetRepository <APActorReview>()
                                      .GetAll()
                                      .Where(
                x =>
                x.FK_ReviewUserID == _bysSession.UserId &&
                (x.APActorReviewDate.GetValueOrDefault().Date == Clock.Now.Date || x.FK_ICForestPlotID == dto.ForestPlotId))
                                      .ToArrayAsync();

            if (contactReviewFromDb.Any(x => x.FK_ICForestPlotID == dto.ForestPlotId))
            {
                throw new BusinessException("Bạn đã đánh giá lô rừng này rồi.");
            }

            if (contactReviewFromDb.Count(x => x.APActorReviewDate.GetValueOrDefault().Date == Clock.Now.Date) >= 5)
            {
                throw new BusinessException("Bạn đã đánh giá 5 lần trong ngày.");
            }

            if (Clock.Now < contactReviewFromDb.Max(x => x.APActorReviewDate).GetValueOrDefault().AddMinutes(30))
            {
                throw new BusinessException("Mỗi đánh giá trong ngày phải cách nhau 30 phút.");
            }

            var actorReviewToCreate = dto.ToAPActorReviewEntity(_bysSession);
            var actorReview         = await _unitOfWork.GetRepository <APActorReview>().InsertAsync(actorReviewToCreate);

            forestPlotActorFromDb.ICForestPlotLatestReviewDate = actorReviewToCreate.APActorReviewDate;

            await _unitOfWork.CompleteAsync();

            await _notificationService.CreateNotificationAsync(
                new CreateNotificationDto
            {
                UserId                 = _bysSession.UserId,
                NotificationType       = NotificationType.AddedActorEvaluation,
                NotificationObjectType = "APActorReviews",
                NotificationObjectId   = actorReview.Id,
                NotificationContent    = _unitOfWork.GetRepository <ADUser>().Get(_bysSession.UserId)?.ADUserOrganizationName + " đã thêm đánh giá chủ rừng " + forestPlotActorFromDb.APActor?.APActorName
            });

            return(await GetReviewAsync(actorReview.Id));
        }
Пример #2
0
 public static APActorReview ToAPActorReviewEntity(this ReviewForestPlotActorDto dto, IBysSession session)
 {
     return(new APActorReview
     {
         FK_APActorID = dto.ActorId,
         FK_ReviewUserID = session.UserId,
         FK_ICForestPlotID = dto.ForestPlotId,
         APActorReviewRating = dto.Rating,
         APActorReviewTitle = dto.Title,
         APActorReviewContent = dto.Content,
         APActorReviewDate = Clock.Now,
         APActorReviewIsHide = false
     });
 }
Пример #3
0
        public async Task <IActionResult> Review([FromBody] ReviewForestPlotActorDto dto)
        {
            var result = await _forestPlotActorReviewService.ReviewAsync(dto);

            return(Success(result));
        }