6.4 KiB
6.4 KiB
Troubleshooting Guide
Issue: 404 on /api/elections/active
Diagnosis
First, check what's actually in the database:
# Check all elections
curl http://localhost:8000/api/elections/debug/all
# Example response:
{
"current_time": "2025-11-07T03:45:00.123456",
"elections": [
{
"id": 1,
"name": "Election Présidentielle 2025",
"is_active": true,
"start_date": "2025-11-06T02:45:00",
"end_date": "2025-11-14T02:45:00",
"should_be_active": true ← Should be TRUE
},
{
"id": 2,
"name": "Présidentielle 2020",
"is_active": false,
"start_date": "2020-04-10T08:00:00",
"end_date": "2020-04-10T20:00:00",
"should_be_active": false
}
]
}
Solution
If no elections show should_be_active: true, follow these steps:
Option 1: Fresh Database (Recommended)
# Stop containers
docker-compose down
# DELETE the database volume
docker-compose down -v
# Start fresh (will reinitialize)
docker-compose up -d
# Wait 30 seconds for database to initialize
sleep 30
# Verify elections were created
curl http://localhost:8000/api/elections/debug/all
# Now test active elections
curl http://localhost:8000/api/elections/active
Option 2: Manually Fix via Adminer
-
Go to http://localhost:8081
-
Login:
- Server:
mariadb - User:
evoting_user - Password:
evoting_pass123 - Database:
evoting_db
- Server:
-
Run SQL in Adminer:
-- Update election 1 to be active UPDATE elections SET is_active = 1, start_date = DATE_SUB(NOW(), INTERVAL 1 HOUR), end_date = DATE_ADD(NOW(), INTERVAL 7 DAY) WHERE id = 1; -- Verify it worked SELECT id, name, is_active, start_date, end_date FROM elections LIMIT 5; -
Test API:
curl http://localhost:8000/api/elections/active
Option 3: Direct Database Command
# Connect to MariaDB in Docker
docker-compose exec mariadb mariadb -u evoting_user -pevoting_pass123 evoting_db
# Run this SQL:
UPDATE elections
SET
is_active = 1,
start_date = DATE_SUB(NOW(), INTERVAL 1 HOUR),
end_date = DATE_ADD(NOW(), INTERVAL 7 DAY)
WHERE id = 1;
# Exit (Ctrl+D)
# Test:
curl http://localhost:8000/api/elections/active
Root Cause
The 404 occurs when:
- No elections exist in database
- All elections have
is_active = FALSE - All elections have dates in the past (
end_date < NOW()) - All elections have dates in the future (
start_date > NOW())
The database initialization scripts should handle this, but if they don't:
docker/init.sqlcreates 1 active election (ID 1)docker/populate_past_elections.sqlcreates 10 past elections (IDs 2-11)docker/create_active_election.sqlensures election 1 is always active
If still getting 404 after these scripts run, use the manual fixes above.
Issue: Empty Elections List on Frontend
If /api/elections/active returns [] (empty list):
Check 1: Database has active elections
curl http://localhost:8000/api/elections/debug/all
Check 2: Timezone issues
- Docker database might be in different timezone
- The endpoint now includes 1-hour buffer on both sides to handle timezone skew
- If still failing, the election dates are probably way off
Check 3: Frontend not fetching
Open browser console (F12):
# Should show the fetch request
GET http://localhost:3000/api/elections/active
If it's calling the frontend API instead of backend:
- Frontend routes requests through its own API route
- Check
frontend/lib/api.tsfor correct backend URL - Verify
NEXT_PUBLIC_API_URLenvironment variable
Issue: Vote Submission Fails
Error: "Impossible de charger les clés publiques"
Election doesn't have ElGamal keys. Fix:
UPDATE elections
SET elgamal_p = 23, elgamal_g = 5
WHERE elgamal_p IS NULL OR elgamal_g IS NULL;
Error: "Voter has already voted in this election"
Voter already voted. To reset (for testing):
DELETE FROM votes WHERE voter_id = 1; -- Replace 1 with voter ID
UPDATE voters SET has_voted = FALSE WHERE id = 1;
Error: "Candidate not found"
Candidate doesn't exist for election. Check:
SELECT c.id, c.name, c.election_id
FROM candidates c
WHERE c.election_id = 1; -- Replace 1 with election ID
Issue: Blockchain Not Showing Votes
Check: Votes recorded in database
SELECT COUNT(*) FROM votes;
SELECT * FROM votes LIMIT 5;
Check: Blockchain endpoint accessible
curl http://localhost:8000/api/votes/blockchain?election_id=1
If no blocks:
- Votes might be in database but blockchain not synced
- Restart backend to reinitialize blockchain
docker-compose restart backend
Issue: Docker Container Won't Start
Check logs
docker-compose logs mariadb
docker-compose logs backend
docker-compose logs frontend
Database won't start
# Check if port 3306 is already in use
lsof -i :3306
# Or check Docker volume issue
docker volume ls
docker volume rm evoting_data
docker-compose up -d
Backend won't connect to database
Wait longer for MariaDB to start:
docker-compose up mariadb
# Wait until you see: "ready for connections"
# Then in another terminal:
docker-compose up backend frontend
Debugging Checklist
- Database initialized?
curl http://localhost:8000/api/elections/debug/all - Active elections exist? Check response shows
"should_be_active": true - Backend running?
docker-compose psshowsbackendhealthy - Frontend built?
npm run buildsucceeded with 0 errors - Elections endpoint returns data?
curl http://localhost:8000/api/elections/active - Frontend can fetch? Check browser console for network requests
- Votes can be submitted? Test via voting interface
- Blockchain records votes? Check
/dashboard/blockchain
Quick Reset
If everything is broken:
# Stop everything
docker-compose down
# Remove all data
docker-compose down -v
# Fresh start
docker-compose up -d
# Wait for initialization
sleep 30
# Check status
curl http://localhost:8000/api/elections/debug/all
curl http://localhost:8000/api/elections/active
# Should be good now!
Contact Info
For issues not covered here:
- Check Docker logs:
docker-compose logs -f - Check browser console: F12 in Chrome/Firefox
- Check network requests: DevTools Network tab
- Test API directly:
curlor Postman