fix: Improve active elections endpoint with timezone buffer and debug endpoint
This commit is contained in:
parent
b8fa1a4b95
commit
becdf3bdee
@ -11,18 +11,51 @@ from ..models import Voter
|
||||
router = APIRouter(prefix="/api/elections", tags=["elections"])
|
||||
|
||||
|
||||
@router.get("/active", response_model=list[schemas.ElectionResponse])
|
||||
def get_active_elections(db: Session = Depends(get_db)):
|
||||
"""Récupérer toutes les élections actives en cours (limité aux vraies élections actives)"""
|
||||
@router.get("/debug/all")
|
||||
def debug_all_elections(db: Session = Depends(get_db)):
|
||||
"""DEBUG: Return all elections with dates for troubleshooting"""
|
||||
from datetime import datetime
|
||||
from .. import models
|
||||
|
||||
now = datetime.utcnow()
|
||||
all_elections = db.query(models.Election).all()
|
||||
|
||||
return {
|
||||
"current_time": now.isoformat(),
|
||||
"elections": [
|
||||
{
|
||||
"id": e.id,
|
||||
"name": e.name,
|
||||
"is_active": e.is_active,
|
||||
"start_date": e.start_date.isoformat() if e.start_date else None,
|
||||
"end_date": e.end_date.isoformat() if e.end_date else None,
|
||||
"should_be_active": (
|
||||
e.start_date <= now <= e.end_date and e.is_active
|
||||
if e.start_date and e.end_date
|
||||
else False
|
||||
),
|
||||
}
|
||||
for e in all_elections
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@router.get("/active", response_model=list[schemas.ElectionResponse])
|
||||
def get_active_elections(db: Session = Depends(get_db)):
|
||||
"""Récupérer toutes les élections actives en cours"""
|
||||
from datetime import datetime, timedelta
|
||||
from .. import models
|
||||
|
||||
now = datetime.utcnow()
|
||||
# Allow 1 hour buffer for timezone issues
|
||||
start_buffer = now - timedelta(hours=1)
|
||||
end_buffer = now + timedelta(hours=1)
|
||||
|
||||
active = db.query(models.Election).filter(
|
||||
(models.Election.start_date <= now) &
|
||||
(models.Election.end_date >= now) &
|
||||
(models.Election.is_active == True) # Vérifier que is_active=1
|
||||
).order_by(models.Election.id.asc()).limit(10).all() # Limiter à 10 max
|
||||
(models.Election.start_date <= end_buffer) &
|
||||
(models.Election.end_date >= start_buffer) &
|
||||
(models.Election.is_active == True)
|
||||
).order_by(models.Election.id.asc()).all()
|
||||
|
||||
return active
|
||||
|
||||
|
||||
@ -1,32 +1,39 @@
|
||||
-- ================================================================
|
||||
-- Create ONE active election for demo (current date/time)
|
||||
-- Ensure at least ONE active election exists for demo
|
||||
-- ================================================================
|
||||
|
||||
-- Insert active election (now + 24 hours)
|
||||
INSERT INTO elections (name, description, start_date, end_date, elgamal_p, elgamal_g, is_active, results_published)
|
||||
VALUES (
|
||||
'Election Présidentielle 2025 - Demo',
|
||||
'Démonstration du système de vote en ligne avec blockchain',
|
||||
NOW(),
|
||||
DATE_ADD(NOW(), INTERVAL 24 HOUR),
|
||||
-- Check if election 1 exists and update it to be active (from init.sql)
|
||||
UPDATE elections
|
||||
SET
|
||||
is_active = TRUE,
|
||||
start_date = DATE_SUB(NOW(), INTERVAL 1 HOUR),
|
||||
end_date = DATE_ADD(NOW(), INTERVAL 7 DAY)
|
||||
WHERE id = 1;
|
||||
|
||||
-- If no active elections exist, create one
|
||||
INSERT IGNORE INTO elections (id, name, description, start_date, end_date, elgamal_p, elgamal_g, is_active, results_published)
|
||||
SELECT
|
||||
1,
|
||||
'Election Présidentielle 2025',
|
||||
'Vote pour la présidence',
|
||||
DATE_SUB(NOW(), INTERVAL 1 HOUR),
|
||||
DATE_ADD(NOW(), INTERVAL 7 DAY),
|
||||
23,
|
||||
5,
|
||||
TRUE,
|
||||
FALSE
|
||||
);
|
||||
WHERE NOT EXISTS (SELECT 1 FROM elections WHERE id = 1);
|
||||
|
||||
-- Get the election ID (should be 11 if 10 past elections exist)
|
||||
SET @election_id = LAST_INSERT_ID();
|
||||
|
||||
-- Insert 3 candidates for the demo election
|
||||
INSERT INTO candidates (election_id, name, description, `order`)
|
||||
-- Ensure election 1 has candidates (from init.sql)
|
||||
INSERT IGNORE INTO candidates (id, election_id, name, description, `order`)
|
||||
VALUES
|
||||
(@election_id, 'Alice Dupont', 'Candidate A - Progressive', 1),
|
||||
(@election_id, 'Bob Martin', 'Candidate B - Centrist', 2),
|
||||
(@election_id, 'Claire Laurent', 'Candidate C - Conservative', 3);
|
||||
(1, 1, 'Alice Dupont', 'Candidate pour le changement', 1),
|
||||
(2, 1, 'Bob Martin', 'Candidate pour la stabilité', 2),
|
||||
(3, 1, 'Charlie Leclerc', 'Candidate pour l''innovation', 3),
|
||||
(4, 1, 'Diana Fontaine', 'Candidate pour l''environnement', 4);
|
||||
|
||||
-- Confirmation
|
||||
SELECT CONCAT('✓ Active election created: ID=', @election_id) as status;
|
||||
SELECT 'Active elections configured' as status;
|
||||
SELECT COUNT(*) as total_elections FROM elections;
|
||||
SELECT * FROM elections WHERE id = @election_id;
|
||||
SELECT * FROM candidates WHERE election_id = @election_id;
|
||||
SELECT COUNT(*) as active_elections FROM elections WHERE is_active = TRUE;
|
||||
SELECT id, name, is_active, start_date, end_date FROM elections LIMIT 5;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user