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 records = await repository.GetTopXRecords(recordType, territoryId, limit, cancellationToken);
var results = new List<DutyCompletionResult>();
foreach (var record in records)
{
var topXResult = record.TopXResult;
var dcr = record.DutyCompletionResult;
var dutyCompletionResult = new DutyCompletionResult
{
Id = record.Id,
UserId = record.UserId,
TerritoryId = record.TerritoryId,
Id = topXResult.Id,
UserId = topXResult.UserId,
TerritoryId = topXResult.TerritoryId,
IsMinILevel = recordType == 3,
HasNpcMembers = recordType == 4,
StartTime = record.StartTime,
EndTime = record.EndTime,
Hours = record.Duration.Hours,
Minutes = record.Duration.Minutes,
Seconds = record.Duration.Seconds,
Milliseconds = record.Duration.Milliseconds,
GameVersion = record.GameVersion,
PluginVersion = record.PluginVersion,
StartTime = dcr.StartTime,
EndTime = dcr.EndTime,
Hours = dcr.Hours,
Minutes = dcr.Minutes,
Seconds = dcr.Seconds,
Milliseconds = dcr.Milliseconds,
GameVersion = dcr.GameVersion,
PluginVersion = dcr.PluginVersion,
Lang = dcr.Lang,
UploadedAt = dcr.UploadedAt,
Territory = record.Territory,
User = record.User,
DataCenter = record.DutyCompletionResult.DataCenter,
UploadedAt = record.UploadedAt,
Lang = record.DutyCompletionResult.Lang,
DataCenter = dcr.DataCenter,
};
results.Add(dutyCompletionResult);

@ -81,29 +81,6 @@ namespace Expedience.Infrastructure
{
cfg.HasNoKey();
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);

@ -9,7 +9,7 @@ public interface IExpedienceRepository
{
ValueTask<List<DutyCompletionRecord>> GetDutyCompletionRecords(string expac, 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
@ -45,7 +45,7 @@ public class ExpedienceRepository : IExpedienceRepository
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}";
@ -73,15 +73,20 @@ public class ExpedienceRepository : IExpedienceRepository
.Where(u => userIds.Contains(u.UserId))
.ToListAsync();
// Now, associate the DutyMembers and DutyCompletionResults with their corresponding TopXCompletionResults
foreach (var result in topXResults)
{
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);
}
var territory = await _dbContext.Territories
.FirstAsync(t => territoryId == t.TerritoryId);
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;

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