javascript – Porque o retorno dentro do forEach não consegue entender o tipo da resposta de uma função de um de uma classe? Typescript

Eu consigo acessar através do for..of,
Mas através do forEach não consigo, a função não consegue entender que dentro do forEach está retornando uma função que é do tipo IHttpResponse.

interface IHttpResponse {
  statusCode: number;
  body: any;
}

const badRequest = (error: Error): IHttpResponse => ({
  statusCode: 400,
  body: error,
});

class Example {
handle(httpRequest: HttpRequest): IHttpResponse {
    const requiredFields = ('name', 'email', 'password', 'passwordConfirmation');

    // Aqui ele entende que o retorno de badRequest é um IHttpResponse
    for (const field of requiredFields) {
      if (!httpRequest.body(field)) {
        return badRequest(new MissingParamError(field));
      }
    }

   // Usando forEach ele não consegue entender que o retorno do badRequest é um IHttpResponse.     
   requiredFields.forEach((field) => {
      if (!httpRequest.body(field)) {
        return badRequest(new MissingParamError(field));
      }
   });   
}
}

javascript – Por que o retorno de reduce da NaN?

Comentei o return sum, propositalmente, por quê eu não entendi. Se eu retiro return sum, ele retorna a média certa, no entendo quando entra no if na última posição esse retorno mostra NaN. Mas por quê retorna NaN?

const mediaNumeros = numeros.reduce((sum, element, index, array) => {
    sum = sum + element;
    if (index == array.length - 1) {
        return Number((sum / array.length).toFixed(2));
    }
    // return sum;
}, 0)

Salvando retorno

Olá pessoal estou com uma duvida e gostaria de ajuda.

tenho uma aplicação aonde estou consumindo alguns dados de um webservice,
porem acontece alguns erros na hora de consumir dados, ou seja, ele entra em algumas exceções.

Até ai tudo bem, quando tem alguma exceção ele armazena essa informação e assim que finaliza ele dispara um comando no terminal para salvar o erro… porem fica muito genérico, gostaria de saber se tem algum tipo de solução para armazenar o numero da ocorrência dentro do array e no fim concatenar os itens que deu erro

