Skip to content

Commit 4cd9805

Browse files
Merge pull request #70 from nullinside-development-group/feat/upsert
feat: upserting twitch user records
2 parents 6b7e78e + ebf9c8b commit 4cd9805

File tree

5 files changed

+21
-29
lines changed

5 files changed

+21
-29
lines changed

src/Nullinside.Api.TwitchBot.Tests/ChatRules/BestCheapViewersTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class BestCheapViewersTests : AChatRuleUnitTestBase<BestCheapViewers> {
4141
[TestCase("Chea̓p viewers on streamboo. com (remove the space) @ND80DOGe")]
4242
[TestCase("Bestͮ vie͐wers ̷on cutt.ly/EeK6Anda")]
4343
[TestCase("Bestͮ vie͐wers ̷on viewerszone.online")]
44+
[TestCase("Best viěw\u0310e\u0329rs \u0333o\u032bno\u034en streamboo .com ( remove the space ) @WSZ7tPNI")]
4445
public async Task TestKnownStrings(string badString) {
4546
var rule = new BestCheapViewers();
4647
var botProxy = new Mock<ITwitchApiProxy>();

src/Nullinside.Api.TwitchBot.Tests/Nullinside.Api.TwitchBot.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
<PrivateAssets>all</PrivateAssets>
1515
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1616
</PackageReference>
17-
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.11" />
18-
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.11" />
17+
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.13" />
18+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.13" />
1919
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1"/>
2020
<PackageReference Include="Moq" Version="4.20.72"/>
2121
<PackageReference Include="NUnit" Version="4.2.2"/>

src/Nullinside.Api.TwitchBot/Model/NullinsideContextExtensions.cs

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -161,30 +161,20 @@ private static async Task<int> UpdateOAuthInDatabase(this INullinsideContext db,
161161
/// <param name="stoppingToken">The stopping token.</param>
162162
public static async Task SaveTwitchBans(this INullinsideContext db, string channelId,
163163
IEnumerable<(string Id, string Username)> bannedUsers, string reason, CancellationToken stoppingToken = new()) {
164-
List<string> banUserIds = bannedUsers.Select(b => b.Id).ToHashSet().ToList();
165-
HashSet<string?> existingUsers = db.TwitchUser
166-
.AsNoTracking()
167-
.Where(u => null != u.TwitchId && banUserIds.Contains(u.TwitchId))
168-
.Select(u => u.TwitchId)
169-
.ToHashSet();
170-
171-
List<TwitchUser> nonExistantUsers = banUserIds
172-
.Where(u => !existingUsers.Contains(u))
173-
.Select(c => new TwitchUser {
174-
TwitchId = c,
175-
TwitchUsername = bannedUsers.FirstOrDefault(u => string.Equals(u.Id, c)).Username
176-
})
177-
.ToList();
178-
179-
db.TwitchUser.UpdateRange(nonExistantUsers);
180-
db.TwitchBan
181-
.AddRange(banUserIds
182-
.Select(i => new TwitchBan {
183-
ChannelId = channelId,
184-
BannedUserTwitchId = i,
185-
Reason = reason,
186-
Timestamp = DateTime.UtcNow
187-
}));
164+
await db.TwitchUser.UpsertRange(
165+
bannedUsers.Select(c => new TwitchUser { TwitchId = c.Id, TwitchUsername = c.Username })
166+
.ToList()
167+
)
168+
.On(v => new { v.TwitchId })
169+
.RunAsync(stoppingToken);
170+
171+
db.TwitchBan.AddRange(
172+
bannedUsers.Select(i => new TwitchBan {
173+
ChannelId = channelId,
174+
BannedUserTwitchId = i.Id,
175+
Reason = reason,
176+
Timestamp = DateTime.UtcNow
177+
}));
188178
await db.SaveChangesAsync(stoppingToken);
189179
}
190180
}

src/Nullinside.Api.TwitchBot/Nullinside.Api.TwitchBot.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@
2121
</ItemGroup>
2222

2323
<ItemGroup>
24+
<PackageReference Include="FlexLabs.EntityFrameworkCore.Upsert" Version="8.1.2" />
2425
<PackageReference Include="log4net.Ext.Json" Version="2.0.10.1"/>
25-
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.11" />
26-
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.11">
26+
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.13" />
27+
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.13">
2728
<PrivateAssets>all</PrivateAssets>
2829
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2930
</PackageReference>

0 commit comments

Comments
 (0)