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.
šÆ VisĆ£o Geral do Projeto: O que me Propus a Construir
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.
š Principais Recursos:
-
PƔginas de Login e Registro: Os usuƔrios podem criar uma conta ou fazer login.
-
Aprovação do Administrador: O registro de usuÔrios requer a aprovação do administrador antes que eles possam votar.
-
Sistema de Votação: UsuÔrios cadastrados podem votar em enquetes ativas.
-
Painel de Administrador: O administrador pode criar e gerenciar enquetes, visualizar pedidos de usuƔrios e controlar quem pode votar.
š ļø Processo de Desenvolvimento: Como ConstruĆ a Plataforma
1. Configurando o Projeto
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.
2. Adicionando Aprovação do Administrador para Registros
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.
š§ Desafios com Aprovação de Administrador:
-
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.
ā Solução:
Eu configurei um simples sistema onde:
-
SolicitaƧƵes de registro foram armazenadas no localStorage sob uma chave especial (
accountRequests
). -
Quando o admin aprovou um usuƔrio, seus detalhes foram movidos para a lista
users
, concedendo-lhes acesso ao sistema de votação. -
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.
3. Criando e Gerenciando Pesquisas
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.
š Criando Enquetes:
-
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.
4. Tratamento de Votos e Resultados
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.
š³ļø Desafios de Votação:
-
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.
ā Solução:
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.
5. Exibindo Status de Registro do UsuƔrio
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.
š Desafios de Status:
- Manter Status do UsuĆ”rio: Fazer o rastreamento de cada pedido de registro e associĆ”-lo com o status correto foi difĆcil.
ā Solução:
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.
š Desafios Chave e Como Eu Solucionei
1. Gerenciar Pedidos de UsuƔrios e AprovaƧƵes de Administrador
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.
2. Tratando Enquetes Dinâmicas
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.
3. Armazenando Votos e Evitando Votos Duplicados
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.
š” O que Eu Aprendi
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.
š Melhorias Futuras
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
Em resumo š„
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! š