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