added free agents
This commit is contained in:
@@ -282,6 +282,21 @@ func UploadMatchLogs(
|
||||
}
|
||||
}
|
||||
|
||||
// Check each player stat: if the player is a registered free agent, mark them
|
||||
for _, ps := range playerStats {
|
||||
if ps.PlayerID == nil {
|
||||
continue
|
||||
}
|
||||
// Check if the player is a registered free agent
|
||||
isFA, err := db.IsFreeAgentRegistered(ctx, tx, fixture.SeasonID, fixture.LeagueID, *ps.PlayerID)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "db.IsFreeAgentRegistered")
|
||||
}
|
||||
if isFA {
|
||||
ps.IsFreeAgent = true
|
||||
}
|
||||
}
|
||||
|
||||
// Insert result and stats
|
||||
result, err = db.InsertFixtureResult(ctx, tx, result, playerStats, db.NewAuditFromRequest(r))
|
||||
if err != nil {
|
||||
@@ -294,7 +309,6 @@ func UploadMatchLogs(
|
||||
}
|
||||
|
||||
_ = unmappedPlayers // stored for review page redirect
|
||||
notify.Success(s, w, r, "Logs Uploaded", "Match logs have been processed. Please review the result.", nil)
|
||||
respond.HXRedirect(w, "/fixtures/%d/results/review", fixtureID)
|
||||
})
|
||||
}
|
||||
@@ -314,6 +328,7 @@ func ReviewMatchResult(
|
||||
var fixture *db.Fixture
|
||||
var result *db.FixtureResult
|
||||
var unmappedPlayers []string
|
||||
var faWarnings []seasonsview.FreeAgentWarning
|
||||
|
||||
if ok := conn.WithReadTx(s, w, r, func(ctx context.Context, tx bun.Tx) (bool, error) {
|
||||
var err error
|
||||
@@ -335,11 +350,52 @@ func ReviewMatchResult(
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// Build unmapped players list from stats
|
||||
// Get nominated free agents for this fixture
|
||||
nominatedFAs, err := db.GetNominatedFreeAgents(ctx, tx, fixtureID)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "db.GetNominatedFreeAgents")
|
||||
}
|
||||
// Map player ID to the side ("home"/"away") that nominated them
|
||||
nominatedFASide := map[int]string{}
|
||||
for _, nfa := range nominatedFAs {
|
||||
if nfa.TeamID == fixture.HomeTeamID {
|
||||
nominatedFASide[nfa.PlayerID] = "home"
|
||||
} else {
|
||||
nominatedFASide[nfa.PlayerID] = "away"
|
||||
}
|
||||
}
|
||||
|
||||
// Helper to resolve side to team name
|
||||
teamNameForSide := func(side string) string {
|
||||
if side == "home" {
|
||||
return fixture.HomeTeam.Name
|
||||
}
|
||||
return fixture.AwayTeam.Name
|
||||
}
|
||||
|
||||
// Build unmapped players and free agent warnings from stats
|
||||
seen := map[int]bool{}
|
||||
for _, ps := range result.PlayerStats {
|
||||
if ps.PlayerID == nil && ps.PeriodNum == 3 {
|
||||
if ps.PeriodNum != 3 {
|
||||
continue
|
||||
}
|
||||
if ps.PlayerID == nil {
|
||||
unmappedPlayers = append(unmappedPlayers,
|
||||
ps.PlayerGameUserID+" ("+ps.PlayerUsername+")")
|
||||
} else if ps.IsFreeAgent && !seen[*ps.PlayerID] {
|
||||
seen[*ps.PlayerID] = true
|
||||
nominatedSide, wasNominated := nominatedFASide[*ps.PlayerID]
|
||||
if !wasNominated {
|
||||
faWarnings = append(faWarnings, seasonsview.FreeAgentWarning{
|
||||
Name: ps.PlayerUsername,
|
||||
Reason: "not nominated for this fixture",
|
||||
})
|
||||
} else if nominatedSide != ps.Team {
|
||||
faWarnings = append(faWarnings, seasonsview.FreeAgentWarning{
|
||||
Name: ps.PlayerUsername,
|
||||
Reason: "nominated by " + teamNameForSide(nominatedSide) + ", but played for " + teamNameForSide(ps.Team),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -348,7 +404,7 @@ func ReviewMatchResult(
|
||||
return
|
||||
}
|
||||
|
||||
renderSafely(seasonsview.FixtureReviewResultPage(fixture, result, unmappedPlayers), s, r, w)
|
||||
renderSafely(seasonsview.FixtureReviewResultPage(fixture, result, unmappedPlayers, faWarnings), s, r, w)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user