Data access update

main
ilitirit 1 year ago
parent 34a6068734
commit 1daa33b1f0

@ -121,29 +121,32 @@ namespace Expedience.Api.Controllers
var repository = scope.ServiceProvider.GetService<IExpedienceRepository>(); var repository = scope.ServiceProvider.GetService<IExpedienceRepository>();
var records = await repository.GetTopXRecords(recordType, territoryId, limit, cancellationToken); var records = await repository.GetTopXRecords(recordType, territoryId, limit, cancellationToken);
var results = new List<DutyCompletionResult>(); var results = new List<DutyCompletionResult>();
foreach (var record in records) foreach (var record in records)
{ {
var topXResult = record.TopXResult;
var dcr = record.DutyCompletionResult;
var dutyCompletionResult = new DutyCompletionResult var dutyCompletionResult = new DutyCompletionResult
{ {
Id = record.Id, Id = topXResult.Id,
UserId = record.UserId, UserId = topXResult.UserId,
TerritoryId = record.TerritoryId, TerritoryId = topXResult.TerritoryId,
IsMinILevel = recordType == 3, IsMinILevel = recordType == 3,
HasNpcMembers = recordType == 4, HasNpcMembers = recordType == 4,
StartTime = record.StartTime, StartTime = dcr.StartTime,
EndTime = record.EndTime, EndTime = dcr.EndTime,
Hours = record.Duration.Hours, Hours = dcr.Hours,
Minutes = record.Duration.Minutes, Minutes = dcr.Minutes,
Seconds = record.Duration.Seconds, Seconds = dcr.Seconds,
Milliseconds = record.Duration.Milliseconds, Milliseconds = dcr.Milliseconds,
GameVersion = record.GameVersion, GameVersion = dcr.GameVersion,
PluginVersion = record.PluginVersion, PluginVersion = dcr.PluginVersion,
Lang = dcr.Lang,
UploadedAt = dcr.UploadedAt,
Territory = record.Territory, Territory = record.Territory,
User = record.User, User = record.User,
DataCenter = record.DutyCompletionResult.DataCenter, DataCenter = dcr.DataCenter,
UploadedAt = record.UploadedAt,
Lang = record.DutyCompletionResult.Lang,
}; };
results.Add(dutyCompletionResult); results.Add(dutyCompletionResult);

@ -81,29 +81,6 @@ namespace Expedience.Infrastructure
{ {
cfg.HasNoKey(); cfg.HasNoKey();
cfg.ToView("TopXCompletionResults"); // This is just a placeholder name cfg.ToView("TopXCompletionResults"); // This is just a placeholder name
// If you want to include navigation properties:
cfg.HasOne(e => e.Territory)
.WithMany()
.HasForeignKey(e => e.TerritoryId)
.OnDelete(DeleteBehavior.NoAction);
cfg.HasOne(e => e.User)
.WithMany()
.HasForeignKey(e => e.UserId)
.OnDelete(DeleteBehavior.NoAction);
// Configure the relationship with DutyMembers
cfg.HasMany(e => e.DutyMembers)
.WithOne()
.HasForeignKey("UploadId") // Assuming UploadId in DutyMember corresponds to Id in TopXCompletionResult
.OnDelete(DeleteBehavior.NoAction);
// Configure the one-to-one relationship with DutyCompletionResult
cfg.HasOne(e => e.DutyCompletionResult)
.WithOne()
.HasForeignKey<TopXCompletionResult>("Id")
.OnDelete(DeleteBehavior.NoAction);
}); });
base.OnModelCreating(modelBuilder); base.OnModelCreating(modelBuilder);

@ -9,7 +9,7 @@ public interface IExpedienceRepository
{ {
ValueTask<List<DutyCompletionRecord>> GetDutyCompletionRecords(string expac, CancellationToken cancellationToken); ValueTask<List<DutyCompletionRecord>> GetDutyCompletionRecords(string expac, CancellationToken cancellationToken);
ValueTask<List<DeepDungeonRecord>> GetDeepDungeonRecords(CancellationToken cancellationToken); ValueTask<List<DeepDungeonRecord>> GetDeepDungeonRecords(CancellationToken cancellationToken);
ValueTask<List<TopXCompletionResult>> GetTopXRecords(int recordType, int territoryId, int limit, CancellationToken cancellationToken); ValueTask<List<TopXCompletionResultFull>> GetTopXRecords(int recordType, int territoryId, int limit, CancellationToken cancellationToken);
} }
public class ExpedienceRepository : IExpedienceRepository public class ExpedienceRepository : IExpedienceRepository
@ -45,7 +45,7 @@ public class ExpedienceRepository : IExpedienceRepository
return records; return records;
} }
public async ValueTask<List<TopXCompletionResult>> GetTopXRecords(int recordType, int territoryId, int limit, CancellationToken cancellationToken) public async ValueTask<List<TopXCompletionResultFull>> GetTopXRecords(int recordType, int territoryId, int limit, CancellationToken cancellationToken)
{ {
var cacheKey = $"xpd-topx-{recordType}-{territoryId}-{limit}"; var cacheKey = $"xpd-topx-{recordType}-{territoryId}-{limit}";
@ -73,15 +73,20 @@ public class ExpedienceRepository : IExpedienceRepository
.Where(u => userIds.Contains(u.UserId)) .Where(u => userIds.Contains(u.UserId))
.ToListAsync(); .ToListAsync();
// Now, associate the DutyMembers and DutyCompletionResults with their corresponding TopXCompletionResults var territory = await _dbContext.Territories
foreach (var result in topXResults) .FirstAsync(t => territoryId == t.TerritoryId);
{
result.DutyMembers = dutyMembers.Where(dm => dm.UploadId == result.Id).ToList();
result.DutyCompletionResult = dutyCompletionResults.First(dcr => dcr.Id == result.Id);
result.User = users.First(u => u.UserId == result.UserId);
}
return topXResults; // Create TopXCompletionResultFull objects
var fullResults = topXResults.Select(result => new TopXCompletionResultFull
{
TopXResult = result,
DutyMembers = dutyMembers.Where(dm => dm.UploadId == result.Id).ToList(),
DutyCompletionResult = dutyCompletionResults.First(dcr => dcr.Id == result.Id),
User = users.First(u => u.UserId == result.UserId),
Territory = territory
}).ToList();
return fullResults;
}); });
return records; return records;

@ -23,9 +23,13 @@ public class TopXCompletionResult
public string Datacenter { get; set; } public string Datacenter { get; set; }
public string PluginVersion { get; set; } public string PluginVersion { get; set; }
public string GameVersion { get; set; } public string GameVersion { get; set; }
}
public Territory Territory { get; set; } = null!; public class TopXCompletionResultFull
public User User { get; set; } = null!; {
public ICollection<DutyMember> DutyMembers { get; set; } = null!; public TopXCompletionResult TopXResult { get; set; }
public DutyCompletionResult DutyCompletionResult { get; set; } = null!; public List<DutyMember> DutyMembers { get; set; }
public DutyCompletionResult DutyCompletionResult { get; set; }
public User User { get; set; }
public Territory Territory { get; set; }
} }
Loading…
Cancel
Save