From 0e19295449f2797c924b4007f44e9024ab978d1e Mon Sep 17 00:00:00 2001 From: Rick Mason Date: Sat, 21 Oct 2023 20:49:46 +0100 Subject: [PATCH] Ensure that soft deleted players are not returned in queries #555 --- .../StoolballIntegrationTests.dacpac | Bin 29082 -> 30123 bytes ...axResultsDataSourceIntegrationTests.dacpac | Bin 29105 -> 30146 bytes Stoolball.Data.SqlServer/SqlConstants.cs | 10 ++++++ .../SqlServerMatchDataSource.cs | 30 +++++++---------- .../SqlServerMatchRepository.cs | 10 +++--- .../SqlServerPlayerDataSource.cs | 13 ++++---- .../SqlServerPlayerRepository.cs | 31 ++++++++++-------- .../SqlServerStatisticsRepository.cs | 16 ++++----- .../DeleteObsoletePlayers.cs | 1 + .../vw_Stoolball_PlayerIdentity.sql | 13 ++++++++ .../Stoolball.Data.UmbracoMigrations.csproj | 2 ++ 11 files changed, 76 insertions(+), 50 deletions(-) create mode 100644 Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/vw_Stoolball_PlayerIdentity.sql diff --git a/Stoolball.Data.SqlServer.IntegrationTests/StoolballIntegrationTests.dacpac b/Stoolball.Data.SqlServer.IntegrationTests/StoolballIntegrationTests.dacpac index c2c8e25f4515f735415db3ce9e296271221a2f46..25d69b08c11fcdb1618f175dbd54a79b72891ce9 100644 GIT binary patch delta 27914 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 S|GvEKlDwP=;eNRN8~R@{t@0uO delta 26900 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 E0!N~_`~Uy| diff --git a/Stoolball.Data.SqlServer.IntegrationTests/StoolballStatisticsMaxResultsDataSourceIntegrationTests.dacpac b/Stoolball.Data.SqlServer.IntegrationTests/StoolballStatisticsMaxResultsDataSourceIntegrationTests.dacpac index 21bf2ff854b68f6aa509ced2bfe980984df4ea57..f71b062a0552b7281c354f135f71182d9f106611 100644 GIT binary patch delta 27949 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 delta 26947 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 b|9uxAAdvpgDF4~_StjPX5y4eD{_Fi0P>RA9 diff --git a/Stoolball.Data.SqlServer/SqlConstants.cs b/Stoolball.Data.SqlServer/SqlConstants.cs index ef0647bd2..08fa43f96 100644 --- a/Stoolball.Data.SqlServer/SqlConstants.cs +++ b/Stoolball.Data.SqlServer/SqlConstants.cs @@ -44,4 +44,14 @@ public static class Tables public const string UmbracoNode = "umbracoNode"; public const string UmbracoMember = "cmsMember"; } + + public static class Views + { + internal const string _viewPrefix = "vw_Stoolball_"; + + /// + /// Player identities with player information, excluding those which have been soft deleted. + /// + public const string PlayerIdentity = _viewPrefix + "PlayerIdentity"; + } } diff --git a/Stoolball.Data.SqlServer/SqlServerMatchDataSource.cs b/Stoolball.Data.SqlServer/SqlServerMatchDataSource.cs index a8760122d..5a6df3751 100644 --- a/Stoolball.Data.SqlServer/SqlServerMatchDataSource.cs +++ b/Stoolball.Data.SqlServer/SqlServerMatchDataSource.cs @@ -124,17 +124,14 @@ WHERE LOWER(m.MatchRoute) = @Route $@"SELECT i.MatchInningsId, i.Byes, i.Wides, i.NoBalls, i.BonusOrPenaltyRuns, i.Runs, i.Wickets, i.InningsOrderInMatch, i.BattingMatchTeamId, i.BowlingMatchTeamId, pi.PlayerInningsId, pi.BattingPosition, pi.DismissalType, pi.RunsScored, pi.BallsFaced, - bat.PlayerIdentityId, bat.PlayerIdentityName, bat2.PlayerId, bat2.PlayerRoute, - field.PlayerIdentityId, field.PlayerIdentityName, field2.PlayerId, field2.PlayerRoute, - bowl.PlayerIdentityId, bowl.PlayerIdentityName, bowl2.PlayerId, bowl2.PlayerRoute + bat.PlayerIdentityId, bat.PlayerIdentityName, bat.PlayerId, bat.PlayerRoute, + field.PlayerIdentityId, field.PlayerIdentityName, field.PlayerId, field.PlayerRoute, + bowl.PlayerIdentityId, bowl.PlayerIdentityName, bowl.PlayerId, bowl.PlayerRoute FROM {Tables.MatchInnings} i LEFT JOIN {Tables.PlayerInnings} pi ON i.MatchInningsId = pi.MatchInningsId - LEFT JOIN {Tables.PlayerIdentity} bat ON pi.BatterPlayerIdentityId = bat.PlayerIdentityId - LEFT JOIN {Tables.Player} bat2 ON bat.PlayerId = bat2.PlayerId - LEFT JOIN {Tables.PlayerIdentity} field ON pi.DismissedByPlayerIdentityId = field.PlayerIdentityId - LEFT JOIN {Tables.Player} field2 ON field.PlayerId = field2.PlayerId - LEFT JOIN {Tables.PlayerIdentity} bowl ON pi.BowlerPlayerIdentityId = bowl.PlayerIdentityId - LEFT JOIN {Tables.Player} bowl2 ON bowl.PlayerId = bowl2.PlayerId + LEFT JOIN {Views.PlayerIdentity} bat ON pi.BatterPlayerIdentityId = bat.PlayerIdentityId + LEFT JOIN {Views.PlayerIdentity} field ON pi.DismissedByPlayerIdentityId = field.PlayerIdentityId + LEFT JOIN {Views.PlayerIdentity} bowl ON pi.BowlerPlayerIdentityId = bowl.PlayerIdentityId WHERE i.MatchId = @MatchId ORDER BY i.InningsOrderInMatch, pi.BattingPosition", (innings, matchTeamIds, batting, batter, dismissedBy, bowledBy) => @@ -215,13 +212,12 @@ WHERE LOWER(m.MatchRoute) = @Route os.OverSetId, os.OverSetNumber, os.Overs, os.BallsPerOver, o.OverNumber, o.BallsBowled, o.NoBalls, o.Wides, o.RunsConceded, pi.PlayerIdentityId, pi.PlayerIdentityName, - p.PlayerId, p.PlayerRoute, + pi.PlayerId, pi.PlayerRoute, pi.TeamId FROM {Tables.MatchInnings} i INNER JOIN {Tables.OverSet} os ON i.MatchInningsId = os.MatchInningsId LEFT JOIN {Tables.Over} o ON os.OverSetId = o.OverSetId - LEFT JOIN {Tables.PlayerIdentity} pi ON o.BowlerPlayerIdentityId = pi.PlayerIdentityId - LEFT JOIN {Tables.Player} p ON pi.PlayerId = p.PlayerId + LEFT JOIN {Views.PlayerIdentity} pi ON o.BowlerPlayerIdentityId = pi.PlayerIdentityId WHERE i.MatchId = @MatchId ORDER BY i.InningsOrderInMatch, o.OverNumber", (innings, overSet, over, bowlerPlayerIdentity, bowlerPlayer, team) => @@ -274,11 +270,10 @@ WHERE LOWER(m.MatchRoute) = @Route ($@"SELECT bf.BowlingFiguresId, bf.Overs, bf.Maidens, bf.RunsConceded, bf.Wickets, bf.MatchInningsId, pi.PlayerIdentityId, pi.PlayerIdentityName, - p.PlayerId, p.PlayerRoute, + pi.PlayerId, pi.PlayerRoute, pi.TeamId FROM {Tables.BowlingFigures} bf - INNER JOIN {Tables.PlayerIdentity} pi ON bf.BowlerPlayerIdentityId = pi.PlayerIdentityId - INNER JOIN {Tables.Player} p ON pi.PlayerId = p.PlayerId + INNER JOIN {Views.PlayerIdentity} pi ON bf.BowlerPlayerIdentityId = pi.PlayerIdentityId WHERE bf.MatchInningsId IN @MatchInningsIds ORDER BY bf.MatchInningsId, bf.BowlingOrder", (bowling, innings, bowlerPlayerIdentity, bowlerPlayer, team) => @@ -301,12 +296,11 @@ WHERE bf.MatchInningsId IN @MatchInningsIds matchToReturn.Awards = (await connection.QueryAsync( $@"SELECT ma.AwardedToId, ma.Reason, a.AwardName, pi.PlayerIdentityId, pi.PlayerIdentityName, - p.PlayerId, p.PlayerRoute, + pi.PlayerId, pi.PlayerRoute, pi.TeamId FROM {Tables.AwardedTo} ma INNER JOIN {Tables.Award} a ON ma.AwardId = a.AwardId - INNER JOIN {Tables.PlayerIdentity} pi ON ma.PlayerIdentityId = pi.PlayerIdentityId - INNER JOIN {Tables.Player} p ON pi.PlayerId = p.PlayerId + INNER JOIN {Views.PlayerIdentity} pi ON ma.PlayerIdentityId = pi.PlayerIdentityId WHERE ma.MatchId = @MatchId ORDER BY a.AwardName", (matchAward, award, playerIdentity, player, team) => diff --git a/Stoolball.Data.SqlServer/SqlServerMatchRepository.cs b/Stoolball.Data.SqlServer/SqlServerMatchRepository.cs index 49b46b222..7345c6ac7 100644 --- a/Stoolball.Data.SqlServer/SqlServerMatchRepository.cs +++ b/Stoolball.Data.SqlServer/SqlServerMatchRepository.cs @@ -803,9 +803,9 @@ public async Task UpdateBattingScorecard(Match match, Guid matchIn field.PlayerIdentityId, field.PlayerIdentityName, bowl.PlayerIdentityId, bowl.PlayerIdentityName FROM {Tables.PlayerInnings} i - INNER JOIN {Tables.PlayerIdentity} bat ON i.BatterPlayerIdentityId = bat.PlayerIdentityId - LEFT JOIN {Tables.PlayerIdentity} field ON i.DismissedByPlayerIdentityId = field.PlayerIdentityId - LEFT JOIN {Tables.PlayerIdentity} bowl ON i.BowlerPlayerIdentityId = bowl.PlayerIdentityId + INNER JOIN {Views.PlayerIdentity} bat ON i.BatterPlayerIdentityId = bat.PlayerIdentityId + LEFT JOIN {Views.PlayerIdentity} field ON i.DismissedByPlayerIdentityId = field.PlayerIdentityId + LEFT JOIN {Views.PlayerIdentity} bowl ON i.BowlerPlayerIdentityId = bowl.PlayerIdentityId WHERE i.MatchInningsId = @MatchInningsId", (playerInnings, batter, fielder, bowler) => { @@ -1070,7 +1070,7 @@ public async Task UpdateBowlingScorecard(Match match, Guid matchIn $@"SELECT o.OverId, o.OverNumber, o.BallsBowled, o.NoBalls, o.Wides, o.RunsConceded, o.OverSetId, p.PlayerIdentityId, p.PlayerIdentityName - FROM {Tables.Over} o INNER JOIN {Tables.PlayerIdentity} p ON o.BowlerPlayerIdentityId = p.PlayerIdentityId + FROM {Tables.Over} o INNER JOIN {Views.PlayerIdentity} p ON o.BowlerPlayerIdentityId = p.PlayerIdentityId WHERE o.MatchInningsId = @MatchInningsId", (over, overSet, playerIdentity) => { @@ -1346,7 +1346,7 @@ await _dapperWrapper.ExecuteAsync($@"UPDATE {Tables.Match} SET var awardsBefore = await _dapperWrapper.QueryAsync<(Guid playerIdentityId, string playerIdentityName, Guid teamId)>( $@"SELECT pi.PlayerIdentityId, pi.PlayerIdentityName, pi.TeamId - FROM {Tables.AwardedTo} a INNER JOIN {Tables.PlayerIdentity} pi ON a.PlayerIdentityId = pi.PlayerIdentityId + FROM {Tables.AwardedTo} a INNER JOIN {Views.PlayerIdentity} pi ON a.PlayerIdentityId = pi.PlayerIdentityId WHERE a.MatchId = @MatchId", new { auditableMatch.MatchId }, transaction).ConfigureAwait(false); diff --git a/Stoolball.Data.SqlServer/SqlServerPlayerDataSource.cs b/Stoolball.Data.SqlServer/SqlServerPlayerDataSource.cs index 8f65ec8e6..5d2010c0d 100644 --- a/Stoolball.Data.SqlServer/SqlServerPlayerDataSource.cs +++ b/Stoolball.Data.SqlServer/SqlServerPlayerDataSource.cs @@ -98,7 +98,7 @@ public async Task> ReadPlayerIdentities(PlayerFilter? filte var sql = $@"SELECT stats.PlayerIdentityId, pi.PlayerIdentityName, pi.RouteSegment, {PROBABILITY_CALCULATION} AS Probability, COUNT(DISTINCT MatchId) AS TotalMatches, MIN(MatchStartTime) AS FirstPlayed, MAX(MatchStartTime) AS LastPlayed, stats.PlayerId, stats.PlayerRoute, stats.TeamId, stats.TeamName - FROM {Tables.PlayerIdentity} pi INNER JOIN {Tables.PlayerInMatchStatistics} AS stats ON pi.PlayerIdentityId = stats.PlayerIdentityId + FROM {Views.PlayerIdentity} pi INNER JOIN {Tables.PlayerInMatchStatistics} AS stats ON pi.PlayerIdentityId = stats.PlayerIdentityId <> GROUP BY stats.PlayerId, stats.PlayerRoute, stats.PlayerIdentityId, pi.PlayerIdentityName, pi.RouteSegment, stats.TeamId, stats.TeamName ORDER BY stats.TeamId ASC, {PROBABILITY_CALCULATION} DESC, pi.PlayerIdentityName ASC"; @@ -201,13 +201,13 @@ public async Task> ReadPlayerIdentities(PlayerFilter? filte // Updates to PlayerInMatchStatistics are done asynchronously and the data will not be updated by the time this is called again. var playerData = await connection.QueryAsync( - $@"SELECT p.PlayerId, p.PlayerRoute, p.MemberKey, + $@"SELECT pi.PlayerId, pi.PlayerRoute, pi.MemberKey, pi.PlayerIdentityId, pi.PlayerIdentityName, (SELECT COUNT(DISTINCT MatchId) AS TotalMatches FROM {Tables.PlayerInMatchStatistics} WHERE PlayerIdentityId = pi.PlayerIdentityId {where}) AS TotalMatches, (SELECT MIN(MatchStartTime) AS FirstPlayed FROM {Tables.PlayerInMatchStatistics} WHERE PlayerIdentityId = pi.PlayerIdentityId {where}) AS FirstPlayed, (SELECT MAX(MatchStartTime) AS LastPlayed FROM {Tables.PlayerInMatchStatistics} WHERE PlayerIdentityId = pi.PlayerIdentityId {where}) AS LastPlayed, t.TeamId, tv.TeamName, t.TeamRoute - FROM {Tables.Player} p INNER JOIN {Tables.PlayerIdentity} pi ON p.PlayerId = pi.PlayerId + FROM {Views.PlayerIdentity} pi INNER JOIN {Tables.Team} t ON pi.TeamId = t.TeamId INNER JOIN {Tables.TeamVersion} tv ON t.TeamId = tv.TeamId WHERE LOWER(PlayerRoute) = @Route @@ -241,7 +241,8 @@ WHERE LOWER(PlayerRoute) = @Route return await connection.QuerySingleOrDefaultAsync( $@"SELECT TOP 1 PlayerRoute FROM {Tables.Player} - WHERE MemberKey = @MemberKey", + WHERE MemberKey = @MemberKey + AND Deleted = 0", new { MemberKey = key }); } } @@ -280,12 +281,12 @@ WHERE LOWER(PlayerRoute) = @Route pi.PlayerId, t.TeamId, tv.TeamName, t.TeamRoute, c.ClubId, cv.ClubName, c.ClubRoute - FROM {Tables.PlayerIdentity} pi INNER JOIN {Tables.Team} t ON pi.TeamId = t.TeamId + FROM {Views.PlayerIdentity} pi INNER JOIN {Tables.Team} t ON pi.TeamId = t.TeamId INNER JOIN {Tables.TeamVersion} tv ON t.TeamId = tv.TeamId LEFT JOIN {Tables.Club} c ON t.ClubId = c.ClubId LEFT JOIN {Tables.ClubVersion} cv ON c.ClubId = cv.ClubId WHERE LOWER(pi.RouteSegment) = @RouteSegment AND LOWER(t.TeamRoute) = @TeamRoute - AND tv.TeamVersionId = (SELECT TOP 1 TeamVersionId FROM { Tables.TeamVersion } WHERE TeamId = t.TeamId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC) + AND tv.TeamVersionId = (SELECT TOP 1 TeamVersionId FROM {Tables.TeamVersion} WHERE TeamId = t.TeamId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC) AND (cv.ClubVersionId = (SELECT TOP 1 ClubVersionId FROM {Tables.ClubVersion} WHERE ClubId = c.ClubId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC) OR cv.ClubVersionId IS NULL)", (identity, player, team, club) => { diff --git a/Stoolball.Data.SqlServer/SqlServerPlayerRepository.cs b/Stoolball.Data.SqlServer/SqlServerPlayerRepository.cs index 640e59360..54f56e610 100644 --- a/Stoolball.Data.SqlServer/SqlServerPlayerRepository.cs +++ b/Stoolball.Data.SqlServer/SqlServerPlayerRepository.cs @@ -73,14 +73,14 @@ public async Task CreateOrMatchPlayerIdentity(PlayerIdentity pla auditablePlayerIdentity.PlayerIdentityId = Guid.NewGuid(); auditablePlayerIdentity.PlayerIdentityName = _playerNameFormatter.CapitaliseName(auditablePlayerIdentity.PlayerIdentityName); auditablePlayerIdentity.RouteSegment = (await _routeGenerator.GenerateUniqueRoute(string.Empty, auditablePlayerIdentity.PlayerIdentityName.Kebaberize(), NoiseWords.PlayerRoute, - async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.PlayerIdentity} WHERE RouteSegment = @RouteSegment AND TeamId = @TeamId", new { RouteSegment = route, auditablePlayerIdentity.Team.TeamId }, transaction) + async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Views.PlayerIdentity} WHERE RouteSegment = @RouteSegment AND TeamId = @TeamId", new { RouteSegment = route, auditablePlayerIdentity.Team.TeamId }, transaction) ).ConfigureAwait(false))?.TrimStart('/'); var player = new Player { PlayerId = Guid.NewGuid() }; player.PlayerIdentities.Add(auditablePlayerIdentity); player.PlayerRoute = await _routeGenerator.GenerateUniqueRoute($"/players", auditablePlayerIdentity.PlayerIdentityName, NoiseWords.PlayerRoute, - async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.Player} WHERE PlayerRoute = @PlayerRoute", new { PlayerRoute = route }, transaction) + async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.Player} WHERE PlayerRoute = @PlayerRoute AND Deleted = 0", new { PlayerRoute = route }, transaction) ).ConfigureAwait(false); await transaction.Connection.ExecuteAsync( @@ -159,7 +159,7 @@ await _auditRepository.CreateAudit(new AuditRecord } var matchedPlayerIdentity = (await _dapperWrapper.QueryAsync( - $"SELECT PlayerIdentityId, PlayerIdentityName, PlayerId FROM {Tables.PlayerIdentity} WHERE ComparableName = @ComparableName AND TeamId = @TeamId", + $"SELECT PlayerIdentityId, PlayerIdentityName, PlayerId FROM {Views.PlayerIdentity} WHERE ComparableName = @ComparableName AND TeamId = @TeamId", (pi, p) => { pi.Player = p; @@ -202,7 +202,7 @@ public async Task LinkPlayerToMemberAccount(Player player, Guid memberKe var auditablePlayer = _copier.CreateAuditableCopy(player); // Is the player already linked, either to this member or someone else? - var existingMemberForPlayer = await connection.QuerySingleOrDefaultAsync($"SELECT MemberKey FROM {Tables.Player} WHERE PlayerId = @PlayerId", auditablePlayer, transaction); + var existingMemberForPlayer = await connection.QuerySingleOrDefaultAsync($"SELECT MemberKey FROM {Tables.Player} WHERE PlayerId = @PlayerId AND Deleted = 0", auditablePlayer, transaction); if (existingMemberForPlayer.HasValue) { transaction.Rollback(); @@ -210,7 +210,7 @@ public async Task LinkPlayerToMemberAccount(Player player, Guid memberKe } // Is this member already linked to a player? - var existingPlayerForMember = await connection.QuerySingleOrDefaultAsync($"SELECT TOP 1 PlayerId, PlayerRoute, MemberKey FROM {Tables.Player} WHERE MemberKey = @memberKey", new { memberKey }, transaction); + var existingPlayerForMember = await connection.QuerySingleOrDefaultAsync($"SELECT TOP 1 PlayerId, PlayerRoute, MemberKey FROM {Tables.Player} WHERE MemberKey = @memberKey AND Deleted = 0", new { memberKey }, transaction); if (existingPlayerForMember == null) { // Link member to player record @@ -322,7 +322,10 @@ public async Task UnlinkPlayerIdentityFromMemberAccount(PlayerIdentity playerIde connection.Open(); using (var transaction = connection.BeginTransaction()) { - var result = await connection.QuerySingleAsync<(int totalIdentitiesLinkedToMember, Guid playerId)>($"SELECT COUNT(*), PlayerId FROM {Tables.PlayerIdentity} WHERE PlayerId = (SELECT PlayerId FROM {Tables.PlayerIdentity} WHERE PlayerIdentityId = @PlayerIdentityId) GROUP BY PlayerId", playerIdentity, transaction).ConfigureAwait(false); + var result = await connection.QuerySingleAsync<(int totalIdentitiesLinkedToMember, Guid playerId)>( + $@"SELECT COUNT(*), PlayerId FROM {Views.PlayerIdentity} + WHERE PlayerId = (SELECT PlayerId FROM {Views.PlayerIdentity} WHERE PlayerIdentityId = @PlayerIdentityId) + GROUP BY PlayerId", playerIdentity, transaction).ConfigureAwait(false); if (result.totalIdentitiesLinkedToMember == 1) { @@ -350,7 +353,7 @@ await _auditRepository.CreateAudit(new AuditRecord player.PlayerIdentities.Add(playerIdentity); player.PlayerRoute = await _routeGenerator.GenerateUniqueRoute($"/players", playerIdentity.PlayerIdentityName, NoiseWords.PlayerRoute, - async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.Player} WHERE PlayerRoute = @PlayerRoute", new { PlayerRoute = route }, transaction) + async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.Player} WHERE PlayerRoute = @PlayerRoute AND Deleted = 0", new { PlayerRoute = route }, transaction) ); await transaction.Connection.ExecuteAsync( @@ -484,7 +487,9 @@ public async Task> auditablePlayerIdentity.PlayerIdentityName = _playerNameFormatter.CapitaliseName(auditablePlayerIdentity.PlayerIdentityName!); auditablePlayerIdentity.RouteSegment = (await _routeGenerator.GenerateUniqueRoute(string.Empty, auditablePlayerIdentity.PlayerIdentityName.Kebaberize(), NoiseWords.PlayerRoute, - async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.PlayerIdentity} WHERE RouteSegment = @RouteSegment AND TeamId = @TeamId", new { RouteSegment = route, auditablePlayerIdentity.Team!.TeamId }, transaction) + async route => await transaction.Connection.ExecuteScalarAsync( + $"SELECT COUNT(*) FROM {Views.PlayerIdentity} WHERE RouteSegment = @RouteSegment AND TeamId = @TeamId", + new { RouteSegment = route, auditablePlayerIdentity.Team!.TeamId }, transaction) ).ConfigureAwait(false))?.TrimStart('/'); _ = await _dapperWrapper.ExecuteAsync($@"UPDATE {Tables.PlayerIdentity} SET @@ -536,11 +541,11 @@ private async Task UpdatePlayerRoute(Guid playerId, IDbTransaction transaction) // will be updated when a player identity is renamed, and we need to see the change immediately. // Updates to PlayerInMatchStatistics are done asynchronously and the data will not be updated by the time this is called. - var sql = $@"SELECT p.PlayerRoute, pi.PlayerIdentityName, COUNT(DISTINCT MatchId) AS TotalMatches - FROM {Tables.Player} p INNER JOIN {Tables.PlayerIdentity} pi ON p.PlayerId = pi.PlayerId + var sql = $@"SELECT pi.PlayerRoute, pi.PlayerIdentityName, COUNT(DISTINCT MatchId) AS TotalMatches + FROM {Views.PlayerIdentity} pi INNER JOIN {Tables.PlayerInMatchStatistics} stats ON pi.PlayerIdentityId = stats.PlayerIdentityId - WHERE p.PlayerId = @PlayerId - GROUP BY p.PlayerRoute, pi.PlayerIdentityId, pi.PlayerIdentityName"; + WHERE pi.PlayerId = @PlayerId + GROUP BY pi.PlayerRoute, pi.PlayerIdentityId, pi.PlayerIdentityName"; var identities = (await _dapperWrapper.QueryAsync<(string playerRoute, string playerIdentityName, int totalMatches)>(sql, new { PlayerId = playerId }, transaction).ConfigureAwait(false)).ToList(); @@ -557,7 +562,7 @@ private async Task UpdatePlayerRoute(Guid playerId, IDbTransaction transaction) // Current route doesn't match any of its identities. Assign a new one based on the identity that's played the most. var updatedRoute = (await _routeGenerator.GenerateUniqueRoute("/players", identities.First(x => x.totalMatches == identities.Max(pi => pi.totalMatches)).playerIdentityName, NoiseWords.PlayerRoute, - async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.Player} WHERE PlayerRoute = @PlayerRoute", new { PlayerRoute = route }, transaction) + async route => await transaction.Connection.ExecuteScalarAsync($"SELECT COUNT(*) FROM {Tables.Player} WHERE PlayerRoute = @PlayerRoute AND Deleted = 0", new { PlayerRoute = route }, transaction) ).ConfigureAwait(false)); await _dapperWrapper.ExecuteAsync($"UPDATE {Tables.Player} SET PlayerRoute = @PlayerRoute WHERE PlayerId = @PlayerId", new { PlayerRoute = updatedRoute, PlayerId = playerId }, transaction).ConfigureAwait(false); diff --git a/Stoolball.Data.SqlServer/SqlServerStatisticsRepository.cs b/Stoolball.Data.SqlServer/SqlServerStatisticsRepository.cs index 053ac0f4f..35cac40c0 100644 --- a/Stoolball.Data.SqlServer/SqlServerStatisticsRepository.cs +++ b/Stoolball.Data.SqlServer/SqlServerStatisticsRepository.cs @@ -129,8 +129,8 @@ await transaction.Connection.ExecuteAsync($@"INSERT INTO {Tables.PlayerInMatchSt RunsScored, BallsFaced, Catches, RunOuts, WonMatch, PlayerOfTheMatch) VALUES (@PlayerInMatchStatisticsId, @PlayerId, @PlayerIdentityId, - (SELECT PlayerIdentityName FROM {Tables.PlayerIdentity} WHERE PlayerIdentityId = @PlayerIdentityId), - (SELECT PlayerRoute FROM {Tables.Player} WHERE PlayerId = @PlayerId), + (SELECT PlayerIdentityName FROM {Views.PlayerIdentity} WHERE PlayerIdentityId = @PlayerIdentityId), + (SELECT PlayerRoute FROM {Tables.Player} WHERE PlayerId = @PlayerId AND Deleted = 0), @MatchId, (SELECT StartTime FROM {Tables.Match} WHERE MatchId = @MatchId), (SELECT MatchType FROM {Tables.Match} WHERE MatchId = @MatchId), @@ -152,14 +152,14 @@ await transaction.Connection.ExecuteAsync($@"INSERT INTO {Tables.PlayerInMatchSt @MatchInningsPair, @TeamRunsScored, @TeamWicketsLost, @TeamBonusOrPenaltyRunsAwarded, @TeamRunsConceded, @TeamNoBallsConceded, @TeamWidesConceded, @TeamByesConceded, @TeamWicketsTaken, @BowlingFiguresId, @OverNumberOfFirstOverBowled, @BallsBowled, @Overs, @Maidens, @NoBalls, @Wides, @RunsConceded, @HasRunsConceded, @Wickets, @WicketsWithBowling, @WonToss, @BattedFirst, @PlayerInningsNumber, @PlayerInningsId, @BattingPosition, @DismissalType, @PlayerWasDismissed, @BowledByPlayerIdentityId, - (SELECT CASE WHEN @BowledByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerIdentityName FROM {Tables.PlayerIdentity} WHERE PlayerIdentityId = @BowledByPlayerIdentityId) END), - (SELECT CASE WHEN @BowledByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerRoute FROM {Tables.PlayerIdentity} pi INNER JOIN {Tables.Player} p ON pi.PlayerId = p.PlayerId WHERE PlayerIdentityId = @BowledByPlayerIdentityId) END), + (SELECT CASE WHEN @BowledByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerIdentityName FROM {Views.PlayerIdentity} WHERE PlayerIdentityId = @BowledByPlayerIdentityId) END), + (SELECT CASE WHEN @BowledByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerRoute FROM {Views.PlayerIdentity} pi WHERE PlayerIdentityId = @BowledByPlayerIdentityId) END), @CaughtByPlayerIdentityId, - (SELECT CASE WHEN @CaughtByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerIdentityName FROM {Tables.PlayerIdentity} WHERE PlayerIdentityId = @CaughtByPlayerIdentityId) END), - (SELECT CASE WHEN @CaughtByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerRoute FROM {Tables.PlayerIdentity} pi INNER JOIN {Tables.Player} p ON pi.PlayerId = p.PlayerId WHERE PlayerIdentityId = @CaughtByPlayerIdentityId) END), + (SELECT CASE WHEN @CaughtByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerIdentityName FROM {Views.PlayerIdentity} WHERE PlayerIdentityId = @CaughtByPlayerIdentityId) END), + (SELECT CASE WHEN @CaughtByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerRoute FROM {Views.PlayerIdentity} pi WHERE PlayerIdentityId = @CaughtByPlayerIdentityId) END), @RunOutByPlayerIdentityId, - (SELECT CASE WHEN @RunOutByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerIdentityName FROM {Tables.PlayerIdentity} WHERE PlayerIdentityId = @RunOutByPlayerIdentityId) END), - (SELECT CASE WHEN @RunOutByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerRoute FROM {Tables.PlayerIdentity} pi INNER JOIN {Tables.Player} p ON pi.PlayerId = p.PlayerId WHERE PlayerIdentityId = @RunOutByPlayerIdentityId) END), + (SELECT CASE WHEN @RunOutByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerIdentityName FROM {Views.PlayerIdentity} WHERE PlayerIdentityId = @RunOutByPlayerIdentityId) END), + (SELECT CASE WHEN @RunOutByPlayerIdentityId IS NULL THEN NULL ELSE (SELECT PlayerRoute FROM {Views.PlayerIdentity} pi WHERE PlayerIdentityId = @RunOutByPlayerIdentityId) END), @RunsScored, @BallsFaced, @Catches, @RunOuts, @WonMatch, @PlayerOfTheMatch)", new { diff --git a/Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/DeleteObsoletePlayers.cs b/Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/DeleteObsoletePlayers.cs index fa668d78b..2919ec9d8 100644 --- a/Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/DeleteObsoletePlayers.cs +++ b/Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/DeleteObsoletePlayers.cs @@ -22,6 +22,7 @@ protected override void Migrate() { Create.Column("Deleted").OnTable(Tables.PlayerIdentity).AsBoolean().WithDefaultValue(0).Do(); Execute.SqlFromFile("043_Delete_Obsolete_Players.Rename_ForAsyncDelete_Column.sql").Do(); + Execute.SqlFromFile("043_Delete_Obsolete_Players.vw_Stoolball_PlayerIdentity.sql").Do(); Execute.SqlFromFile("043_Delete_Obsolete_Players.usp_Player_Async_Update.sql").Do(); Execute.SqlFromFile("043_Delete_Obsolete_Players.Clean_Existing_Data.sql").Do(); } diff --git a/Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/vw_Stoolball_PlayerIdentity.sql b/Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/vw_Stoolball_PlayerIdentity.sql new file mode 100644 index 000000000..7adde8b17 --- /dev/null +++ b/Stoolball.Data.UmbracoMigrations/043_Delete_Obsolete_Players/vw_Stoolball_PlayerIdentity.sql @@ -0,0 +1,13 @@ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +CREATE VIEW [dbo].[vw_Stoolball_PlayerIdentity] +AS +SELECT pi.PlayerIdentityId, pi.TeamId, pi.PlayerIdentityName, pi.ComparableName, pi.RouteSegment, pi.LinkedBy, p.PlayerId, p.PlayerRoute, p.MemberKey +FROM StoolballPlayerIdentity pi INNER JOIN StoolballPlayer p ON pi.PlayerId = p.PlayerId +WHERE pi.Deleted = 0 AND p.Deleted = 0 +GO \ No newline at end of file diff --git a/Stoolball.Data.UmbracoMigrations/Stoolball.Data.UmbracoMigrations.csproj b/Stoolball.Data.UmbracoMigrations/Stoolball.Data.UmbracoMigrations.csproj index d599b4dc0..81b27fe3e 100644 --- a/Stoolball.Data.UmbracoMigrations/Stoolball.Data.UmbracoMigrations.csproj +++ b/Stoolball.Data.UmbracoMigrations/Stoolball.Data.UmbracoMigrations.csproj @@ -16,6 +16,7 @@ + @@ -29,6 +30,7 @@ +