Hoje eu quero compartilhar com vocês um projeto de estudo incrível que eu desenvolvi: um sistema de rifa digital, que permite que você crie e gerencie suas próprias rifas online.
Com esse sistema, você pode escolher sua forma de pagamento preferida, criar rifas personalizadas, definir o ganhador e ter uma página exclusiva para vender seus bilhetes.
É muito fácil, rápido e divertido! Você pode usar esse sistema para arrecadar dinheiro para uma causa nobre, para realizar um sonho, para estudar o funcionamento do projeto ou simplesmente para se divertir com seus amigos. O sistema é seguro, confiável e transparente. Você pode acompanhar todas as informações das suas rifas em tempo real e receber o pagamento diretamente na sua conta.
Comprando bilhetes | Definindo bilhete premiado |
Para rodar esse projeto, você vai precisar adicionar as seguintes variáveis de ambiente no seu .env
# Prazo de pagamento
# Caso o prazo seja atingido e o pagamento não seja feito,
# o pedido será removido e os números liberados
RIFA_EXPIRE_AT_MINUTES=60
# Access Token do MercadoPago para gerenciar seu pagamento
MERCADOPAGO_ACCESS_TOKEN=<string>
Clone o projeto
git clone https://github.com/valdeirpsr/psr-rifas.git
Entre no diretório do projeto
cd psr-rifas
Instale as dependências do PHP
composer require
Crie a estrutura do banco de dados
php artisan migrate
# Com dados fakes (opcional)
php artisan migrate --seed
Instale as dependências do javascript
pnpm i
Inicie o servidor do PHP
php artisan serve
Inicie vite
pnpm dev
Clone o projeto
git clone https://github.com/valdeirpsr/psr-rifas.git
Entre no diretório do projeto
cd psr-rifas
Execute o comando abaixo no seu terminal
docker run --rm --volume "$PWD:/app" composer require --ignore-platform-reqs;
docker compose up -d;
Caso seja necessário, acesse o container laravel.test
e execute o vite
docker-compose exec laravel.test sh -c "pnpm dev"
Para rodar os testes do JavaScript, execute o seguinte comando
npx vitest
Para rodar os testes do Laravel, execute o seguinte comando
php artisan test
Front-end: Vue 3, Vite, Typescript, InertiaJs, TailwindCSS
Back-end: PHP 8.2, Laravel 10.10.x
-
Utilizar Repositories para realizar busca através dos Models
-
Integrar o sistema com o mecanismo de busca Meilisearch
-
Criar uma página para visualização das informações de rifa no painel de controle: número de bilhetes vendidos, gráfico com vendas por data, ranking dos compradores. Nota 1
-
Adicionar suporte para desconto por quantidade
-
Adicionar agendamento para publicação das rifas
-
Adicionar outras formas de pagamento
-
Adicionar mecanismo de análise de código PHP
Durante a construção deste projeto, aprendi muito sobre a estrutura e o funcionamento do Laravel, que é um framework PHP poderoso e flexível para o desenvolvimento web. Entendi melhor alguns padrões que podem ser usados no Laravel e o funcionamento de alguns deles.
Além disso, aprofundei meus conhecimentos sobre testes no Laravel, explorando diversas abordagens para garantir a qualidade do código e a estabilidade do projeto. Tanto testes de integração quanto testes diretamente no models. Ainda não testei o PHPest, mas não fará oportunidade para conhecê-lo e usá-lo.
Um dos maiores desafios que enfrentei foi entender completamente o funcionamento do Eloquent ORM, mas foi resolvido com o fácil suporte em queries complexas.
Outro desafio que encontrei foi a integração direta do Laravel com o Vue.js. No início, cogitei transformar o Laravel em um sistema de API e usar requisições no Vue 3 para exibir os dados para o usuário. No entanto, fui capaz de superar esse obstáculo com o uso do pacote Inertia.js.
Ademais, o Filament me ajudou a criar toda estrutura do painel de controle. Foi uma oportunidade de aprender como integrar soluções externas ao projeto, aproveitando suas funcionalidades para economizar tempo e esforço no desenvolvimento.
No geral, o processo de construção deste projeto foi muito enriquecedor. Conheci algumas limitações e pude aprender a superá-las. Ao final, sinto que ganhei um conhecimento valioso sobre o ecossistema Laravel e sua integração com tecnologias.