Executando verificação de segurança...
1

Eu fiz algo bem parecido com o que você disse, mais sem sucesso.

import cron from "node-cron"
import { returnLastIdTableGames } from "../utils/returnLastIdTableGames"
import { generateUniqueNumbers } from "../utils/generateUniqueNumbers"
import { insertValueTableGame } from "../utils/insertValueTableGame"
import { calculateBetMetch } from "../utils/calculateBetMetch"
import { prisma } from "../db/database"
import { UpdateValuesTableBet } from "../utils/UpdateValuesTableBet"

import axios from "axios"

let totalNumber: any = []

class CronJobGamer {
    static async startGamer(io: any) {
        return cron.schedule('3 * * * * *', async () => {
            io.emit("__CLEAN__")

            // NUMERO UNÍCO GAME
            const NEW_NAMBER_GAME = String(await this.FN_GET_NUMBER_GAME())

            // BUSCAR ULTIMO ID INSERIDO NA TABELA GAME
            const LAST_NAMBER_INSERTED_TABLE_GAME = Number(await this.FN_VERIFY_LAST_INSERT_TABLE_GAMER())

            // INSERI NO BANCO DE DADOS
            const GAMER = await insertValueTableGame(NEW_NAMBER_GAME, LAST_NAMBER_INSERTED_TABLE_GAME)
            const _ID = GAMER?.match_id
            // ENVIAR PARA O FRON-END O ID DO GAMER
            io.emit("number::aposta", _ID)

            console.log(_ID);


            const TRANSFORME_STRING_TO_ARRAY = NEW_NAMBER_GAME.split(",").map(n => Number(n))

            let _quantity_loop = 0
            const resultados: any = [];

            TRANSFORME_STRING_TO_ARRAY.forEach((n, i) => {

                setTimeout(async () => {
                    if (totalNumber.length == 6) {
                        totalNumber = []
                    } else {
                        totalNumber.push(n)
                        io.emit("gamer:total", [...totalNumber])
                        io.emit("gamer", n)
                    }
                    _quantity_loop++

                    if (_quantity_loop == 6) {
                        // CALCULAR AS APOSTAS E MOSTRAR AS APOSTAS QUE FORAM PREMIADAS
                        calculateBetMetch.verifyBetMatch(GAMER).then(async response => {
                            // const game = NEW_NAMBER_GAME.split(",").map(_R => Number(_R))

                            const BETS = await prisma.bet.findMany({ where: { number_game_result: String(GAMER?.match_id), awarded: false, status: "IN_PROCESSING" } })


                            if (BETS.length <= 0) {
                                io.emit("_GANHADORES_", { resultados: [], bet: false })
                                return false
                            }

                            let correspondencias = 0;

                            for (const _BET of BETS) {

                                for (const _RESPONSE of _BET.numbers.split(",").map(_R => Number(_R))) {
                                    if (TRANSFORME_STRING_TO_ARRAY.includes(_RESPONSE)) {
                                    console.log(_RESPONSE);                                    
                                        correspondencias++;
                                    }
                                }

                                if (correspondencias >= 1) {
                                    UpdateValuesTableBet.winners(correspondencias, _BET.id).then(items => {
                                        resultados.push({ id: _BET.id, numeros: _BET.numbers, correspondencias, aposta: items });

                                    }).finally(() => {
                                        io.emit("_GANHADORES_", { resultados, bet: true })
                                    })
                                } else {
                                    UpdateValuesTableBet.losers(_BET.id).then(r => r)
                                }                               

                            }
                        })
                    }

                }, 3000 * i)



            })


        })



    }

    private static async FN_GET_NUMBER_GAME(): Promise<any> {
        // Gerar um GAME aleatório que tenha 6 posições
        const numbersGame = await generateUniqueNumbers()
        // @ts-ignore
        const newNumbersGame = numbersGame.toString().slice(",")

        return newNumbersGame

    }

    private static async FN_VERIFY_LAST_INSERT_TABLE_GAMER(): Promise<Number> {
        // VERIFICAR NA LABELA GAMER O ULTIMO REGISTRO - CASO NÃO TENHA NENHUM O PRIMEIRO É O 1, E A PARTIR DISSO SEMPRE FAZER O INCREMENT +1
        const last = await returnLastIdTableGames()
        return last
    }



}


export { CronJobGamer }
Carregando publicação patrocinada...
1

Pra debugar seu sistema eu teria que criar esse banco de dados, além de implementar todas essas funções que estão na pasta utils (que eu teria que adivinhar o que fazem e quais dados retornam), etc. Desculpe, mas estou sem tempo pra isso.

Enfim, pra vc resolver, eu sugiro deixar o código mais organizado.

Primeiro vc chama tudo que precisa (a função que traz os jogos, outra que traz os resultados, etc).

Depois vc cria uma função que verifica e atualiza os acertos:

function verificaAcertos(apostas, resultados) {
    for (const aposta of apostas) {
        for (const n of aposta[0].nambers.split(',')) { // split para separar os números
            if (resultados.includes(parseInt(n))) { // parseInt para converter para número, e verifico se está no resultado
                aposta[0].acertos++;
            }
        }
    }
}

Aí, depois que vc já tem as apostas e acertos, vc chama a função:

verificaAcertos(array_de_apostas, array_de_resultados);

// aqui o array_de_respostas estará com os acertos atualizados

Depois vc continua o que tem que fazer (atualizar os acertos no banco, etc).