diff --git a/src/PostIt/PostIt/Views/ActivitiesPage.axaml b/src/PostIt/PostIt/Views/ActivitiesPage.axaml
index 03248a0e..d3cddb30 100644
--- a/src/PostIt/PostIt/Views/ActivitiesPage.axaml
+++ b/src/PostIt/PostIt/Views/ActivitiesPage.axaml
@@ -72,7 +72,16 @@
-
+
diff --git a/src/Yavsc.Api/Controllers/Business/ActivityApiController.cs b/src/Yavsc.Api/Controllers/Business/ActivityApiController.cs
index abd5f28c..d2e3dcea 100644
--- a/src/Yavsc.Api/Controllers/Business/ActivityApiController.cs
+++ b/src/Yavsc.Api/Controllers/Business/ActivityApiController.cs
@@ -44,19 +44,23 @@ namespace Yavsc.Controllers
var codes = activities
.Select(a => a.Code)
- .Concat(activities.SelectMany(a => a.Children.Where(c => !c.Hidden).Select(c => c.Code)))
+ .Concat(activities.SelectMany(a => (a.Children ?? new List())
+ .Where(c => !c.Hidden)
+ .Select(c => c.Code)))
+ .Where(c => !string.IsNullOrWhiteSpace(c))
.Distinct()
.ToArray();
- var performerCounts = await _context.Performers
- .AsNoTracking()
- .Where(p => p.Active)
- .SelectMany(
- p => p.Activity
- .Where(a => codes.Contains(a.DoesCode))
- .Select(a => new { a.DoesCode, p.PerformerId }))
- .GroupBy(x => x.DoesCode)
- .Select(g => new { Code = g.Key, Count = g.Select(x => x.PerformerId).Distinct().Count() })
+ var performerCounts = await (
+ from ua in _context.UserActivities.AsNoTracking()
+ join p in _context.Performers.AsNoTracking() on ua.UserId equals p.PerformerId
+ where p.Active && !string.IsNullOrWhiteSpace(ua.DoesCode) && codes.Contains(ua.DoesCode)
+ group ua by ua.DoesCode into g
+ select new
+ {
+ Code = g.Key,
+ Count = g.Select(x => x.UserId).Distinct().Count()
+ })
.ToDictionaryAsync(x => x.Code, x => x.Count, cancellationToken);
return Ok(activities.Select(a => ToBrowseItem(a, performerCounts)).ToList());
@@ -80,29 +84,32 @@ namespace Yavsc.Controllers
return NotFound();
}
- var performers = await _context.Performers
- .AsNoTracking()
- .Include(p => p.Performer)
- .Include(p => p.Activity)
- .ThenInclude(a => a.Does)
- .Where(p => p.Active && p.Activity.Any(a => a.DoesCode == id))
- .OrderBy(p => p.Rate)
- .Select(p => new ActivityPerformerDto
+ var performers = await (
+ from p in _context.Performers.AsNoTracking()
+ join ua in _context.UserActivities.AsNoTracking() on p.PerformerId equals ua.UserId
+ join u in _context.ApplicationUser.AsNoTracking() on p.PerformerId equals u.Id into users
+ from user in users.DefaultIfEmpty()
+ where p.Active && ua.DoesCode == id
+ orderby p.Rate
+ select new ActivityPerformerDto
{
PerformerId = p.PerformerId,
- UserName = p.Performer.UserName,
+ UserName = user != null ? (user.UserName ?? string.Empty) : string.Empty,
Active = p.Active,
AcceptNotifications = p.AcceptNotifications,
AcceptPublicContact = p.AcceptPublicContact,
- WebSite = p.WebSite,
+ WebSite = p.WebSite ?? string.Empty,
ActivityCode = id,
ActivityName = activity.Name,
- SettingsClassName = p.Activity
- .Where(a => a.DoesCode == id)
- .Select(a => a.Does.SettingsClassName)
- .FirstOrDefault(),
- ExtraActivityCount = p.Activity.Count(a => a.DoesCode != id)
+ SettingsClassName = _context.Activities
+ .Where(a => a.Code == id)
+ .Select(a => a.SettingsClassName)
+ .FirstOrDefault() ?? string.Empty,
+ ExtraActivityCount = _context.UserActivities
+ .Where(x => x.UserId == p.PerformerId && x.DoesCode != id)
+ .Count()
})
+ .Distinct()
.ToListAsync(cancellationToken);
return Ok(performers);
@@ -240,7 +247,7 @@ namespace Yavsc.Controllers
Photo = activity.Photo,
Rate = activity.Rate,
PerformerCount = performerCounts.TryGetValue(activity.Code, out var count) ? count : 0,
- Forms = activity.Forms
+ Forms = (activity.Forms ?? Enumerable.Empty())
.Select(f => new CommandFormSummaryDto
{
Id = f.Id,
@@ -248,7 +255,7 @@ namespace Yavsc.Controllers
Title = f.Title,
})
.ToList(),
- Children = activity.Children
+ Children = (activity.Children ?? Enumerable.Empty())
.Where(c => !c.Hidden)
.OrderByDescending(c => c.Rate)
.Select(c => new ActivityBrowseItemDto
@@ -260,7 +267,7 @@ namespace Yavsc.Controllers
Photo = c.Photo,
Rate = c.Rate,
PerformerCount = performerCounts.TryGetValue(c.Code, out var childCount) ? childCount : 0,
- Forms = c.Forms
+ Forms = (c.Forms ?? Enumerable.Empty())
.Select(f => new CommandFormSummaryDto
{
Id = f.Id,
diff --git a/src/Yavsc.Api/Program.cs b/src/Yavsc.Api/Program.cs
index 3ed20e8d..8db29e53 100644
--- a/src/Yavsc.Api/Program.cs
+++ b/src/Yavsc.Api/Program.cs
@@ -72,9 +72,10 @@ internal class Program
services.AddAuthentication("Bearer")
.AddYavscJwtBearer(builder.Configuration);
+ // DbContextBuilder
services.AddDbContext(options =>
-
- options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
+ options.UseNpgsql(builder.Configuration.GetConnectionString(
+ Yavsc.Constants.YavscConnectionStringName)));
services.AddLocalization(options =>
{