using DysonNetwork.Sphere.Chat; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace DysonNetwork.Sphere.Realm; [ApiController] [Route("/realm/{slug}")] public class RealmChatController(AppDatabase db) : ControllerBase { [HttpGet("chat")] [Authorize] public async Task>> ListRealmChat(string slug) { var currentUser = HttpContext.Items["CurrentUser"] as Account.Account; var realm = await db.Realms .Where(r => r.Slug == slug) .FirstOrDefaultAsync(); if (realm is null) return NotFound(); if (!realm.IsPublic) { if (currentUser is null) return Unauthorized(); var member = await db.ChatMembers .Where(m => m.ChatRoomId == realm.Id) .Where(m => m.AccountId == currentUser.Id) .FirstOrDefaultAsync(); if (member is null) return BadRequest("You need at least one member to view the realm's chat."); } var chatRooms = await db.ChatRooms .Where(c => c.RealmId == realm.Id) .ToListAsync(); return Ok(chatRooms); } }