From f5b04fa745650854f68ece151b79726badfbd922 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 14 Jun 2025 11:49:20 +0800 Subject: [PATCH] :sparkles: Get user's relationship API one to one --- .../Account/RelationshipController.cs | 50 ++++++++++++------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/DysonNetwork.Sphere/Account/RelationshipController.cs b/DysonNetwork.Sphere/Account/RelationshipController.cs index 127a8ff..28a9e17 100644 --- a/DysonNetwork.Sphere/Account/RelationshipController.cs +++ b/DysonNetwork.Sphere/Account/RelationshipController.cs @@ -40,13 +40,13 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : return relationships; } - + [HttpGet("requests")] [Authorize] public async Task>> ListSentRequests() { if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); - + var relationships = await db.AccountRelationships .Where(r => r.AccountId == currentUser.Id && r.Status == RelationshipStatus.Pending) .Include(r => r.Related) @@ -54,7 +54,7 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : .Include(r => r.Account) .Include(r => r.Account.Profile) .ToListAsync(); - + return relationships; } @@ -65,7 +65,8 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : [HttpPost("{userId:guid}")] [Authorize] - public async Task> CreateRelationship(Guid userId, [FromBody] RelationshipRequest request) + public async Task> CreateRelationship(Guid userId, + [FromBody] RelationshipRequest request) { if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); @@ -84,13 +85,14 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : return BadRequest(err.Message); } } - + [HttpPatch("{userId:guid}")] [Authorize] - public async Task> UpdateRelationship(Guid userId, [FromBody] RelationshipRequest request) + public async Task> UpdateRelationship(Guid userId, + [FromBody] RelationshipRequest request) { if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); - + try { var relationship = await rels.UpdateRelationship(currentUser.Id, userId, request.Status); @@ -105,7 +107,19 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : return BadRequest(err.Message); } } - + + [HttpGet("{userId:guid}")] + [Authorize] + public async Task> GetRelationship(Guid userId) + { + if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); + + var relationship = await rels.GetRelationship(currentUser.Id, userId); + if (relationship is null) return NotFound(); + + return relationship; + } + [HttpPost("{userId:guid}/friends")] [Authorize] public async Task> SendFriendRequest(Guid userId) @@ -114,9 +128,9 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : var relatedUser = await db.Accounts.FindAsync(userId); if (relatedUser is null) return NotFound("Account was not found."); - - var existing = await db.AccountRelationships.FirstOrDefaultAsync(r => - (r.AccountId == currentUser.Id && r.RelatedId == userId) || + + var existing = await db.AccountRelationships.FirstOrDefaultAsync(r => + (r.AccountId == currentUser.Id && r.RelatedId == userId) || (r.AccountId == userId && r.RelatedId == currentUser.Id)); if (existing != null) return BadRequest("Relationship already exists."); @@ -130,13 +144,13 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : return BadRequest(err.Message); } } - + [HttpDelete("{userId:guid}/friends")] [Authorize] public async Task DeleteFriendRequest(Guid userId) { if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); - + try { await rels.DeleteFriendRequest(currentUser.Id, userId); @@ -156,7 +170,7 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : var relationship = await rels.GetRelationship(userId, currentUser.Id, RelationshipStatus.Pending); if (relationship is null) return NotFound("Friend request was not found."); - + try { relationship = await rels.AcceptFriendRelationship(relationship); @@ -176,7 +190,7 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : var relationship = await rels.GetRelationship(userId, currentUser.Id, RelationshipStatus.Pending); if (relationship is null) return NotFound("Friend request was not found."); - + try { relationship = await rels.AcceptFriendRelationship(relationship, status: RelationshipStatus.Blocked); @@ -187,16 +201,16 @@ public class RelationshipController(AppDatabase db, RelationshipService rels) : return BadRequest(err.Message); } } - + [HttpPost("{userId:guid}/block")] [Authorize] public async Task> BlockUser(Guid userId) { if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); - + var relatedUser = await db.Accounts.FindAsync(userId); if (relatedUser is null) return NotFound("Account was not found."); - + try { var relationship = await rels.BlockAccount(currentUser, relatedUser);