✨ Chat room member managements
This commit is contained in:
@@ -19,9 +19,11 @@ public class Realm : ModelBase
|
||||
public bool IsCommunity { get; set; }
|
||||
public bool IsPublic { get; set; }
|
||||
|
||||
public string? PictureId { get; set; }
|
||||
public CloudFile? Picture { get; set; }
|
||||
public string? BackgroundId { get; set; }
|
||||
public CloudFile? Background { get; set; }
|
||||
|
||||
|
||||
[JsonIgnore] public ICollection<RealmMember> Members { get; set; } = new List<RealmMember>();
|
||||
[JsonIgnore] public ICollection<ChatRoom> ChatRooms { get; set; } = new List<ChatRoom>();
|
||||
|
||||
@@ -39,10 +41,10 @@ public enum RealmMemberRole
|
||||
public class RealmMember : ModelBase
|
||||
{
|
||||
public long RealmId { get; set; }
|
||||
[JsonIgnore] public Realm Realm { get; set; } = null!;
|
||||
[JsonIgnore] public Realm Realm { get; set; } = null!;
|
||||
public long AccountId { get; set; }
|
||||
[JsonIgnore] public Account.Account Account { get; set; } = null!;
|
||||
|
||||
|
||||
public RealmMemberRole Role { get; set; } = RealmMemberRole.Normal;
|
||||
public Instant? JoinedAt { get; set; }
|
||||
}
|
@@ -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; }
|
||||
|
@@ -1,5 +1,12 @@
|
||||
using DysonNetwork.Sphere.Account;
|
||||
|
||||
namespace DysonNetwork.Sphere.Realm;
|
||||
|
||||
public class RealmService(AppDatabase db)
|
||||
public class RealmService(AppDatabase db, NotificationService nty)
|
||||
{
|
||||
public async Task SendInviteNotify(RealmMember member)
|
||||
{
|
||||
await nty.SendNotification(member.Account, "invites.realms", "New Realm Invitation", null,
|
||||
$"You just got invited to join {member.Realm.Name}");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user