diff --git a/src/Snap.Hutao/Snap.Hutao/Migrations/20240613144942_UserGameRoleProfilePicture.Designer.cs b/src/Snap.Hutao/Snap.Hutao/Migrations/20240616104646_UidProfilePicture.Designer.cs
similarity index 98%
rename from src/Snap.Hutao/Snap.Hutao/Migrations/20240613144942_UserGameRoleProfilePicture.Designer.cs
rename to src/Snap.Hutao/Snap.Hutao/Migrations/20240616104646_UidProfilePicture.Designer.cs
index 3e6db24b..26aa2963 100644
--- a/src/Snap.Hutao/Snap.Hutao/Migrations/20240613144942_UserGameRoleProfilePicture.Designer.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Migrations/20240616104646_UidProfilePicture.Designer.cs
@@ -11,8 +11,8 @@ using Snap.Hutao.Model.Entity.Database;
namespace Snap.Hutao.Migrations
{
[DbContext(typeof(AppDbContext))]
- [Migration("20240613144942_UserGameRoleProfilePicture")]
- partial class UserGameRoleProfilePicture
+ [Migration("20240616104646_UidProfilePicture")]
+ partial class UidProfilePicture
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -469,6 +469,33 @@ namespace Snap.Hutao.Migrations
b.ToTable("spiral_abysses");
});
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.UidProfilePicture", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("AvatarId")
+ .HasColumnType("INTEGER");
+
+ b.Property("CostumeId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProfilePictureId")
+ .HasColumnType("INTEGER");
+
+ b.Property("RefreshTime")
+ .HasColumnType("TEXT");
+
+ b.Property("Uid")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("uid_profile_pictures");
+ });
+
modelBuilder.Entity("Snap.Hutao.Model.Entity.User", b =>
{
b.Property("InnerId")
@@ -518,33 +545,6 @@ namespace Snap.Hutao.Migrations
b.ToTable("users");
});
- modelBuilder.Entity("Snap.Hutao.Model.Entity.UserGameRoleProfilePicture", b =>
- {
- b.Property("InnerId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property("AvatarId")
- .HasColumnType("INTEGER");
-
- b.Property("CostumeId")
- .HasColumnType("INTEGER");
-
- b.Property("LastUpdateTime")
- .HasColumnType("TEXT");
-
- b.Property("ProfilePictureId")
- .HasColumnType("INTEGER");
-
- b.Property("Uid")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("InnerId");
-
- b.ToTable("profile_pictures");
- });
-
modelBuilder.Entity("Snap.Hutao.Model.Entity.Achievement", b =>
{
b.HasOne("Snap.Hutao.Model.Entity.AchievementArchive", "Archive")
diff --git a/src/Snap.Hutao/Snap.Hutao/Migrations/20240613144942_UserGameRoleProfilePicture.cs b/src/Snap.Hutao/Snap.Hutao/Migrations/20240616104646_UidProfilePicture.cs
similarity index 75%
rename from src/Snap.Hutao/Snap.Hutao/Migrations/20240613144942_UserGameRoleProfilePicture.cs
rename to src/Snap.Hutao/Snap.Hutao/Migrations/20240616104646_UidProfilePicture.cs
index 84e5271f..0c323d59 100644
--- a/src/Snap.Hutao/Snap.Hutao/Migrations/20240613144942_UserGameRoleProfilePicture.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Migrations/20240616104646_UidProfilePicture.cs
@@ -1,4 +1,5 @@
//
+using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
@@ -6,13 +7,13 @@ using Microsoft.EntityFrameworkCore.Migrations;
namespace Snap.Hutao.Migrations
{
///
- public partial class UserGameRoleProfilePicture : Migration
+ public partial class UidProfilePicture : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
- name: "profile_pictures",
+ name: "uid_profile_pictures",
columns: table => new
{
InnerId = table.Column(type: "TEXT", nullable: false),
@@ -20,11 +21,11 @@ namespace Snap.Hutao.Migrations
ProfilePictureId = table.Column(type: "INTEGER", nullable: false),
AvatarId = table.Column(type: "INTEGER", nullable: false),
CostumeId = table.Column(type: "INTEGER", nullable: false),
- LastUpdateTime = table.Column(type: "TEXT", nullable: false)
+ RefreshTime = table.Column(type: "TEXT", nullable: false)
},
constraints: table =>
{
- table.PrimaryKey("PK_profile_pictures", x => x.InnerId);
+ table.PrimaryKey("PK_uid_profile_pictures", x => x.InnerId);
});
}
@@ -32,7 +33,7 @@ namespace Snap.Hutao.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
- name: "profile_pictures");
+ name: "uid_profile_pictures");
}
}
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs b/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs
index 3be71058..03413381 100644
--- a/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs
@@ -466,6 +466,33 @@ namespace Snap.Hutao.Migrations
b.ToTable("spiral_abysses");
});
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.UidProfilePicture", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("AvatarId")
+ .HasColumnType("INTEGER");
+
+ b.Property("CostumeId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProfilePictureId")
+ .HasColumnType("INTEGER");
+
+ b.Property("RefreshTime")
+ .HasColumnType("TEXT");
+
+ b.Property("Uid")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("uid_profile_pictures");
+ });
+
modelBuilder.Entity("Snap.Hutao.Model.Entity.User", b =>
{
b.Property("InnerId")
@@ -515,33 +542,6 @@ namespace Snap.Hutao.Migrations
b.ToTable("users");
});
- modelBuilder.Entity("Snap.Hutao.Model.Entity.UserGameRoleProfilePicture", b =>
- {
- b.Property("InnerId")
- .ValueGeneratedOnAdd()
- .HasColumnType("TEXT");
-
- b.Property("AvatarId")
- .HasColumnType("INTEGER");
-
- b.Property("CostumeId")
- .HasColumnType("INTEGER");
-
- b.Property("LastUpdateTime")
- .HasColumnType("TEXT");
-
- b.Property("ProfilePictureId")
- .HasColumnType("INTEGER");
-
- b.Property("Uid")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("InnerId");
-
- b.ToTable("profile_pictures");
- });
-
modelBuilder.Entity("Snap.Hutao.Model.Entity.Achievement", b =>
{
b.HasOne("Snap.Hutao.Model.Entity.AchievementArchive", "Archive")
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs
index 8e6f5a16..47cfeb54 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs
@@ -25,7 +25,7 @@ internal sealed class AppDbContext : DbContext
public AppDbContext(DbContextOptions options)
: base(options)
{
- logger = this.GetService>();
+ //logger = this.GetService>();
logger?.LogColorizedInformation("{Name}[{Id}] {Action}", nameof(AppDbContext), (ContextId, ConsoleColor.DarkCyan), ("created", ConsoleColor.Green));
}
@@ -65,7 +65,7 @@ internal sealed class AppDbContext : DbContext
public DbSet SpiralAbysses { get; set; } = default!;
- public DbSet UserGameRoleProfilePictures { get; set; } = default!;
+ public DbSet UidProfilePictures { get; set; } = default!;
public static AppDbContext Create(IServiceProvider serviceProvider, string sqlConnectionString)
{
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/UserGameRoleProfilePicture.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/UidProfilePicture.cs
similarity index 71%
rename from src/Snap.Hutao/Snap.Hutao/Model/Entity/UserGameRoleProfilePicture.cs
rename to src/Snap.Hutao/Snap.Hutao/Model/Entity/UidProfilePicture.cs
index 21bc9372..729df91c 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/UserGameRoleProfilePicture.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/UidProfilePicture.cs
@@ -9,9 +9,9 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Snap.Hutao.Model.Entity;
-[Table("profile_pictures")]
+[Table("uid_profile_pictures")]
[SuppressMessage("", "SH002")]
-internal sealed class UserGameRoleProfilePicture : IMappingFrom
+internal sealed class UidProfilePicture : IMappingFrom
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
@@ -25,9 +25,9 @@ internal sealed class UserGameRoleProfilePicture : IMappingFrom
+{
+ ValueTask SingleUidProfilePictureOrDefaultByUidAsync(string uid, CancellationToken token = default);
+
+ ValueTask UpdateUidProfilePictureAsync(UidProfilePicture profilePicture, CancellationToken token = default);
+
+ ValueTask DeleteUidProfilePictureByUidAsync(string uid, CancellationToken token = default);
+}
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserGameRoleDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/IUserGameRoleDbService.cs
deleted file mode 100644
index 217af9a2..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserGameRoleDbService.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Snap.Hutao.Model.Entity;
-using Snap.Hutao.Service.Abstraction;
-
-namespace Snap.Hutao.Service.User;
-
-internal interface IUserGameRoleDbService : IAppDbService
-{
- ValueTask ContainsUidAsync(string uid, CancellationToken token = default);
-
- ValueTask GetUserGameRoleProfilePictureByUidAsync(string uid, CancellationToken token = default);
-
- ValueTask UpdateUserGameRoleProfilePictureAsync(UserGameRoleProfilePicture profilePicture, CancellationToken token = default);
-
- ValueTask DeleteUserGameRoleProfilePictureByUidAsync(string uid, CancellationToken token = default);
-}
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserInitializationService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/IUserInitializationService.cs
index 5509609e..edbc98af 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserInitializationService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/User/IUserInitializationService.cs
@@ -11,5 +11,5 @@ internal interface IUserInitializationService
ValueTask ResumeUserAsync(Model.Entity.User inner, CancellationToken token = default(CancellationToken));
- ValueTask RefreshUserGameRolesProfilePictureAsync(UserGameRole userGameRole, CancellationToken token = default);
+ ValueTask RefreshUidProfilePictureAsync(UserGameRole userGameRole, CancellationToken token = default);
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/IUserService.cs
index 08e1fd87..9a11eb7e 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/User/IUserService.cs
@@ -54,5 +54,5 @@ internal interface IUserService
/// 任务
ValueTask RemoveUserAsync(BindingUser user);
- ValueTask RefreshUserGameRoleProfilePictureAsync(UserGameRole userGameRole);
+ ValueTask RefreshUidProfilePictureAsync(UserGameRole userGameRole);
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/UidProfilePictureDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/UidProfilePictureDbService.cs
new file mode 100644
index 00000000..5622be01
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Service/User/UidProfilePictureDbService.cs
@@ -0,0 +1,32 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+using Microsoft.EntityFrameworkCore;
+using Snap.Hutao.Model.Entity;
+using Snap.Hutao.Service.Abstraction;
+
+namespace Snap.Hutao.Service.User;
+
+[ConstructorGenerated]
+[Injection(InjectAs.Singleton, typeof(IUidProfilePictureDbService))]
+internal sealed partial class UidProfilePictureDbService : IUidProfilePictureDbService
+{
+ private readonly IServiceProvider serviceProvider;
+
+ public IServiceProvider ServiceProvider { get => serviceProvider; }
+
+ public ValueTask SingleUidProfilePictureOrDefaultByUidAsync(string uid, CancellationToken token = default)
+ {
+ return this.QueryAsync(query => query.SingleOrDefaultAsync(n => n.Uid == uid));
+ }
+
+ public async ValueTask UpdateUidProfilePictureAsync(UidProfilePicture profilePicture, CancellationToken token = default)
+ {
+ await this.UpdateAsync(profilePicture, token).ConfigureAwait(false);
+ }
+
+ public async ValueTask DeleteUidProfilePictureByUidAsync(string uid, CancellationToken token = default)
+ {
+ await this.DeleteAsync(profilePicture => profilePicture.Uid == uid, token).ConfigureAwait(false);
+ }
+}
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/UserGameRoleDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/UserGameRoleDbService.cs
deleted file mode 100644
index 09ef97f4..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Service/User/UserGameRoleDbService.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Microsoft.EntityFrameworkCore;
-using Snap.Hutao.Model.Entity;
-using Snap.Hutao.Service.Abstraction;
-
-namespace Snap.Hutao.Service.User;
-
-[ConstructorGenerated]
-[Injection(InjectAs.Singleton, typeof(IUserGameRoleDbService))]
-internal sealed partial class UserGameRoleDbService : IUserGameRoleDbService
-{
- private readonly IServiceProvider serviceProvider;
-
- public IServiceProvider ServiceProvider { get => serviceProvider; }
-
- public ValueTask ContainsUidAsync(string uid, CancellationToken token = default)
- {
- return this.QueryAsync(query => query.AnyAsync(n => n.Uid == uid));
- }
-
- public ValueTask GetUserGameRoleProfilePictureByUidAsync(string uid, CancellationToken token = default)
- {
- return this.QueryAsync(query => query.FirstAsync(n => n.Uid == uid));
- }
-
- public async ValueTask UpdateUserGameRoleProfilePictureAsync(UserGameRoleProfilePicture profilePicture, CancellationToken token = default)
- {
- await this.UpdateAsync(profilePicture, token).ConfigureAwait(false);
- }
-
- public async ValueTask DeleteUserGameRoleProfilePictureByUidAsync(string uid, CancellationToken token = default)
- {
- await this.DeleteAsync(profilePicture => profilePicture.Uid == uid, token).ConfigureAwait(false);
- }
-}
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/UserInitializationService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/UserInitializationService.cs
index eb2fd95a..e2868bf1 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/User/UserInitializationService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/User/UserInitializationService.cs
@@ -23,7 +23,7 @@ namespace Snap.Hutao.Service.User;
internal sealed partial class UserInitializationService : IUserInitializationService
{
private readonly IUserFingerprintService userFingerprintService;
- private readonly IUserGameRoleDbService userGameRoleDbService;
+ private readonly IUidProfilePictureDbService uidProfilePictureDbService;
private readonly IServiceProvider serviceProvider;
public async ValueTask ResumeUserAsync(Model.Entity.User inner, CancellationToken token = default)
@@ -63,7 +63,7 @@ internal sealed partial class UserInitializationService : IUserInitializationSer
}
}
- public async ValueTask RefreshUserGameRolesProfilePictureAsync(UserGameRole userGameRole, CancellationToken token = default)
+ public async ValueTask RefreshUidProfilePictureAsync(UserGameRole userGameRole, CancellationToken token = default)
{
EnkaResponse? enkaResponse;
using (IServiceScope scope = serviceProvider.CreateScope())
@@ -78,12 +78,12 @@ internal sealed partial class UserInitializationService : IUserInitializationSer
if (enkaResponse is { PlayerInfo: { } playerInfo })
{
- UserGameRoleProfilePicture profilePicture = UserGameRoleProfilePicture.From(userGameRole, playerInfo.ProfilePicture);
+ UidProfilePicture profilePicture = UidProfilePicture.From(userGameRole, playerInfo.ProfilePicture);
- await userGameRoleDbService.DeleteUserGameRoleProfilePictureByUidAsync(userGameRole.GameUid, token).ConfigureAwait(false);
- await userGameRoleDbService.UpdateUserGameRoleProfilePictureAsync(profilePicture, token).ConfigureAwait(false);
+ await uidProfilePictureDbService.DeleteUidProfilePictureByUidAsync(userGameRole.GameUid, token).ConfigureAwait(false);
+ await uidProfilePictureDbService.UpdateUidProfilePictureAsync(profilePicture, token).ConfigureAwait(false);
- await SetUserGameRolesProfilePictureCoreAsync(userGameRole, profilePicture, token).ConfigureAwait(false);
+ await SetUserGameRoleProfilePictureCoreAsync(userGameRole, profilePicture, token).ConfigureAwait(false);
}
}
@@ -255,25 +255,21 @@ internal sealed partial class UserInitializationService : IUserInitializationSer
{
foreach (UserGameRole userGameRole in user.UserGameRoles)
{
- if (await userGameRoleDbService.ContainsUidAsync(userGameRole.GameUid, token).ConfigureAwait(false))
+ if (await uidProfilePictureDbService.SingleUidProfilePictureOrDefaultByUidAsync(userGameRole.GameUid, token).ConfigureAwait(false) is { } profilePicture)
{
- UserGameRoleProfilePicture savedProfilePicture = await userGameRoleDbService
- .GetUserGameRoleProfilePictureByUidAsync(userGameRole.GameUid, token)
- .ConfigureAwait(false);
-
- if (await SetUserGameRolesProfilePictureCoreAsync(userGameRole, savedProfilePicture, token).ConfigureAwait(false))
+ if (await SetUserGameRoleProfilePictureCoreAsync(userGameRole, profilePicture, token).ConfigureAwait(false))
{
continue;
}
}
- await RefreshUserGameRolesProfilePictureAsync(userGameRole, token).ConfigureAwait(false);
+ await RefreshUidProfilePictureAsync(userGameRole, token).ConfigureAwait(false);
}
}
- private async ValueTask SetUserGameRolesProfilePictureCoreAsync(UserGameRole userGameRole, UserGameRoleProfilePicture profilePicture, CancellationToken token = default)
+ private async ValueTask SetUserGameRoleProfilePictureCoreAsync(UserGameRole userGameRole, UidProfilePicture profilePicture, CancellationToken token = default)
{
- if (profilePicture.LastUpdateTime.AddDays(15) < DateTimeOffset.Now)
+ if (profilePicture.RefreshTime.AddDays(15) < DateTimeOffset.Now)
{
return false;
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs
index 6766ad1e..4daf87ae 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs
@@ -123,8 +123,8 @@ internal sealed partial class UserService : IUserService, IUserServiceUnsafe
return true;
}
- public async ValueTask RefreshUserGameRoleProfilePictureAsync(UserGameRole userGameRole)
+ public async ValueTask RefreshUidProfilePictureAsync(UserGameRole userGameRole)
{
- await userInitializationService.RefreshUserGameRolesProfilePictureAsync(userGameRole).ConfigureAwait(false);
+ await userInitializationService.RefreshUidProfilePictureAsync(userGameRole).ConfigureAwait(false);
}
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/User/UserViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/User/UserViewModel.cs
index fc8d7b59..33ee5655 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/User/UserViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/User/UserViewModel.cs
@@ -302,6 +302,6 @@ internal sealed partial class UserViewModel : ObservableObject
[Command("RefreshUserGameRoleProfilePictureCommand")]
private void RefreshUserGameRoleProfilePicture(UserGameRole userGameRole)
{
- userService.RefreshUserGameRoleProfilePictureAsync(userGameRole).SafeForget();
+ userService.RefreshUidProfilePictureAsync(userGameRole).SafeForget();
}
}
\ No newline at end of file