-
Notifications
You must be signed in to change notification settings - Fork 403
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reverter ganhos de TabCoins em conteúdos pegos pelo firewall interno e outros ajustes #1638
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Importante contribuição, @Rafatcb! 💪💪💪
Com a adição de undoContentsTabcoins
, talvez seja melhor executar tudo dentro de uma transação, mas é preciso pensar melhor se isso faz sentido, pois, se der algum erro, não seria interessante reverter toda a transação.
Fiz comentários no código
infra/stored-procedures/firewall-create-content-text-child.pgsql
Outdated
Show resolved
Hide resolved
Acho que criar uma transação para cada iteração do Edit: Vendo melhor, a condição em que entrará na função |
2ca3788
to
c51bbff
Compare
@Rafatcb, aquele E a questão de diferentes usuários me fez pensar na possível situação de usuários legítimos que publicarem algo pela mesma rede pública, ao mesmo tempo, e somente o terceiro saberá que alguma coisa errada aconteceu. Os dois primeiros não saberão o que aconteceu com suas publicações. Será que é interessante verificar se alguma das publicações é de um usuário diferente do terceiro e enviar uma notificação por email? Um efeito colateral da implementação é que ficou mais complicado de reverter o efeito do firewall em casos de falso positivo. Antes, apesar de ter que fazer diretamente no banco, era só voltar as publicações de |
Criarei o teste 👍
Acho que isso pode ser interessante sim.
Ainda não pensei na melhor forma em fazer isso. Você já tem alguma ideia? Se seria criando uma função SQL ou uma |
Também não pensei. Acho que o ponto mais importante é como ficaria no banco de dados, já que não podemos excluir os balanços criados pelo evento de firewall. Provavelmente teria que criar novos balanços revertendo os do evento de reversão 😅 Talvez uma |
c51bbff
to
ea0bc53
Compare
FirewallPercebi que a alteração que fiz removia o conteúdo, mas não atualizava o A parte do e-mail acabou ficando bem "personalizada" de acordo com singular/plural e publicação/comentário. Para as publicações, consegui enviar o título, mas para os comentários não sei o que seria melhor para quem receber o e-mail ter uma noção, então passei apenas os IDs. Se você ter alguma sugestão de melhoria, pode falar. Não sei se o texto "Identificamos que você está tentando..." é adequado, se deveria mencionar "Identificamos muitas novas publicações no seu IP" ou algo parecido. Desfazer o efeito do firewallModifiquei o Algumas dúvidas:
|
ea0bc53
to
25cc2b8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Rafatcb, está muito bom, mas como ainda não consegui ver tudo, já vou deixar alguns comentários.
Sobre a refatoração em models/transacional
, aprovo todas as mudanças. Até por isso acho que talvez compense separar em um PR prévio a esse e já matar essa etapa.
Sobre a parte de email dentro de models/firewall
, será que não são coisas que deveriam estar no models/notification
?
Tem mais comentários no código 👍
Ok, vou fazer isso. Eu fiz aqui porque estava precisando copiar os estilos e percebi a repetição.
Eu havia começado a fazer no |
25cc2b8
to
5f29106
Compare
This comment was marked as outdated.
This comment was marked as outdated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Enquanto estou criando o endpoint GET
, percebi algo que acho que está errado (filterOutput
no model
), então decidi aproveitar para comentar também outros pontos que poderiam ser diferentes.
tests/integration/api/v1/moderation/undo_firewall_effect/[event_id]/post.test.js
Outdated
Show resolved
Hide resolved
5f29106
to
af24608
Compare
Fiz o
|
49f20c1
to
d8f501c
Compare
9aa54ff
to
9ae0ce4
Compare
9ae0ce4
to
0375212
Compare
0375212
to
806ac9e
Compare
O comportamento ao desfazer os TabCoins na função
Para os conteúdos pegos pelo firewall, manteremos esse comportamento, certo? Os testes para esse cenário em |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A implementação está ótima!
Fiz alguns comentários, mas a única coisa que me preocupa são os testes, pois podem ter ficado de difícil manutenção.
Gostaria de ouvir opiniões sobre como podemos deixar mais claros quais são os requisitos que cada teste está garantindo.
expect(userAfterFirewallCatch.tabcoins).toBe(0); | ||
|
||
const allEmails = await orchestrator.getEmails(); | ||
expect(allEmails).toHaveLength(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Não estou sugerindo alterar isso nesse PR, apenas abrindo um debate para melhorias futuras...
Será que não era melhor notificar todos os usuários afetados? Penso em um caso de alguém distraído que não se atentou à mensagem de erro recebida, ou alguém usando um sistema desenvolvido pela comunidade, que use a API, mas não apresente os erros corretamente.
Uma outra alteração no mesmo trecho de código pode envolver não notificar mais de uma vez pelo mesmo conteúdo. Podemos olhar o status_before_update
para não duplicar as notificações em caso de eventos consecutivos.
expect(Date.parse(createdConfirmationEventResponse.created_at)).not.toBeNaN(); | ||
expect(uuidVersion(createdConfirmationEventResponse.id)).toBe(4); | ||
|
||
// Get second event |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Precisa testar o GET aqui? Ou realmente está testando algum requisito do POST? Será que a intenção não era testar o comportamento ao realizar POST no outro evento?
A mesma dúvida se aplica ao próximo teste.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Estava testando para garantir que os dois eventos retornam os mesmos dados (review
de um, e GET
de outro). Isso confirma tanto que estão retornando os mesmos campos quanto que o segundo passou a ser considerado como "avaliado" também (visto que o GET
retorna o evento de review
).
Inicialmente os endpoints não estavam retornando as mesmas coisas, foi então que percebi a necessidade de modificar o content.confirmFirewallStatus
e content.undoFirewallStatus
para retornar o nome de usuário, TabCoins e children_deep_count
. O validator
não apontou esse problema porque o firewall_event
apenas valida o schemas.content
e schemas.user
, sem especificar quais campos são required
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A parte que verifica o GET /firewall
para esse caso deveria ser adicionada no arquivo de testes do endpoint específico, mesmo que a etapa de preparação seja idêntica, os expects vão mudar, pois lá não precisamos nos preocupar com o que foi retornado no POST /review
, e aqui não precisamos verificar o GET /firewall
.
Isso deixa os testes mais objetivos, e ajuda a ir direto no ponto do problema em caso de erros.
806ac9e
to
b3b32fc
Compare
Acredita que o problema seja o nome das funções? Eu acho que o comportamento esperado fica mais claro quando é usado |
Em alguns casos pode ser melhor adequar o nome, mas em outros é preciso ser mais objetivo nas asserções. Em muitos casos, diminuir a quantidade de Algumas asserções extras ajudam no momento da criação do teste, pois são verificações se a etapa de preparação está correta antes de ir para o que realmente queremos testar. Essas asserções que ajudam apenas durante a criação dos testes podem ser removidas assim que tiver certeza de que o teste realmente testa o que se espera. Algumas faz sentido manter apenas por documentação, por facilitarem a leitura, por exemplo uma verificação do Casos onde seja obrigatório manter as asserções na etapa de preparação do teste para garantir que ele esteja funcionando podem indicar a falta de outros testes para essas etapas específicas. Mas esses problemas estão presentes em muitos dos nossos testes, não é algo exclusivo do PR atual, então não vai impedir a mesclagem. Minha preocupação é por ser uma dívida técnica que está crescendo muito. Bora pro merge, pois é muito importante reverter esses os ganhos 🚀 |
Mudanças realizadas
Reversão de ganhos de TabCoins
A função
creditOrDebitTabCoins
foi chamada para reverter possíveis ganhos de TabCoins que o usuário teve com os conteúdos publicados que foram pegos pelo firewall interno.Endpoint
POST /api/v1/moderations/review_firewall/[id]
: confirmar ou desfazer um evento específico de firewall. A confirmação (confirm
) adiciona a featurenuked
ao usuário ou o statusdeleted
aos conteúdos envolvidos. A reversão (undo
) retorna os TabCoins removidos, restaura ostatus
dos conteúdos efeatures
dos usuários, a depender do tipo de firewall. Este endpoint retornará os dados atualizados contendo o evento original do firewall, o novo evento criado ao desfazer o firewall, os dados dos conteúdos e usuários afetados.Resolve #1463
Tipo de mudança
Checklist: