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

TabStore: Surfando uma onda de problemas com o split e a custódia dos pagamentos! 🌊💸

Sigo focado em avançar com o TabStore, mas a última semana foi bem complicada!!!! 😵‍💫

Se vc perdeu o começo dessa história, dá uma olhada nos links no final dessa postagem! 😀

Na última sexta à noite estava tudo certo pra subirmos a última parte do processo de intermediação das negociações do TabStore, mas o desfecho foi completamente diferente e encerramos a noite desabilitando praticamente tudo que já tínhamos construído. 😓

No dia 16/06, fizemos alguns testes em produção da nossa integração com o gateway de pagamentos, ficamos felizes com o resultado e, desde então, evoluímos o projeto apenas trabalhando no sandbox. Na sexta 04/07, estava tudo lindo e testado, então era só mandar pra produção e correr pro abraço. Subimos e... começou a chuva de problemas ☔ o que funcionava lindo no sandbox não funcionava mais em produção!

Puxando a capivara, descobrimos que o problema no perfil relatado pelo Programmer404, que a princípio parecia simples... na verdade era complexo 😬 e também relacionado ao gateway de pagamentos. 💳

O gateway de pagamentos mudou as regras do jogo e isso ferrou completamente o TabStore 😭 e em plena noite de sexta-feira, sem suporte, não tivemos outra opção a não ser desabilitar toda a integração com o gateway de pagamentos.

Na segunda-feira, o time de suporte do gateway atendeu meu chamado, ficou ciente do problema gerado pro TabStore e deu rollback nas novas regras implementadas, fazendo sumir o principal problema e revelando outros, dessa vez da nossa própria implementação. 🫣

Como funciona...

Dado o tipo de público do TabNews, acho que existe uma boa chance de você ter um perfil técnico, sendo assim, permita-me aprofundar um pouco. 👨‍💻

Resumidamente, o TabStore é um intermediador em uma transação financeira e tem o papel de garantir que algumas regras sejam seguidas durante o processo, além de fazer a custódia do dinheiro durante a vida desse processo e, no final, enviar o dinheiro a quem é de direito. 💰

Para fazer esse trabalho, o TabStore controla dois tipos de subcontas:

Subconta de pagamento

Toda vez que alguém faz um pagamento dentro do TabStore, uma subconta de pagamento é criada. Essa conta fica relacionada a uma operação e apenas o próprio TabStore pode movimentá-la. É nessa subconta que fazemos a custódia do valor da operação, ou seja, o dinheiro fica parado nessa subconta, isolado de tudo e de todos, só esperando o encerramento da operação, pra descobrir se deve ir pro vendedor da postagem patrocinada ou se deve ser devolvido ao comprador.

Subconta de usuário

Este é um tipo mais simples e intuitivo. Basicamente, quando o dinheiro sai de uma subconta de pagamento, ele vai pra conta de um usuário específico, onde somente esse próprio usuário tem o poder de sacar. 💸

A treta...

O que ferrou nossa vida aqui é que o TabStore criava as subcontas sempre com um UUID (aleatório gerado no momento da criação) sendo usado como pixKey. Isso por si só não era um problema... até o gateway de pagamentos implementar uma nova regra, exigindo que toda pixKey representasse uma conta real em algum banco de verdade! Aaaaiii ferrou!!! 😩

Pra conta de usuário até tínhamos a saída fácil de criar a subconta com o CPF do usuário, mas pra conta de custódia isso ferrava completamente os planos... e se essa regra continuasse, teríamos que mudar a estratégia e fazer uma refatoração... refatoração em um projeto que ainda nem nasceu direito!!! 😵

Felizmente o pior já passou 🙏 o gateway voltou, no meio do caminho encontramos e resolvemos outros pequenos problemas e, de quebra, fizemos algumas melhorias de observabilidade. 📈

Observação...

Essa é minha primeira vez implementando uma integração de pagamentos com split e custódia financeira, então pra mim algumas coisas são novidade 😅 e, se você tiver alguma ideia, sugestão ou crítica, eu adoraria conhecê-la nos comentários! 💡

E se você chegou até aqui, gostaria de lhe pedir mais 2 minutos do seu tempo, pra me ajudar respondendo essa pesquisa rápida sobre o TabStore. 🙏

Flw, vlw, bj... tchau! 👋


Carregando publicação patrocinada...
4

Acabei de fazer um anúncio por R$ 4,99 (mas eu queria fazer um gratuito).

Uma melhoria muito importante é a de não cobrar taxa quando o valor for gratuito.
O usuário que está vendendo não tem interesse em ganhar dinheiro com isso, e acredito que o TabStore não gaste nada para intermediar uma transação assim (não precisa iniciar um pagamento de R$ 0,00).

1

Muito legal!

Não consegui resistir e comprei!!! 🤑

Acabo de perceber que preciso correr com a task de mandar e-mail de notificação para os usuários de uma transação, quando houver uma movimentação!

Como não tem notificação ainda, acredito que você ainda nem viu que eu fiz a compra e, neste momento, a operação está aguardando sua aprovação. kkk

Sobre a gratuidade, essa parece ser uma discussão muito interessante.

Hoje você já pode criar operações sem valor (R$0,00), porém a taxa de serviço (R$5,00) sempre é cobrada do quem irá comprar a oferta.

A princípio, a justificativa é que, apesar de o vendedor estar querendo doar a publicação, o trabalho de intermediação do TabStore ainda acontecerá da mesma forma e é um projeto que precisa se manter.

