public async Task <WrapperSimpleTypesDTO> CrearChat(Chats chatParaCrearOwner) { using (SportsGoEntities context = new SportsGoEntities(false)) { ChatsRepository chatsRepo = new ChatsRepository(context); // Verifico si ya existe mi chat principal, si existe lo reactivo, si no lo creo bool existeChatOwner = await chatsRepo.VerificarSiYaExisteChat(chatParaCrearOwner); if (existeChatOwner) { chatParaCrearOwner = await chatsRepo.ReactivarChat(chatParaCrearOwner); } else { chatParaCrearOwner.EstadoChat = EstadosChat.Activo; chatParaCrearOwner.Creacion = DateTime.Now; chatsRepo.CrearChat(chatParaCrearOwner); } Chats chatNoOwner = new Chats { CodigoPersonaOwner = chatParaCrearOwner.CodigoPersonaNoOwner, CodigoPersonaNoOwner = chatParaCrearOwner.CodigoPersonaOwner }; // Verifico si ya existe mi chat secundario de la persona a que le voy a enviar, si existe no hago nada, si no lo creo // Lo dejo en estado inactivo para que crear el chat principal no le cree un chat a la persona secundaria // Solo cuando un mensaje es mandado es que ambos son reactivados bool existeChatNoOwner = await chatsRepo.VerificarSiYaExisteChat(chatNoOwner); if (!existeChatNoOwner) { chatNoOwner.EstadoChat = EstadosChat.PendienteParaBorrarMensajes; chatNoOwner.Creacion = DateTime.Now; chatsRepo.CrearChat(chatNoOwner); } WrapperSimpleTypesDTO wrapperCrearChat = new WrapperSimpleTypesDTO(); wrapperCrearChat.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperCrearChat.NumeroRegistrosAfectados > 0 || chatParaCrearOwner.Consecutivo > 0) { wrapperCrearChat.Exitoso = true; wrapperCrearChat.ConsecutivoCreado = chatParaCrearOwner.Consecutivo; if (chatNoOwner.Consecutivo > 0) { wrapperCrearChat.ConsecutivoChatRecibe = chatNoOwner.Consecutivo; } else { wrapperCrearChat.ConsecutivoChatRecibe = await chatsRepo.BuscarConsecutivoChat(chatNoOwner); } } return(wrapperCrearChat); } }