Skip to content

Commit e0fed10

Browse files
committed
fix: setup the persons by audience custom result as model the efcore can handle
1 parent 8c3cead commit e0fed10

3 files changed

Lines changed: 21 additions & 10 deletions

File tree

VirtualFinland.UserAPI/src/VirtualFinland.UsersAPI/Data/UsersDBContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore;
22
using Microsoft.EntityFrameworkCore;
33
using VirtualFinland.UserAPI.Data.Configuration;
4+
using VirtualFinland.UserAPI.Data.Virtual;
45
using VirtualFinland.UserAPI.Models.UsersDatabase;
56
using VirtualFinland.UserAPI.Security.Models;
67

@@ -33,6 +34,7 @@ public UsersDbContext(DbContextOptions options, bool isTesting) : base(options)
3334
public DbSet<TermsOfService> TermsOfServices => Set<TermsOfService>();
3435
public DbSet<PersonTermsOfServiceAgreement> PersonTermsOfServiceAgreements => Set<PersonTermsOfServiceAgreement>();
3536
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
37+
public DbSet<PersonsByAudiencesResult> PersonsByAudiencesResults => Set<PersonsByAudiencesResult>();
3638

3739
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
3840
{
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
using Microsoft.EntityFrameworkCore;
3+
4+
namespace VirtualFinland.UserAPI.Data.Virtual;
5+
6+
[Keyless]
7+
public class PersonsByAudiencesResult
8+
{
9+
public string? Audience { get; set; }
10+
public int Amount { get; set; }
11+
}

VirtualFinland.UsersAPI.AdminFunction/AdminApp/Actions/UpdateAnalyticsAction.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,12 @@ public async Task Execute(string? _)
7474
});
7575
}
7676

77-
var personsCountByAudiences = await _dataContext.ExternalIdentities
78-
.SelectMany(e => e.Audiences, (entity, textValue) => new { entity, textValue })
79-
.GroupBy(x => x.textValue)
80-
.Select(group => new
81-
{
82-
Audience = group.Key,
83-
Count = group.Count()
84-
}).ToListAsync();
77+
var rawQuery = @"
78+
SELECT COUNT(*) AS Amount, regexp_split_to_table(""Audiences"", ',') AS Audience
79+
FROM ""ExternalIdentities""
80+
GROUP BY Audience;
81+
";
82+
var personsCountByAudiences = _dataContext.PersonsByAudiencesResults.FromSqlRaw(rawQuery).ToList();
8583

8684
foreach (var personsCountByAudience in personsCountByAudiences)
8785
{
@@ -90,11 +88,11 @@ public async Task Execute(string? _)
9088
continue;
9189
}
9290

93-
_logger.LogInformation("PersonsCountByAudience: {Audience} {Count}", personsCountByAudience.Audience, personsCountByAudience.Count);
91+
_logger.LogInformation("PersonsCountByAudience: {Audience} {Amount}", personsCountByAudience.Audience, personsCountByAudience.Amount);
9492
metricData.Add(new()
9593
{
9694
MetricName = "PersonsCountByAudience",
97-
Value = personsCountByAudience.Count,
95+
Value = personsCountByAudience.Amount,
9896
Unit = StandardUnit.None,
9997
TimestampUtc = DateTime.UtcNow,
10098
Dimensions = new List<Dimension>()

0 commit comments

Comments
 (0)