šŸ” Construindo uma plataforma online de votação: desafios, soluƧƵes e aprendizados chave

Ei, pessoal! šŸ‘‹ Recentemente, trabalhei em uma plataforma de votação online simples e segura online voting platform para meu mini-projeto da faculdade, e queria compartilhar como fiz isso. Desde gerenciar registros de usuĆ”rios atĆ© configurar um sistema de aprovação administrativa, esse projeto me ensinou muito sobre a construção de aplicaƧƵes web funcionais usando JavaScript e localStorage. Neste post do blog, vou guiĆ”-lo atravĆ©s do desenvolvimento da plataforma, os desafios que encontrei e como os superar.

O objetivo era criar uma plataforma de votação simples que pudesse lidar com:

  • Registros de UsuĆ”rios: Permitir que os eleitores se cadastrem com seus dados.

  • Votação: Permitir que os usuĆ”rios votem de forma segura em enquetes.

  • Controle Administrativo: Habilitar um administrador para gerenciar as enquetes, aprovar/rejeitar registros de usuĆ”rios e supervisionar o processo de votação.

Inicialmente, considerei usar um backend completo com MongoDB, mas queria manter as coisas simples, então usei localStorage para gerenciar os dados dessa versão inicial do projeto.

  1. PƔginas de Login e Registro: Os usuƔrios podem criar uma conta ou fazer login.

  2. Aprovação do Administrador: O registro de usuÔrios requer a aprovação do administrador antes que eles possam votar.

  3. Sistema de Votação: UsuÔrios cadastrados podem votar em enquetes ativas.

  4. Painel de Administrador: O administrador pode criar e gerenciar enquetes, visualizar pedidos de usuƔrios e controlar quem pode votar.

Eu comecei construindo um simples sistema de login e registro usando HTML, CSS, JavaScript e localStorage para gerenciar dados de usuÔrio. A conta de administrador estava hardcoded, mas usuÔrios podiam se registrar fornecendo seu nome completo, ID de eleitor e senha. No entanto, rapidamente percebi que permitir que qualquer pessoa se registrar e votar sem a aprovação do administrador não era a melhor ideia.

Para tornar a plataforma mais segura, eu Introduzi um sistema de aprovação de administrador. Sempre que um usuĆ”rio se registra, sua solicitação Ć© armazenada no localStorage e marcada como “pendente”. O administrador entĆ£o pode revisar e aprovĆ”-la ou rejeitĆ”-la.

  • Rastreando SolicitaƧƵes Pendentes: Eu precisava ter certeza de que usuĆ”rios aguardando aprovação nĆ£o seriam capazes de votar ainda.

  • Aprovando UsuĆ”rios: Assim que aprovado, os dados do usuĆ”rio precisavam ser movidos da lista “pendente” para a lista “usuĆ”rios registrados” no localStorage.

Eu configurei um simples sistema onde:

  1. SolicitaƧƵes de registro foram armazenadas no localStorage sob uma chave especial (accountRequests).

  2. Quando o admin aprovou um usuÔrio, seus detalhes foram movidos para a lista users, concedendo-lhes acesso ao sistema de votação.

  3. Se rejeitado, a solicitação permaneceu no localStorage para referência futura, para que o admin pudesse manter o registro de todas as decisões.

A pÔgina de admin permitia a criação de enquetes dinâmicas, onde o admin podia adicionar múltiplas opções de voto. Os dados da enquete eram armazenados no localStorage e apresentados aos usuÔrios assim que eles se logavam e eram aprovados.

  • Enquetes sĆ£o criadas pelo admin com um formulĆ”rio que permite opƧƵes dinĆ¢micas. O formulĆ”rio permite que o admin adicione quantas opƧƵes forem necessĆ”rias para cada enquete.

  • UsuĆ”rios podem entĆ£o visualizar essas enquetes e votar.

O sistema de votação foi projetado para ser simples: assim que os usuÔrios se logavam e fossem aprovados pelo admin, eles podiam ver as enquetes ativas e votar.

  • Evitar Votos Duplicados: Eu precisava garantir que os usuĆ”rios só podiam votar uma vez por enquete.

  • Armazenando Resultados: Os votos eram salvas no localStorage, vinculadas Ć  usuĆ”rio e enquete especĆ­ficos.

