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)); }
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 }); }
public async Task <IActionResult> Review([FromBody] ReviewForestPlotActorDto dto) { var result = await _forestPlotActorReviewService.ReviewAsync(dto); return(Success(result)); }