public async Task ExecuteAsync(RequestTutorCommand message, CancellationToken token) { Tutor?tutor = null; if (message.TutorId.HasValue) { if (message.UserId == message.TutorId.Value) { throw new ArgumentException("You cannot request tutor to yourself"); } tutor = await _tutorRepository.LoadAsync(message.TutorId.Value, token); } var user = await _userRepository.LoadAsync(message.UserId, token); var lead = new Lead(message.Course, message.LeadText, message.Referer, user, tutor, message.UtmSource); await _leadRepository.AddAsync(lead, token); var tutorsIds = new List <long>(); if (message.MoreTutors) { var needToSendToMoreTutors = await _leadRepository.NeedToSendMoreTutorsAsync(message.UserId, token); if (needToSendToMoreTutors) { var t = await _tutorRepository.GetTutorsByCourseAsync(message.Course, message.UserId, user.Country, token); tutorsIds.AddRange(t); } } if (tutor != null) { tutorsIds.Add(tutor.Id); } foreach (var userId in tutorsIds.Distinct()) { var users = new[] { userId, message.UserId }; var chatRoom = await _chatRoomRepository.GetOrAddChatRoomAsync(users, token); if (chatRoom.Extra == null) { chatRoom.Extra = new ChatRoomAdmin(chatRoom); } chatRoom.Extra.Lead = lead; await _chatRoomRepository.UpdateAsync(chatRoom, token); var chatMessage = new ChatTextMessage(user, message.ChatText, chatRoom); chatRoom.AddMessage(chatMessage); await _chatRoomRepository.UpdateAsync(chatRoom, token); await _chatMessageRepository.AddAsync(chatMessage, token); } }
public async Task AddAsync(LeadModel model) { await _leadRepository.AddAsync(LeadFactory.Create(model, _userId)); await _unitOfWork.SaveChangesAsync(); }