por exemplo

      $curl = curl_init();
      curl_setopt_array($curl, array(
      CURLOPT_URL => "URL",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "PUT",
      CURLOPT_POSTFIELDS => "
      {
        rn"produto":rn   
          (rn      
            {
              rn"id": "$produto",
              rn"sku": 0,
              rn"preco1": $valor1,
              rn"preco2": $valorAl,
              rn"precoFin": $valorLrn     
            }rn   
          )rn
      }",
      CURLOPT_HTTPHEADER => array(
        "authorization: $token",
        "cache-control: no-cache",
        "content-type: application/json"
      ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);       
    
    curl_close($curl); 
    if ($err) {
      echo "cURL Error #:" . $err;
    }

assim toda vez que cai na condição de erro eu gostaria de pegar o numero da inserção dentro do loop e concatenar no comando

$command = 'nohup /root/log/logErr &'; 


exec($command ,$op);
  $pid = (int)$op(0);

o command teria que ficar assim

$command = 'nohup /root/log/logErr err1+err2+err3';  

Até olhei algumas coisas dentro do fórum mas não encontrei nada, alguém pode me dar alguma ideia de como fazer ?

python – Não existe nenhum erro na execução do código, porém o retorno que estou tendo na tabela do excel é que é o problema

Estou com um problema no retorno do meu código. Não me é retornado nenhum erro na execução, porém o problema disso é o retorno na tabela do Excel. Estou fazendo um estudo de caso da minha faculdade e o sistema se trata sobre o cadastro de clientes e encomenda. O código da classe e do objeto logo abaixo:

Classe


class Cliente:
    def __init__(self, nome, s_nome, tel, email, social_n, endereco, data_cad):
        self.set_nome(nome)
        self.set_s_nome(s_nome)
        self.set_tel(tel)
        self.set_email(email)
        self.set_social_n(social_n)
        self.set_endereco(endereco)
        self.set_data_cad(data_cad)

    # SETs dos dados do cliente

    def set_nome(self, nome):
        self.nome = nome

    def set_s_nome(self, s_nome):
        self.s_nome = s_nome

    def set_tel(self, tel):
        self.tel = tel

    def set_email(self, email):
        self.email = email

    def set_social_n(self, social_n):
        self.social_n = social_n
    
    def set_endereco(self, endereco):
        self.endereco = endereco

    def set_data_cad(self, data_cad):
        self.data_cad = data_cad

    # GET para retornar o "database"

    def get_database(self,rows):
        one_cliente = ()
        for n in range(rows):
            one_cliente.append({
                'id': n + 1,
                'nome':self.nome,
                'sobrenome':self.s_nome,
                'telefone':self.tel,
                'email':self.email,
                'rede_social':self.social_n,
                'endereco':self.endereco,
                'data_de_cadastro':self.data_cad
            })
        return one_cliente 

outro codigo


import os
import xlwt
import xlrd
from datetime import date
from class_cliente import Cliente

def main():
    cont = 1

    print('''
        O que deseja fazer?
        (1) Tabela de Clientes
        (2) Tabela de Encomendas
        (3) Excluir Cadastro
        (4) Relatório Excel
        (5) Sair
        ''')

    opcGeral = int(input('Digite Aqui: '))
    while True:
        if opcGeral == 1:

            nome = input('Nome do cliente: ')
            s_nome = input('Sobrenome do cliente: ')
            tel = input('Telefone pra conta: ')
            email = input('email: ')
            social_n = input('Rede: ')
            endereco = input('Endereço: ')                
            data_cad = date.today()

            workbook = xlwt.Workbook()
            worksheet = workbook.add_sheet("cliente")

            dado_cliente = Cliente(nome, s_nome, tel, email, social_n, endereco, data_cad)
            cont_cadas = dado_cliente.get_database(cont) 
            cont += 1

        elif opcGeral == 2:
            pass

        elif opcGeral == 4:
            worksheet.write(0,0,u'ID')
            worksheet.write(0,1,u'NOME')
            worksheet.write(0,2,u'SOBRENOME')
            worksheet.write(0,3,u'TELEFONE')
            worksheet.write(0,4,u'EMAIL')
            worksheet.write(0,5,u'REDE SOCIAL')
            worksheet.write(0,6,u'ENDEREÇO')
            worksheet.write(0,7,u'DATA DO CADASTRO')

            for i, cliente_one in enumerate(cont_cadas):
                worksheet.write(i + 1, 0, label = cliente_one('id'))
                worksheet.write(i + 1, 1, label = cliente_one('nome'))
                worksheet.write(i + 1, 2, label = cliente_one('sobrenome'))
                worksheet.write(i + 1, 3, label = cliente_one('telefone'))
                worksheet.write(i + 1, 4, label = cliente_one('email'))
                worksheet.write(i + 1, 5, label = cliente_one('rede_social'))
                worksheet.write(i + 1, 6, label = cliente_one('endereco'))
                worksheet.write(i + 1, 7, label = cliente_one('data_de_cadastro'),style=xlwt.easyxf(num_format_str='dd/mm/yyyy'))

            workbook.save('cliente.xls')


        opcGeral = input('Cadastrar mais clientes: (S/N)')
        if opcGeral.lower() == 's' :
            print('''
        O que deseja fazer?
        (1) Tabela de Clientes
        (2) Tabela de Encomendas
        (3) Excluir Cadastro
        (4) Relatório Excel
        (5) Sair
        ''')

            opcGeral = int(input('Digite Aqui: '))

        else:
            break

    
if __name__ == "__main__":
    main()

OBS: O segundo código ainda não esta terminado

Eu estou usando a lib xlwt para escrever no Excel só que quando vou executar o código quando começo a cadastrar os clientes fica normal e insere os dados normalmente, porém quando eu realizo dois cadastros ao invés de escrever no Excel as duas pessoas cadastradas ela acaba escrevendo duas vezes a ultima pessoa cadastrada… gostaria de saber o que estou fazendo de errado.

sql – Retorno de múltiplas chaves usando REGEXP_SUBSTR

Estou tentando a leitura de ocorrências de registros de texto baseados em uma ocorrência. Quebrando a cabeça cheguei aos seguintes resultados:

Por exemplo quero pegar o segundo nome, usando como base a chave empr.:

SELECT REGEXP_SUBSTR('empr.: 1234 fulano de tal xpto da silva  empr.: 1235 beltrano de tal silveira   empr.: 1236 fulano de tal xpto da silva' , '(^empr.:)D+',1,2)  FROM dual; 

Consigo retornar todos os caracteres alfabéticos após o segundo ‘empr.:‘:

5 beltrano de tal silveira empr.:

Quando o que preciso é só:

beltrano de tal silveira

Alguém pode me orientar?

Grato!

php – MercadoPago Checkout Pro: Como armazenar retorno de status de pagamento usando a API

Estou desenvolvendo uma aplicação que utilizará o Checkout Pro do MercadoPago. Sou leigo nessa área e gostaria de armazenar os status de compra do cliente dentro de uma tabela no MySql. No caso para tentar resolver essa dúvida, estou vendo um artigo do MercadoPago sobre IPN (Instant Payment Notification) porém não estou conseguindo achar um caminho correto para armazenar estas notificações.

A princípio já possuo uma tabela chamada pedidos e dentro dessa tabela criei uma coluna status. Abaixo segue um exemplo da estrutura da mesma:

pedidoID | cliente     | preco  | status
-------------------------------------------
0001     |João José    | 25.00  | Aprovado
0002     |Maria Joana  | 20.00  | Pendente
0003     |Maria Andrade| 30.00  | Cancelado

entretanto, a minha dúvida é como receber este retorno (status) do processo de pagamento do cliente no checkout Pro para que eu possa inserir essa informação conforme no exemplo da tabela acima na coluna status? No artigo citado, o mesmo diz que tenho que criar uma URL conforme abaixo:

www.yoursite.com/notifications

onde no caso criei um arquivo php chamado notifications porém não sei ao certo se seria isso que eu deveria fazer. Abaixo uma explicação a respeito, dentro do artigo de suporte do MercadoPago Checkout Pro:

(Exemplo: Se configurar a URL: www.yoursite.com/notifications, você receberá as notificações de pagamento desta maneira: www.yoursite.com/notifications?topic=payment&id=123456789)

Abaixo, um código em php fornecido pelo artigo de ajuda, onde informa o seguinte:

Implemente o receptor de notificações usando o seguinte código como exemplo:

<?php
    MercadoPagoSDK::setAccessToken("ENV_ACCESS_TOKEN");

    $merchant_order = null;

    switch($_GET("topic")) {
        case "payment":
            $payment = MercadoPagoPayment::find_by_id($_GET("id"));
            // Get the payment and the corresponding merchant_order reported by the IPN.
            $merchant_order = MercadoPagoMerchantOrder::find_by_id($payment->order->id);
            break;
        case "merchant_order":
            $merchant_order = MercadoPagoMerchantOrder::find_by_id($_GET("id"));
            break;
    }

    $paid_amount = 0;
    foreach ($merchant_order->payments as $payment) {   
        if ($payment('status') == 'approved'){
            $paid_amount += $payment('transaction_amount');
        }
    }

    // If the payment's transaction amount is equal (or bigger) than the merchant_order's amount you can release your items
    if($paid_amount >= $merchant_order->total_amount){
        if (count($merchant_order->shipments)>0) { // The merchant_order has shipments
            if($merchant_order->shipments(0)->status == "ready_to_ship") {
                print_r("Totally paid. Print the label and release your item.");
            }
        } else { // The merchant_order don't has any shipments
            print_r("Totally paid. Release your item.");
        }
    } else {
        print_r("Not paid yet. Do not release your item.");
    }

?>

No mais, eu já possuo as credenciais de produção e testes e a dúvida mesmo é saber qual caminho certo eu devo tomar para poder implantar essa informação em minha aplicação? Desde já agradeço a atenção.

react – Manipulando retorno de função Async/Await com JSON.parse – REACTJS

O problema está acontecendo porque o tipo do seu ret.value é uma união entre string e null.

Mesmo que no seu teste ele seja uma string, a declaração desse tipo contempla a possibilidade dele ser null também, e o tipo null não é uma parâmetro válido para o método JSON.parse, portanto o compilador não está aceitando o mesmo.

Para passar o parâmetro para o método JSON.parse, você pode utilizar um dos muitos shields do TypeScript. Se você adicionar um if para se certificar que ret.value é do tipo string dentro de determinado escopo, isso já será o suficiente para o compilador se certificar que ele é válido:

async getObject() {
    const ret = await Storage.get({ key: 'user' });
    if (typeof ret.value === 'string') {
        // dentro desse escopo você pode utilizar ret.value como se ele sempre fosse uma string
        console.log(JSON.parse(ret.value));
    }
}

Outra abordagem que você pode utilizar é criar uma variável que é do tipo string, e exclusivamente string:

async getObject() {
    const ret = await Storage.get({ key: 'user' });
    const value = ret.value ?? '';
    console.log(JSON.parse(value));
}

No exemplo acima, se ret.value for null o operador coalesce (??) irá resultar na string vazia, portanto o tipo de value não tem como ser null, logo é um parâmetro válido para JSON.parse

javascript – Como saber quantas vezes uma palavra se repete no array e,a partir do retorno de uma função que calcula isso,fazer novos cálculos?(JS)

Preciso fazer uma função que retorne quantas vezes a placa do carro aparece no array e utilizar esse retorno em outra função para determinar um cálculo.

Esse é o meu código e ele está imprimindo “0”

 var placas = (
   'RXB-2525', 'AKX-3333', 'ORO-7142','RXB-2525', 'AKX-3333', 'ORO-7142',
   'AKX-3333', 'RXB-2525', 'AKX-3333','AKX-3333', 'RXB-2525', 'AKX-3333',
   'RXB-2525','AKX-3333','ORO-7142','AKX-3333', 'AKX-3333', 'RXB-2525',
   'AKX-3333', 'ORO-7142', 'ORO-7142','AKX-3333', 'AKX-3333', 'RXB-2525',
   'AKX-3333', 'AKX-3333', 'RXB-2525','AKX-3333', 'AKX-3333', 'RXB-2525',
   'AKX-3333', 'ORO-7142', 'ORO-7142','AKX-3333', 'ORO-7142', 'ORO-7142',
   'ORO-7142', 'RXB-2525', 'AKX-3333','AKX-3333', 'ORO-7142', 'ORO-7142',
   'AKX-3333', 'RXB-2525', 'AKX-3333','AKX-3333', 'RXB-2525', 'AKX-3333',
   'RXB-2525', 'AKX-3333', 'ORO-7142','AKX-3333', 'AKX-3333', 'RXB-2525',
   'AKX-3333', 'ORO-7142', 'ORO-7142','AKX-3333', 'AKX-3333', 'RXB-2525',
  'AKX-3333', 'AKX-3333', 'RXB-2525','AKX-3333', 'AKX-3333', 'RXB-2525');

var numeroDeEntradas = 0;
var pagamentoUm = 0;
var pagamentoDois = 0;

function calcularNumeroDeEntradas(placa){
   
   for (var i = 0; i < placas.length;i++){
      if (placas(i)==placas(i)){
      return   numeroDeEntradas++;
      }

   }
   
}
 
function calcularValorDevido(placa){
   
   if (calcularNumeroDeEntradas(placa)<=20){
      pagamentoUm = 20*calcularNumeroDeEntradas(placa)
   
   } else if (calcularNumeroDeEntradas(placa) >=20) {
       
       pagamentoDois= pagamentoUm +(5*(calcularNumeroDeEntradas(placa)-20))

   }
}

console.log(calcularNumeroDeEntradas(placas))

console.log(calcularValorDevido(placas))

“pagamentoUm” e “pagamentoDois” é o valor a ser pago em função do número de vezes que a placa se repete.

java – Teste não retorno o requisitado, deveria retornar 200 OK

Criei um teste que deveria retornar 200 mas retorna 500 e não estou entendo porque:

Pull request com o codigo: https://github.com/wferreiracosta/alfred/pull/64

Código:

@Test
public void buscarCategoriaPorId() throws Exception {
    this.mockMvc
        .perform(MockMvcRequestBuilders.get("/categorias/1"))
        .andExpect(MockMvcResultMatchers.status().isOk());
}

Segue mensagem:

java.lang.AssertionError: Status expected:<200> but was:<500>
    at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:59)
    at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:122)
    at org.springframework.test.web.servlet.result.StatusResultMatchers.lambda$matcher$9(StatusResultMatchers.java:627)
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:196)
    at com.wferreiracosta.alfred.resource.CategoriaResourceTest.buscarCategoriaPorId(CategoriaResourceTest.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

java – Capturar el tiempo de retorno RESPONSE en petición http con RETROFIT

codeVerificationEmail.enqueue(object : retrofit2.Callback<Validate>{
            override fun onResponse(call: Call<Validate>?, response: Response<Validate>?) {
                val validate = response!!.body()
                if (validate != null) {
                    if(validate.esValido){
                        Toast.makeText(context, "Codigo verificado en true", Toast.LENGTH_LONG).show()
                    }else{
                        Toast.makeText(context, "Codigo verificado en false", Toast.LENGTH_LONG).show()
                    }
                }
            }

            override fun onFailure(call: Call<Validate>?, t: Throwable?) {
                TODO("Not yet implemented")
            }

        })