chore: 优化公告已读批量与用户维度

This commit is contained in:
2025-12-03 21:13:52 +08:00
parent 9fe7d9606d
commit a3dc5f54e5
4 changed files with 82 additions and 15 deletions

View File

@@ -20,6 +20,32 @@ public sealed class EfTenantAnnouncementReadRepository(TakeoutAppDbContext conte
.ContinueWith(t => (IReadOnlyList<TenantAnnouncementRead>)t.Result, cancellationToken);
}
public Task<IReadOnlyList<TenantAnnouncementRead>> GetByAnnouncementAsync(long tenantId, IEnumerable<long> announcementIds, long? userId, CancellationToken cancellationToken = default)
{
var ids = announcementIds.Distinct().ToArray();
if (ids.Length == 0)
{
return Task.FromResult<IReadOnlyList<TenantAnnouncementRead>>(Array.Empty<TenantAnnouncementRead>());
}
var query = context.TenantAnnouncementReads.AsNoTracking()
.Where(x => x.TenantId == tenantId && ids.Contains(x.AnnouncementId));
if (userId.HasValue)
{
query = query.Where(x => x.UserId == userId.Value);
}
else
{
query = query.Where(x => x.UserId == null);
}
return query
.OrderByDescending(x => x.ReadAt)
.ToListAsync(cancellationToken)
.ContinueWith(t => (IReadOnlyList<TenantAnnouncementRead>)t.Result, cancellationToken);
}
public Task<TenantAnnouncementRead?> FindAsync(long tenantId, long announcementId, long? userId, CancellationToken cancellationToken = default)
{
return context.TenantAnnouncementReads