This project manages competitions organized by the Moroccan Federation of Racing Pigeons, involving multiple breeders participating in three race types: speed, mid-distance, and long-distance.
The goal is to ensure competition integrity through an application that enforces strict rules and optimizes event management.
- Registration:
- Create an account with:
- Unique loft name
- Username & password
- GPS coordinates of the loft
- Create an account with:
- Pigeon Management:
- Add pigeons with:
- Unique ring number
- Gender, age, color, and image
- Add pigeons with:
- Competition Management:
- Define competitions with:
- Name, GPS coordinates of the release point
- Start date/time and expected distance
- Add participating pigeons via ring numbers
- Close competitions and trigger result calculation
- Define competitions with:
- Data Upload:
- Arrival times and pigeon ring numbers
- Results Viewing & Export:
- Generate PDF reports of competition results
- Data Collection: Record pigeon arrival times and ring numbers
- Distance Calculation: Using the Haversine formula to compute distances between GPS points
- Flight Time: Difference between release time and arrival time
- Speed Calculation:
- Speed = Distance / Flight Time
- Adjusted by a coefficient based on average distance of pigeons
- Ranking: Pigeons ranked by speed, fastest to slowest
- Point Allocation:
- Points based on ranking and admission percentage
- Total points of top 5 pigeons per loft for overall leaderboard
- Results per race include:
- Loft, Ring Number, Arrival Time, Distance, Speed, Points
- Automatic general ranking for viewing/export
- Backend: Spring Boot REST API
- Database: MongoDB
- Architecture: Layered application (Controller → Service → Repository)
- Data Validation: Ensures integrity of information
- Exception Handling: Centralized for consistent error management
- Unit Testing: Ensures code reliability
- Configuration: YAML-based configuration files
Use Docker to run MongoDB and Mongo Express:
- Launch Docker Compose:
docker-compose up -dBuilt with Spring Boot, providing RESTful services and web endpoints.
MongoDB, a flexible NoSQL database, storing all competition, pigeon, and breeder data.
Data is transferred via DTOs (Data Transfer Objects) to structure information between application layers.
Used for automatic mapping between DTOs and entities, improving code readability and reducing boilerplate.
Lombok Generates getters, setters, constructors, and other utility methods automatically.
The project uses Docker to facilitate the execution of MongoDB and Mongo Express, a web interface that makes it easy to interact with MongoDB.
Avant de démarrer l'application, assurez-vous d'avoir les éléments suivants installés :
- Java 11 + : Download JDK.
- Maven : Download Maven.
- Docker : for MongoDB and Mongo Express.
git clone https://github.com/erradaoumaimaa/PigeonSkyRace.gitcd PigeonSkyRacemvn clean installmvn spring-boot:runThe backend auto-seeds demo users at startup via DemoAccountsSeeder, so you can immediately test:
- Admin
- Email:
admin@pigeonskyrace.ma - Password:
admin123
- Email:
- Organizer
- Email:
organizer@pigeonskyrace.ma - Password:
organizer123
- Email:
- Breeder
- Email:
breeder@test.ma - Password:
breeder123
- Email:
Use these for full flow checks:
- Register (optional, new breeder account)
- Login with seeded account
- Verify role-based dashboard routing
Create a local .env from .env.example (or export directly in your shell) before running Docker + backend.