♻️ Remove the discovery service in the Sphere.

This commit is contained in:
2026-01-06 22:32:02 +08:00
parent 6b592156c9
commit 0cc6f86f3b
9 changed files with 58 additions and 55 deletions

View File

@@ -0,0 +1,37 @@
using DysonNetwork.Shared.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace DysonNetwork.Pass.Realm;
[ApiController]
[Route("api/realms/discovery")]
public class RealmDiscoveryController(AppDatabase db) : ControllerBase
{
[HttpGet]
public async Task<ActionResult<List<SnRealm>>> GetRealmDiscovery(
[FromQuery] string? query,
[FromQuery] int take = 10,
[FromQuery] int offset = 0
)
{
var realmsQuery = db.Realms
.Where(r => r.IsCommunity)
.OrderByDescending(r => r.Members.Count)
.AsQueryable();
if (!string.IsNullOrWhiteSpace(query))
realmsQuery = realmsQuery.Where(r =>
EF.Functions.ILike(r.Name, $"%{query}%") ||
EF.Functions.ILike(r.Description, $"%{query}%")
);
var totalCount = await realmsQuery.CountAsync();
Response.Headers["X-Total"] = totalCount.ToString();
var realms = await realmsQuery
.Take(take)
.Skip(offset)
.ToListAsync();
return Ok(realms);
}
}

View File

@@ -68,24 +68,30 @@ public class RealmServiceGrpc(
return new GetUserRealmsResponse { RealmIds = { realms.Select(g => g.ToString()) } };
}
public override Task<GetPublicRealmsResponse> GetPublicRealms(
public override async Task<GetPublicRealmsResponse> GetPublicRealms(
GetPublicRealmsRequest request,
ServerCallContext context
)
{
var realmsQueryable = db.Realms.Where(r => r.IsPublic).AsQueryable();
var realmsQuery = db.Realms.AsQueryable();
realmsQueryable = request.OrderBy switch
realmsQuery = request.IsCommunity ?
realmsQuery.Where(r => r.IsCommunity) :
realmsQuery.Where(r => r.IsPublic);
realmsQuery = request.OrderBy switch
{
"random" => realmsQueryable.OrderBy(_ => EF.Functions.Random()),
"name" => realmsQueryable.OrderBy(r => r.Name),
"popularity" => realmsQueryable.OrderByDescending(r => r.Members.Count),
_ => realmsQueryable.OrderByDescending(r => r.CreatedAt)
"random" => realmsQuery.OrderBy(_ => EF.Functions.Random()),
"name" => realmsQuery.OrderBy(r => r.Name),
"popularity" => realmsQuery.OrderByDescending(r => r.Members.Count),
_ => realmsQuery.OrderByDescending(r => r.CreatedAt)
};
var realms = await realmsQuery.Take(request.Take).ToListAsync();
var response = new GetPublicRealmsResponse();
response.Realms.AddRange(realmsQueryable.Select(r => r.ToProtoValue()));
return Task.FromResult(response);
response.Realms.AddRange(realms.Select(r => r.ToProtoValue()));
return response;
}
public override async Task<GetPublicRealmsResponse> SearchRealms(SearchRealmsRequest request,