Pitch: Um Caixa Eletrônico Que Roda Na Web??
Um Caixa Eletrônico que roda na web?? Como assim??
Tá bom, talvez esse título tenha sido chamativo demais, mas o projeto é interessante, cola aí!
A ideia
A umas semanas atrás, durante a disciplina de POO da minha graduação, nos foi solicitado a produção de um projeto orientado a objetos. Dias depois, estava resolvendo umas pendências em um banco bem famoso no nosso país, e a situação é padrão, um caixa eletrônico com uma interface datada e nada intuitiva. Eis que minha mente pensa "-Humm, e se?". Juntando o útil ao agradável, dei início ao layout e codificação de um simulador de caixa eletrônico que fosse mais moderno e mais amigável ao público geral. Por ser um dev web, o projeto está se concentrando em uma API Rest com Node.js no backend e React.js no frontend. Como o projeto tinha que ser orientado a objetos, está uma mistira de typescript com OO.
Sou iniciante e o projeto ainda está em desenvolvimento, então aceito sugestões de funcionalidades ou tecnologias para utilizar.
Screenshots
Não consegui colocá-las aqui na postagem, mas podem ser vistas no Read.me lá no github.
Repositórios
Front-end: https://github.com/lehinfo-felix/return-bank
Algo que me chamou a atenção na API é o uso de class
no nome dos arquivos, User.class.ts
, por exemplo.
Não compreendi o uso dessa notação e para ser sincero, acredito que se seja desnecessário, pois não impacta em nada a leitura com a ausência desse class
.
Pontos que podem ser explorados no estudo
Diminuir boilerplate das classes
Notei que as entidades foram criadas para ser somente leitura, com todos os atributos privados. É possível reescrever com uma quantidade menor de código.
Original
class Transfer {
id
private _senderTransaction
private _receiver
private _cash
constructor(
id: string,
_senderTransaction: Transaction,
_receiver: User,
_cash: number,
) {
this.id = id
this._senderTransaction = _senderTransaction
this._receiver = _receiver
this._cash = _cash
}
public get senderTransaction(): Transaction {
return this._senderTransaction
}
public get receiver(): User {
return this._receiver
}
public get cash(): number {
return this._cash
}
}
Modificado
class Transfer {
id
readonly senderTransaction
readonly receiver
readonly cash
constructor(
id: string,
senderTransaction: Transaction,
receiver: User,
cash: number,
) {
this.id = id
this.senderTransaction = senderTransaction
this.receiver = receiver
this.cash = cash
}
}
Modificado V2
class Transfer {
constructor(
id: string,
readonly senderTransaction: Transaction,
readonly receiver: User,
readonly cash: number,
) {}
}
Documentação
Senti falta de uma documentação da API, para compreender quais ações são possíveis, o que é esperado de entrada e seus respectivos retornos.
Testes
É um ótimo projeto para realizar a implementação de testes, tanto unitários quanto de integração.
Compreensão da regra de negócio
Embora um sistema de saque e transferência pareça simples, há algo que precisa ser observado. Não é possível deletar ou alterar ações bancárias, isso faz parte do histórico. As transações deveriam seguir como lançamentos contábeis e caso a pessoa queria desfazer uma transação errada, ela deve realizar outra transação que anule a anterior.
Amigo, trabalho em um banco — não na área de TI, mas de atendimento ao público. Gostaria de esclarecer algumas coisas.
Sim, modernizar a interface dos ATMs é necessário. Mas é extremamente desafiador — muito, muito desafiador mesmo. E sempre que há qualquer alteração no layout o suporte sofre.
Antes de continuar falando especificamente da interface dos ATMs, gostaria de contar uma história. Uma vez o pessoal que desenvolve o app resolveu retirar os labels da BottomNavigationBar e deixar só os ícones. O suporte e a rede sofreram para atender os clientes. O que antes era "Toca em perfil" virou "Toca na carinha", "Toca na pessoinha", "Toca no bonequinho", etc — decisões erradas, apenas modernizar por modernizar.
Voltando aos ATMs — uma vez resolveram que a disposição dos menus deveriam ser personalizados de acordo com o usuário. Resultado: suporte e rede sofreram com a falta de padrão — foi um verdadeiro inferno para atender e entender os clientes e os funcionários do auto atendimento passaram a demorar o dobro do tempo para ajudar em tarefas simples/mecânicas.
E sim, também já testaram uma tela totalmente reformulada para touch (sem utilizar menus e aqueles botões físicos laterais), o que também foi desastroso para o suporte — sem contar que houve um êxodo de usuários desistindo de utilzar o ATM e procurando o atendimento presencial. De todas as "modernizações", esta foi a pior e a que a rede mais comemorou quando retiraram.
Enfim, existem sim iniciativas de modernização da interface dos ATMs dentro dos bancos, mas qualquer pequena alteração tem consequências em cascata e, sob diversos aspectos, a interface "arcaica" é, na prática, de simples entendimento para o usuário (intuitiva?), fácil de fornecer suporte e ágil para realização de tarefas mecânicas.
Bem legal mano, olhei o site e a api tá apontando pra um ip local. Recebi esse erro:
Mixed Content: The page at '' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint ''. This request has been blocked; the content must be served over HTTPS.
Mixed Content: The page at 'https://return-bank-web.vercel.app/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://192.168.0.41:3000/api/auth/login'. This request has been blocked; the content must be served over HTTPS.
JS puro já é 100% orientado a objetos! Não preciasa de typescript!
A ideia é bem legal, mas creio que não exista por algum motivo extra.
Quem sabe segurança! Mas não sei!