Esempio n. 1
0
        public async Task <ReviewItemDto> ReviewAsync(ReviewContactDto dto)
        {
            var contactReviewFromDb = await _unitOfWork.GetRepository <ARContactReview>()
                                      .GetAll()
                                      .Where(
                x =>
                x.FK_ReviewUserID == _bysSession.UserId &&
                (x.ARContactReviewDate.GetValueOrDefault().Date == Clock.Now.Date || x.FK_ARContactID == dto.ContactId))
                                      .ToArrayAsync();

            if (contactReviewFromDb.Any(x => x.FK_ARContactID == dto.ContactId))
            {
                throw new BusinessException("Bạn đã đánh giá liên hệ này rồi.");
            }

            if (contactReviewFromDb.Count(x => x.ARContactReviewDate.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.ARContactReviewDate).GetValueOrDefault().AddMinutes(30))
            {
                throw new BusinessException("Mỗi đánh giá trong ngày phải cách nhau 30 phút.");
            }

            var contactFromDb = await _unitOfWork.GetRepository <ARContact>().GetAll().FirstOrDefaultAsync(x => x.Id == dto.ContactId && x.FK_CreatedUserID == _bysSession.GetUserId());

            if (contactFromDb != null)
            {
                throw new BusinessException("Bạn không thể đánh giá liên hệ do chính mình đóng góp thông tin.");
            }

            var contactReviewToCreate = dto.ToARContactReviewEntity(_bysSession);

            var contactReview = await _unitOfWork.GetRepository <ARContactReview>().InsertAsync(contactReviewToCreate);

            await _unitOfWork.CompleteAsync();

            await UpdateContactEvalution(dto.ContactId);

            await _notificationService.CreateNotificationAsync(
                new CreateNotificationDto
            {
                UserId                 = _bysSession.UserId,
                NotificationType       = NotificationType.AddedContactEvaluation,
                NotificationObjectType = "ARContactReviews",
                NotificationObjectId   = contactReview.Id,
                NotificationContent    = _unitOfWork.GetRepository <ADUser>().Get(_bysSession.UserId)?.ADUserOrganizationName + " đã thêm đánh giá liên hệ " + _unitOfWork.GetRepository <ARContact>().Get(dto.ContactId)?.ARContactName
            });

            return(await GetContactReviewAsync(contactReview.Id));
        }
 public static ARContactReview ToARContactReviewEntity(this ReviewContactDto dto, IBysSession session)
 {
     return(new ARContactReview
     {
         FK_ARContactID = dto.ContactId,
         FK_ReviewUserID = session.UserId,
         ARContactReviewContent = dto.Content,
         ARContactReviewTitle = dto.Title,
         ARContactReviewDate = Clock.Now,
         ARContactReviewRating = dto.Rating,
         ARContactReviewIsHide = false
     });
 }
Esempio n. 3
0
        public async Task <IActionResult> Create([FromBody] ReviewContactDto dto)
        {
            var result = await _contactReviewService.ReviewAsync(dto);

            return(Success(result));
        }