feat(friend): implement 5 read methods on FriendService + register DI + read test suite
GetFriendsAsync, GetReceiveAppliesAsync, GetSendAppliesAsync, GetPlayedTogetherAsync, SearchAsync all implemented. LoadViewerProjectionAsync materialises the full Viewer entity (with Include/ThenInclude for SelectedEmblem/Degree) then projects in-memory — avoids the EF Core limitation where Include is silently ignored under Select. FriendService + IPlayedTogetherWriter registered as Scoped in Program.cs. 12 read tests, all green; full suite 1171/1171 still passing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ using SVSim.Database.Repositories.Pack;
|
||||
using SVSim.Database.Repositories.Story;
|
||||
using SVSim.Database.Repositories.Viewer;
|
||||
using SVSim.Database.Services;
|
||||
using SVSim.Database.Services.Friend;
|
||||
using SVSim.EmulatedEntrypoint.Configuration;
|
||||
using SVSim.EmulatedEntrypoint.Extensions;
|
||||
using SVSim.EmulatedEntrypoint.Matching;
|
||||
@@ -112,6 +113,9 @@ public class Program
|
||||
builder.Services.AddSingleton<IRandom, SystemRandom>();
|
||||
builder.Services.AddSingleton<PuzzleMissionEvaluator>();
|
||||
|
||||
builder.Services.AddScoped<IFriendService, FriendService>();
|
||||
builder.Services.AddScoped<IPlayedTogetherWriter, FriendService>();
|
||||
|
||||
// Deck-code mint/resolve uses IMemoryCache for ephemeral (3-min TTL) storage; no DB
|
||||
// row, no migration. Singleton because the cache + RNG seam are process-wide.
|
||||
builder.Services.AddMemoryCache();
|
||||
|
||||
Reference in New Issue
Block a user