Better bracket logic
This commit is contained in:
+18
-33
@@ -7,39 +7,16 @@ from . import logic, models, schemas
|
||||
|
||||
|
||||
def _rebuild_structure(db: Session, t: models.Tournament):
|
||||
"""
|
||||
Nukes existing nodes/matches and regenerates them based on current teams.
|
||||
Used when teams are added/removed.
|
||||
"""
|
||||
t.matches = []
|
||||
for m in t.matches:
|
||||
db.delete(m)
|
||||
db.flush()
|
||||
|
||||
t.nodes = []
|
||||
db.flush()
|
||||
|
||||
node_data = logic.generate_bracket_nodes(t)
|
||||
for nd in node_data:
|
||||
db.add(models.BracketNode(**nd, tournament_id=t.id))
|
||||
|
||||
logic.generate_bracket(db, t)
|
||||
db.flush()
|
||||
db.refresh(t)
|
||||
|
||||
logic.initialize_seeding(db, t)
|
||||
logic.update_schedule_times(db, t)
|
||||
|
||||
|
||||
def get_tournaments(db: Session):
|
||||
return db.query(models.Tournament).all()
|
||||
|
||||
|
||||
def get_tournament(db: Session, tournament_id: str):
|
||||
return (
|
||||
db.query(models.Tournament)
|
||||
.filter(models.Tournament.id == tournament_id)
|
||||
.first()
|
||||
)
|
||||
|
||||
|
||||
def create_tournament(db: Session, data: schemas.TournamentCreate):
|
||||
t_id = str(uuid4())[:8]
|
||||
new_t = models.Tournament(
|
||||
@@ -56,19 +33,27 @@ def create_tournament(db: Session, data: schemas.TournamentCreate):
|
||||
db.add(new_t)
|
||||
db.commit()
|
||||
|
||||
node_data = logic.generate_bracket_nodes(new_t)
|
||||
for nd in node_data:
|
||||
db.add(models.BracketNode(**nd, tournament_id=t_id))
|
||||
db.commit()
|
||||
db.refresh(new_t)
|
||||
|
||||
logic.initialize_seeding(db, new_t)
|
||||
# Generate Bracket
|
||||
logic.generate_bracket(db, new_t)
|
||||
logic.update_schedule_times(db, new_t)
|
||||
|
||||
db.commit()
|
||||
db.refresh(new_t)
|
||||
return new_t
|
||||
|
||||
|
||||
def get_tournaments(db: Session):
|
||||
return db.query(models.Tournament).all()
|
||||
|
||||
|
||||
def get_tournament(db: Session, tournament_id: str):
|
||||
return (
|
||||
db.query(models.Tournament)
|
||||
.filter(models.Tournament.id == tournament_id)
|
||||
.first()
|
||||
)
|
||||
|
||||
|
||||
def delete_tournament(db: Session, tournament_id: str) -> bool:
|
||||
t = get_tournament(db, tournament_id)
|
||||
if not t:
|
||||
|
||||
Reference in New Issue
Block a user