Mas eu não vejo isso como algo escrito em pedra, muito pelo contrário... isso já está aqui no roadmap, mas por enquanto estamos tentando deixar essa ideia um pouco mais "madura".

PS: Dá uma olhada lá de novo na sua operação de venda, pois ela agora precisa de uma ação sua! 🫶

3

O TabStore deixou de explicar as etapas e não pediu confirmações enquanto eu fui executando, eu fiz todos os passos e acabei finalizando ela.

Eu gostaria de entender como fica a questão do pagamento, saldo, e todo o resto.

1

Estava indo tudo muito bem, mas na etapa final ele não deveria ter deixado vc finalizar a operação antes da data final do período contratado (30 dias, neste caso).

Há algum bug nessa última etapa e vc conseguiu finalizar a operação antes da hora... :(

Como consequência, o dinheiro já está na sua subconta, disponível para vc fazer o saque, na tela de perfil. Ou seja, o TabStore acaba de falhar miseravelmente na sua primeira tentativa real de intermediar e fazer a custódia de uma operação 🫣.

Vou suspender as opções de "finalizar operação" e "saque", e hoje à noite eu faço a correção e o rollback da operação para o status anterior.

A ideia é que, depois de publicada a postagem, é preciso simplesmente esperar o tempo contratado antes de poder finalizar a operação e sacar o valor. Nesse meio tempo, o TabStore mantém o valor em custódia.

Também vou colocar aqui no board uma tarefa para adicionar mais explicações no decorrer do processo.

4

Mesmo assim, eu curti demais todo o processo.

E qual o foco do tempo contratado?
Sei que aqui no Tabnews, as publicações patrocinadas não expiram, então o TabStore recomenda que eu delete a publicação após esse tempo?

1

Feliz que ainda assim gostou! 😊

Acho que temos coisas pra melhorar, mas acredito que pode ficar bem legal! 🚀

Sobre a questão do tempo delimitado, ainda há muitos "achismos" envolvidos, mas basicamente, apesar de o TabNews não expirar hoje, acredito que isso é insustentável e até prejudicial para o próprio ecossistema de postagens patrocinadas do TabNews. ⚠️

Eu acredito que hoje é assim apenas por simplificação (tipo um MVP). Acredito que tudo relacionado às moedas e às publicações patrocinadas ainda está em "fase de construção" dentro do TabNews e, em algum momento, as coisas vão evoluir.

Por acreditar ser insustentável, eu acredito que em algum momento o TabNews caminhará para expirar as postagens patrocinadas, o que vai melhorar esse "mercado" e, consequentemente, melhorar para o TabStore. rsrs 😅

Indo nessa linha, o TabStore já trabalha com tempos delimitados, porque assim os anúncios tendem a desaparecer e abrir espaço para novos anúncios e, consequentemente, para mais vendas. 📈

Por isso, é altamente recomendado que, após o período contratado, o anúncio seja excluído. Inclusive, temos em nosso board uma tarefa onde estamos analisando possibilidades para forçar a exclusão após o tempo contratado. 😇

4

Vai ter alguma regulação de valores?
Tem pessoas oferecendo 30 dias por R50,00 e outro por R40,00. Se eu entrar oferecendo por R$10,00 por exemplo?

Seria interessante ter um valor mínimo para não desvalorizar e ter como escolher em qual conta publicar levando em consideração alguns aspectos do usuário como quantidade de posts, comentários e etc.

2

A princípio, não consegui me convencer de que uma limitação dos preços seria vantajosa pro projeto ou pros usuários. 🤔

Acho que o preço pode realmente variar muito a depender de:

  • Quem está vendendo?
  • Qual sua frequência de postagens?
  • Que tipo de assunto ele normalmente aborda?
  • Quanto valor ele entrega pra comunidade?
  • Como a comunidade do TabNews enxerga sua autoridade?

Não acho que uma publicação feita pelo "alexolidev" tenha o mesmo valor de uma postagem feita pelo "filipedeschamps".

Da mesma forma, não acho q faz sentido que custe o mesmo preço: uma postagem de alguém que posta frequentemente e uma postagem de alguém que raramente posta algo.

No meu entendimento, a precificação é algo bem dinâmica e subjetiva, e não vejo muito sentido em tentar limitar. Se o projeto crescer, temos planos pra oferecer informações analíticas, pra fazer sugestões de preço das ofertas... mas por enquanto, vamos manter as coisas simples. 🧘

Neste sentido, você deve ter total liberdade pra oferecer o preço que quiser, inclusive você pode cobrar ZERO reais, cenário que eu acho q pode ser usado por quem quer apoiar algum projeto apenas divulgando-o. 💬

2

Depois que vi o post abri o site novamente. Minha conta ainda está logada. Quando aperto em "meu perfil" me aparece o seguinte erro no console.

An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error

Digest: 2857743245

Depois que eu tentei ir até alguma outra rota, pediu para fazer login novamente. Seria esse o comportamente esperado para a rota do perfil também?

1

Então... uma parte sim e a outra não! rsrs

A princípio, a sessão não expira sozinha mesmo, mas excepcionalmente nós precisamos fazer uma alteração na sessão, por isso forçamos o logout de todo mundo, para garantir que todo mundo ficaria atualizado e sem erros.

Então, essa parte que eu descrevi era esperada. 😇

Já essa mensagem de erro aí, não... essa mensagem é completamente inesperada. Se ela aconteceu só na sessão expirada, acho que é compreensível, mas se ela persistir na nova sessão, aí sim temos um problema a investigar. 🤔

2
1