Cada voto estava ligado ao ID do usuƔrio e Ơ enquete especƭfica. Isso garantiu que cada usuƔrio pudesse votar apenas uma vez, e os resultados foram armazenados com seguranƧa no localStorage.

Eu quis garantir que os usuĆ”rios soubessem se o seu registro havia sido aprovado, rejeitado ou ainda pendente. Para isso, eu adicionei uma pĆ”gina ā€œVerificar Statusā€ onde os usuĆ”rios podiam entrar com o ID de registro para verificar seu status de aprovação.

  • Manter Status do UsuĆ”rio: Fazer o rastreamento de cada pedido de registro e associĆ”-lo com o status correto foi difĆ­cil.

Cada pedido de registro foi atribuído um ID único, e os usuÔrios podiam entrar com este ID para ver se seu pedido foi aprovado, rejeitado ou ainda pendente. Esta pÔgina de status simples melhorou a experiência do usuÔrio, dando feedback em tempo real sobre seu pedido.

Inicialmente, eu não sabia como estruturar o sistema de aprovação. Depois de algumas tentativas e erros, decidi usar o localStorage para gerenciar o processo de aprovação de usuÔrios. Isso deixou o sistema simples e permitiu atualizações rÔpidas pelo admin.

Permitir que o admin adicione opƧƵes de voto dinamicamente foi desafiante mas recompensador. Eu implementei isso permitindo que o admin crie enquetes com quantas opƧƵes forem necessƔrias, que foram salvas como arrays no localStorage.

Umas partes complicadas foi garantir que usuÔrios só podiam votar uma vez por enquete. Eu resolvi isso ligando votos à ID do usuÔrio e à ID da enquete, garantindo que cada usuÔrio só pudesse votar uma vez.

Construir esta plataforma de votação me ensinou muito sobre o tratamento de dados do usuÔrio, criando fluxos de aprovação e gerenciando conteúdo dinâmico com localStorage. Aqui estão algumas das lições chave:

  • Gerenciamento de Contas de UsuĆ”rio: Eu aprendi a gerenciar contas de usuĆ”rio, incluindo o tratamento de registros pendentes e aprovaƧƵes.

  • localStorage para PersistĆŖncia de Dados: Este foi o primeiro projeto em que usei extensivamente o localStorage e foi uma grande experiĆŖncia de aprendizado. Ele funciona bem para pequenos projetos, mas pode precisar ser substituĆ­do por um banco de dados como MongoDB para escalabilidade.

  • Construindo um Painel de Administração: Criar uma pĆ”gina de admin para gerenciar usuĆ”rios e enquetes deu-me visĆ£o sobre as complexidades do controle administrativo em um sistema.

Enquanto a versão atual do platforma funciona ótimo para votações de pequena escala, estou considerando migrÔ-lo para uma solução mais robusta no futuro:

  • Integração com MongoDB: Para projetos maiores, migrar para MongoDB ofereceria melhor persistĆŖncia de dados e escalabilidade.

  • Implementação de Backend: Usar Express.js para o backend permitiria melhor manuseio de dados e gerenciamento mais fĆ”cil de contas de usuĆ”rio e enquetes.

Para agora, estou satisfeito com a maneira como o platforma turnou. Ɖ simples, seguro e funcional para o escopo do projeto.


Conheça a plataforma em funcionamento: Plataforma de Votação Online
Explore o código no GitHub: Repositório do Sistema de Votação


A construção deste plataforma de votação online foi uma experiência de aprendizado fantÔstica. De gerenciar o cadastro de usuÔrios e aprovações de administradores à criação de enquetes dinâmicas e garantindo a segurança dos dados, cada desafio ajudou-me a crescer como desenvolvedor. Estou animado em aplicar essas aprendizados em projetos futuros, e espero que este post inspire você a construir algo semelhante!

Obrigado por ler, e sinta-se livre para compartilhar suas opiniƵes ou perguntas abaixo! šŸ˜„

Source:
https://arkadiptakundu.hashnode.dev/building-an-online-voting-platform-challenges-solutions-and-key-learnings