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

E com isso o Guga e o Filipe já podem se aposentar... hahaha

Dá pra acrescentar essa checagem antes do COMMIT.

if (totalContentsBeforeTabcoins.rows.length !==
    (totalContentsTabcoinsAfter.rows[0].sum - totalContentsTabcoinsBefore.rows[0].sum)) {
    throw new error...

} else if (totalContentsBeforeTabcoins.rows.length !==
    ((totalUsersTabcoinsAfter.rows[0].sum - totalUsersTabcoinsBefore.rows[0].sum) / 10)) {
    throw new error...

} else if (DRY_RUN) {
    throw new error...

} else {
    await transaction.query('COMMIT');
      ...
}

Ela pode acusar um falso positivo se alguém fizer alguma transação no momento do script, mas pode ser uma garantia de que tudo ocorreu como deveria.

Carregando publicação patrocinada...
4

Show!!! To adicionando aqui e o script caiu no primeiro if. Acho que para esse primero check deveria ser:

    if (
      totalContentsBeforeTabcoins.rows.length !==
      totalContentsTabcoinsAfter.rows[0].sum - totalContentsTabcoinsBefore.rows[0].sum
    ) {
      throw new UnprocessableEntityError({
        message: 'Number of added Content TabCoins does not match',
        context: {
          totalContentsBeforeTabcoins: totalContentsBeforeTabcoins.rows.length,
          totalContentsTabcoinsBefore: totalContentsTabcoinsBefore.rows[0].sum,
          totalContentsTabcoinsAfter: totalContentsTabcoinsAfter.rows[0].sum,
          addedTabCoins: totalContentsTabcoinsAfter.rows[0].sum - totalContentsTabcoinsBefore.rows[0].sum,
        },
      });

Porque no final das contas, o totalContentsBeforeTabcoins (conteúdos criados antes das TabCoins) deveria ser o mesmo número das TabCoins adicionadas, que é a subtração de totalContentsTabcoinsAfter com totalContentsTabcoinsBefore.

O que acha?

3
4

No segundo if, essa substração:

totalContents.rows[0].count - totalContentsBeforeTabcoins.rows.length

Acaba retornando a quantidade de conteúdos que foram criados depois da feature de TabCoins. Então talvez precise ficar assim:

    } else if (
      totalContentsBeforeTabcoins.rows.length !==
      (totalUsersTabcoinsAfter.rows[0].sum - totalUsersTabcoinsBefore.rows[0].sum) / 10
    ) {
      throw new UnprocessableEntityError({
        message: 'Number of added User TabCoins does not match',
        context: {
          totalContentsBeforeTabcoins: totalContentsBeforeTabcoins.rows.length,
          totalUsersTabcoinsBefore: totalUsersTabcoinsBefore.rows[0].sum,
          totalUsersTabcoinsAfter: totalUsersTabcoinsAfter.rows[0].sum,
        },

O que acha?

3