✨ Get user blocked users infra
This commit is contained in:
parent
6a9cd0905d
commit
5757526ea5
@ -7,6 +7,7 @@ namespace DysonNetwork.Sphere.Account;
|
|||||||
public class RelationshipService(AppDatabase db, ICacheService cache)
|
public class RelationshipService(AppDatabase db, ICacheService cache)
|
||||||
{
|
{
|
||||||
private const string UserFriendsCacheKeyPrefix = "accounts:friends:";
|
private const string UserFriendsCacheKeyPrefix = "accounts:friends:";
|
||||||
|
private const string UserBlockedCacheKeyPrefix = "accounts:blocked:";
|
||||||
|
|
||||||
public async Task<bool> HasExistingRelationship(Guid accountId, Guid relatedId)
|
public async Task<bool> HasExistingRelationship(Guid accountId, Guid relatedId)
|
||||||
{
|
{
|
||||||
@ -51,8 +52,7 @@ public class RelationshipService(AppDatabase db, ICacheService cache)
|
|||||||
db.AccountRelationships.Add(relationship);
|
db.AccountRelationships.Add(relationship);
|
||||||
await db.SaveChangesAsync();
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{relationship.AccountId}");
|
await PurgeRelationshipCache(sender.Id, target.Id);
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{relationship.RelatedId}");
|
|
||||||
|
|
||||||
return relationship;
|
return relationship;
|
||||||
}
|
}
|
||||||
@ -71,8 +71,7 @@ public class RelationshipService(AppDatabase db, ICacheService cache)
|
|||||||
db.Remove(relationship);
|
db.Remove(relationship);
|
||||||
await db.SaveChangesAsync();
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{sender.Id}");
|
await PurgeRelationshipCache(sender.Id, target.Id);
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{target.Id}");
|
|
||||||
|
|
||||||
return relationship;
|
return relationship;
|
||||||
}
|
}
|
||||||
@ -105,8 +104,7 @@ public class RelationshipService(AppDatabase db, ICacheService cache)
|
|||||||
.Where(r => r.AccountId == accountId && r.RelatedId == relatedId && r.Status == RelationshipStatus.Pending)
|
.Where(r => r.AccountId == accountId && r.RelatedId == relatedId && r.Status == RelationshipStatus.Pending)
|
||||||
.ExecuteDeleteAsync();
|
.ExecuteDeleteAsync();
|
||||||
|
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{accountId}");
|
await PurgeRelationshipCache(relationship.AccountId, relationship.RelatedId);
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{relatedId}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Relationship> AcceptFriendRelationship(
|
public async Task<Relationship> AcceptFriendRelationship(
|
||||||
@ -135,8 +133,7 @@ public class RelationshipService(AppDatabase db, ICacheService cache)
|
|||||||
|
|
||||||
await db.SaveChangesAsync();
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{relationship.AccountId}");
|
await PurgeRelationshipCache(relationship.AccountId, relationship.RelatedId);
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{relationship.RelatedId}");
|
|
||||||
|
|
||||||
return relationshipBackward;
|
return relationshipBackward;
|
||||||
}
|
}
|
||||||
@ -150,15 +147,14 @@ public class RelationshipService(AppDatabase db, ICacheService cache)
|
|||||||
db.Update(relationship);
|
db.Update(relationship);
|
||||||
await db.SaveChangesAsync();
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{accountId}");
|
await PurgeRelationshipCache(accountId, relatedId);
|
||||||
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{relatedId}");
|
|
||||||
|
|
||||||
return relationship;
|
return relationship;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Guid>> ListAccountFriends(Account account)
|
public async Task<List<Guid>> ListAccountFriends(Account account)
|
||||||
{
|
{
|
||||||
string cacheKey = $"{UserFriendsCacheKeyPrefix}{account.Id}";
|
var cacheKey = $"{UserFriendsCacheKeyPrefix}{account.Id}";
|
||||||
var friends = await cache.GetAsync<List<Guid>>(cacheKey);
|
var friends = await cache.GetAsync<List<Guid>>(cacheKey);
|
||||||
|
|
||||||
if (friends == null)
|
if (friends == null)
|
||||||
@ -175,10 +171,37 @@ public class RelationshipService(AppDatabase db, ICacheService cache)
|
|||||||
return friends ?? [];
|
return friends ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<List<Guid>> ListAccountBlocked(Account account)
|
||||||
|
{
|
||||||
|
var cacheKey = $"{UserBlockedCacheKeyPrefix}{account.Id}";
|
||||||
|
var blocked = await cache.GetAsync<List<Guid>>(cacheKey);
|
||||||
|
|
||||||
|
if (blocked == null)
|
||||||
|
{
|
||||||
|
blocked = await db.AccountRelationships
|
||||||
|
.Where(r => r.RelatedId == account.Id)
|
||||||
|
.Where(r => r.Status == RelationshipStatus.Blocked)
|
||||||
|
.Select(r => r.AccountId)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
await cache.SetAsync(cacheKey, blocked, TimeSpan.FromHours(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
return blocked ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> HasRelationshipWithStatus(Guid accountId, Guid relatedId,
|
public async Task<bool> HasRelationshipWithStatus(Guid accountId, Guid relatedId,
|
||||||
RelationshipStatus status = RelationshipStatus.Friends)
|
RelationshipStatus status = RelationshipStatus.Friends)
|
||||||
{
|
{
|
||||||
var relationship = await GetRelationship(accountId, relatedId, status);
|
var relationship = await GetRelationship(accountId, relatedId, status);
|
||||||
return relationship is not null;
|
return relationship is not null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task PurgeRelationshipCache(Guid accountId, Guid relatedId)
|
||||||
|
{
|
||||||
|
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{accountId}");
|
||||||
|
await cache.RemoveAsync($"{UserFriendsCacheKeyPrefix}{relatedId}");
|
||||||
|
await cache.RemoveAsync($"{UserBlockedCacheKeyPrefix}{accountId}");
|
||||||
|
await cache.RemoveAsync($"{UserBlockedCacheKeyPrefix}{relatedId}");
|
||||||
|
}
|
||||||
}
|
}
|
@ -126,7 +126,7 @@ public class ActivityService(
|
|||||||
var activities = new List<Activity>();
|
var activities = new List<Activity>();
|
||||||
var userFriends = await rels.ListAccountFriends(currentUser);
|
var userFriends = await rels.ListAccountFriends(currentUser);
|
||||||
var userPublishers = await pub.GetUserPublishers(currentUser.Id);
|
var userPublishers = await pub.GetUserPublishers(currentUser.Id);
|
||||||
debugInclude ??= new HashSet<string>();
|
debugInclude ??= [];
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(filter))
|
if (string.IsNullOrEmpty(filter))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user