Exemplo n.º 1
0
        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);
            }
        }