Optimized db queries

This commit is contained in:
2025-01-26 14:20:50 +01:00
parent 07afb25be2
commit 2dd3f7f5be
5 changed files with 24 additions and 7 deletions

View File

@@ -13,4 +13,10 @@ public class TimelineController(ITimelineRepository repository) : ControllerBase
return Ok(timeline); return Ok(timeline);
} }
[HttpGet("featured")]
public async Task<IActionResult> GetFeaturedTimeline(CancellationToken ct) {
var timeline = await repository.GetFeaturedTimeline(ct);
return Ok(timeline);
}
} }

View File

@@ -12,4 +12,9 @@ internal sealed class TimelineRepository(DatabaseContext context) : ITimelineRep
.ToArrayAsync(ct); .ToArrayAsync(ct);
} }
public async Task<IEnumerable<TimelineEntry>> GetFeaturedTimeline(CancellationToken ct) {
return await context.Timeline
.Where(entry => entry.Featured)
.ToArrayAsync(ct);
}
} }

View File

@@ -6,4 +6,6 @@ public interface ITimelineRepository {
Task<IEnumerable<TimelineEntry>> GetTimeline(TimelineEntryType type, CancellationToken ct); Task<IEnumerable<TimelineEntry>> GetTimeline(TimelineEntryType type, CancellationToken ct);
Task<IEnumerable<TimelineEntry>> GetFeaturedTimeline(CancellationToken ct);
} }

View File

@@ -104,12 +104,7 @@
var technologies = await TechnologyRepository.GetTechnologies(TokenSource.Token); var technologies = await TechnologyRepository.GetTechnologies(TokenSource.Token);
_technologies = technologies.Where(t => t.Featured); _technologies = technologies.Where(t => t.Featured);
var carrierTimeline = await TimelineRepository.GetTimeline(TimelineEntryType.Carrier, TokenSource.Token); _timeline = await TimelineRepository.GetFeaturedTimeline(TokenSource.Token);
var experienceTimeline = await TimelineRepository.GetTimeline(TimelineEntryType.Experience, TokenSource.Token);
_timeline = experienceTimeline
.Aggregate(carrierTimeline, (current, entry) => current.Append(entry))
.Where(t => t.Featured)
.OrderBy(t => t.Date);
} }
} }

View File

@@ -12,4 +12,13 @@ internal sealed class TimelineRepository(IHttpClientFactory factory) : ITimeline
var data = await result.Content.ReadFromJsonAsync<IEnumerable<TimelineEntry>>(ct); var data = await result.Content.ReadFromJsonAsync<IEnumerable<TimelineEntry>>(ct);
return data ?? []; return data ?? [];
} }
public async Task<IEnumerable<TimelineEntry>> GetFeaturedTimeline(CancellationToken ct) {
var client = factory.CreateClient("api");
var result = await client.GetAsync("api/timeline/featured", ct);
if (!result.IsSuccessStatusCode) return [];
var data = await result.Content.ReadFromJsonAsync<IEnumerable<TimelineEntry>>(ct);
return data ?? [];
}
} }