Chat room member managements

This commit is contained in:
2025-05-03 20:42:52 +08:00
parent 196547e50f
commit fa5c59a9c8
28 changed files with 429 additions and 15542 deletions

View File

@ -34,8 +34,6 @@ public class RealmController(AppDatabase db, RealmService rs, FileService fs) :
.Where(m => m.AccountId == userId)
.Where(m => m.JoinedAt != null)
.Include(e => e.Realm)
.Include(e => e.Realm.Picture)
.Include(e => e.Realm.Background)
.Select(m => m.Realm)
.ToListAsync();
@ -55,8 +53,6 @@ public class RealmController(AppDatabase db, RealmService rs, FileService fs) :
.Where(m => m.AccountId == userId)
.Where(m => m.JoinedAt == null)
.Include(e => e.Realm)
.Include(e => e.Realm.Picture)
.Include(e => e.Realm.Background)
.ToListAsync();
return members.ToList();
@ -81,8 +77,6 @@ public class RealmController(AppDatabase db, RealmService rs, FileService fs) :
var realm = await db.Realms
.Where(p => p.Slug == slug)
.Include(publisher => publisher.Picture)
.Include(publisher => publisher.Background)
.FirstOrDefaultAsync();
if (realm is null) return NotFound();
@ -107,6 +101,9 @@ public class RealmController(AppDatabase db, RealmService rs, FileService fs) :
db.RealmMembers.Add(newMember);
await db.SaveChangesAsync();
newMember.Account = relatedUser;
await rs.SendInviteNotify(newMember);
return Ok(newMember);
}
@ -151,6 +148,29 @@ public class RealmController(AppDatabase db, RealmService rs, FileService fs) :
return NoContent();
}
[HttpDelete("{slug}/members/me")]
[Authorize]
public async Task<ActionResult> LeaveRealm(string slug)
{
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
var userId = currentUser.Id;
var member = await db.RealmMembers
.Where(m => m.AccountId == userId)
.Where(m => m.Realm.Slug == slug)
.Where(m => m.JoinedAt != null)
.FirstOrDefaultAsync();
if (member is null) return NotFound();
if (member.Role == RealmMemberRole.Owner)
return StatusCode(403, "Owner cannot leave their own realm.");
db.RealmMembers.Remove(member);
await db.SaveChangesAsync();
return NoContent();
}
public class RealmRequest
{
[MaxLength(1024)] public string? Slug { get; set; }