/// <summary> /// Создать диалог с пользователем /// </summary> /// <param name="userId"></param> /// <returns></returns> public async Task <BaseApiResponse <int> > CreateOrGetExistingDialogWithUser(string userId) { if (!IsAuthenticated) { return(new BaseApiResponse <int>(false, ValidationMessages.YouAreNotAuthorized)); } if (!await Query <EccUser>().AnyAsync(x => x.Id == userId)) { return(new BaseApiResponse <int>(false, "Пользователь не найден по указанному идентификатору")); } var result = await Query <EccChat>() .Where(x => x.IsDialog) .Where(x => x.UserRelations.Any(t => t.UserId == UserId) && x.UserRelations.Any(t => t.UserId == userId)) .Select(x => new { x.Id, }).FirstOrDefaultAsync(); if (result != null) { return(new BaseApiResponse <int>(true, "Чат с пользователем уже существует", result.Id)); } var chat = new EccChat { IsDialog = true }; CreateHandled(chat); var resp = await TrySaveChangesAndReturnResultAsync("Чат создан"); if (!resp.IsSucceeded) { Logger.LogWarning($"ApplicationChatService.CreateOrGetExistingDialogWithUser.CretingChatError ChatCreatorUserId={UserId} userIdParam={userId}"); return(new BaseApiResponse <int>(false, $"Произошла ошибка при создании чата. {resp.Message}")); } var relations = GetRelations(chat.Id, userId); CreateHandled(relations); var saveRelationsResponse = await TrySaveChangesAndReturnResultAsync("Ok"); if (!saveRelationsResponse.IsSucceeded) { return(new BaseApiResponse <int>(false, "Произошла ошибка при создании пользователей к чату, но сам чат был создан")); } await PublishMessageAsync(new ChatCreatedEvent { ChatId = chat.Id, UserIds = relations.Select(x => x.UserId).ToList() }); return(new BaseApiResponse <int>(true, "Диалог с пользователем создан", chat.Id)); }
/// <summary> /// Создать системный чат /// </summary> /// <param name="model"></param> /// <returns></returns> public async Task <BaseApiResponse <int> > CreateSystemChat(CreateSystemChat model) { var validation = ValidateModel(model); if (!validation.IsSucceeded) { return(new BaseApiResponse <int>(validation)); } validation = ValidationUtils.CheckIsNullOrEmpty(model.UserIds); if (!validation.IsSucceeded) { return(new BaseApiResponse <int>(validation)); } var ticks = DateTime.UtcNow.Ticks; var chat = new EccChat { ChatName = model.ChatName, Type = model.ChatType, IsDialog = false, IsArchived = false, IsSystem = true, UserRelations = model.UserIds.Select(x => new EccChatUserRelation { IsChatCreator = false, UserId = x, LastVisitUtcTicks = ticks }).ToList() }; CreateHandled(chat); var result = await TrySaveChangesAndReturnResultAsync("Ok"); if (!result.IsSucceeded) { return(new BaseApiResponse <int>(result)); } return(new BaseApiResponse <int>(true, "Системный чат создан", chat.Id)); }