✨ Search publishers endpoint
🎨 Optimize publishers code structure
This commit is contained in:
@@ -68,7 +68,7 @@ public class AccountPublicController(
|
||||
}
|
||||
|
||||
[HttpGet("search")]
|
||||
public async Task<List<SnAccount>> Search([FromQuery] string query, [FromQuery] int take = 20)
|
||||
public async Task<List<SnAccount>> SearchAccounts([FromQuery] string query, [FromQuery] int take = 20)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(query))
|
||||
return [];
|
||||
|
||||
@@ -51,4 +51,4 @@ public class RemoteAccountService(AccountService.AccountServiceClient accounts)
|
||||
.Select(SnAccountStatus.FromProtoValue)
|
||||
.ToDictionary(s => s.AccountId, s => s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,53 +24,6 @@ public class PublisherController(
|
||||
IServiceScopeFactory factory
|
||||
) : ControllerBase
|
||||
{
|
||||
[HttpGet("{name}")]
|
||||
public async Task<ActionResult<SnPublisher>> GetPublisher(string name)
|
||||
{
|
||||
var publisher = await db.Publishers.Where(e => e.Name == name).FirstOrDefaultAsync();
|
||||
if (publisher is null)
|
||||
return NotFound();
|
||||
if (publisher.AccountId is null)
|
||||
return Ok(publisher);
|
||||
|
||||
var account = await accounts.GetAccountAsync(
|
||||
new GetAccountRequest { Id = publisher.AccountId.Value.ToString() }
|
||||
);
|
||||
publisher.Account = SnAccount.FromProtoValue(account);
|
||||
|
||||
return Ok(publisher);
|
||||
}
|
||||
|
||||
[HttpGet("{name}/heatmap")]
|
||||
public async Task<ActionResult<ActivityHeatmap>> GetPublisherHeatmap(string name)
|
||||
{
|
||||
var heatmap = await ps.GetPublisherHeatmap(name);
|
||||
if (heatmap is null)
|
||||
return NotFound();
|
||||
return Ok(heatmap);
|
||||
}
|
||||
|
||||
[HttpGet("{name}/stats")]
|
||||
public async Task<ActionResult<PublisherService.PublisherStats>> GetPublisherStats(string name)
|
||||
{
|
||||
var stats = await ps.GetPublisherStats(name);
|
||||
if (stats is null)
|
||||
return NotFound();
|
||||
return Ok(stats);
|
||||
}
|
||||
|
||||
[HttpGet("of/{accountId:guid}")]
|
||||
public async Task<ActionResult<List<SnPublisher>>> GetAccountManagedPublishers(Guid accountId)
|
||||
{
|
||||
var members = await db
|
||||
.PublisherMembers.Where(m => m.AccountId == accountId)
|
||||
.Where(m => m.JoinedAt != null)
|
||||
.Include(e => e.Publisher)
|
||||
.ToListAsync();
|
||||
|
||||
return members.Select(m => m.Publisher).ToList();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Authorize]
|
||||
public async Task<ActionResult<List<SnPublisher>>> ListManagedPublishers()
|
||||
@@ -111,7 +64,7 @@ public class PublisherController(
|
||||
public Guid RelatedUserId { get; set; }
|
||||
|
||||
[Required]
|
||||
public Shared.Models.PublisherMemberRole Role { get; set; }
|
||||
public PublisherMemberRole Role { get; set; }
|
||||
}
|
||||
|
||||
[HttpPost("invites/{name}")]
|
||||
@@ -948,4 +901,3 @@ public class PublisherController(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
69
DysonNetwork.Sphere/Publisher/PublisherPublicController.cs
Normal file
69
DysonNetwork.Sphere/Publisher/PublisherPublicController.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using DysonNetwork.Shared.Models;
|
||||
using DysonNetwork.Shared.Registry;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace DysonNetwork.Sphere.Publisher;
|
||||
|
||||
[ApiController]
|
||||
[Route("/api/publishers")]
|
||||
public class PublisherPublicController(AppDatabase db, RemoteAccountService accounts, PublisherService ps) : ControllerBase
|
||||
{
|
||||
[HttpGet("search")]
|
||||
public async Task<ActionResult<List<SnPublisher>>> SearchPublishers([FromQuery] string query, [FromQuery] int take = 20)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(query))
|
||||
return Ok(new List<SnPublisher>());
|
||||
var publishers = await db.Publishers
|
||||
.Where(a => EF.Functions.ILike(a.Name, $"%{query}%") ||
|
||||
EF.Functions.ILike(a.Nick, $"%{query}%") ||
|
||||
(a.Bio != null && EF.Functions.ILike(a.Bio, $"%{query}%")))
|
||||
.Take(take)
|
||||
.ToListAsync();
|
||||
return Ok(publishers);
|
||||
}
|
||||
|
||||
[HttpGet("{name}")]
|
||||
public async Task<ActionResult<SnPublisher>> GetPublisher(string name)
|
||||
{
|
||||
var publisher = await db.Publishers.Where(e => e.Name == name).FirstOrDefaultAsync();
|
||||
if (publisher is null)
|
||||
return NotFound();
|
||||
if (publisher.AccountId is null)
|
||||
return Ok(publisher);
|
||||
|
||||
publisher.Account = SnAccount.FromProtoValue(await accounts.GetAccount(publisher.AccountId.Value));
|
||||
|
||||
return Ok(publisher);
|
||||
}
|
||||
|
||||
[HttpGet("{name}/heatmap")]
|
||||
public async Task<ActionResult<ActivityHeatmap>> GetPublisherHeatmap(string name)
|
||||
{
|
||||
var heatmap = await ps.GetPublisherHeatmap(name);
|
||||
if (heatmap is null)
|
||||
return NotFound();
|
||||
return Ok(heatmap);
|
||||
}
|
||||
|
||||
[HttpGet("{name}/stats")]
|
||||
public async Task<ActionResult<PublisherService.PublisherStats>> GetPublisherStats(string name)
|
||||
{
|
||||
var stats = await ps.GetPublisherStats(name);
|
||||
if (stats is null)
|
||||
return NotFound();
|
||||
return Ok(stats);
|
||||
}
|
||||
|
||||
[HttpGet("of/{accountId:guid}")]
|
||||
public async Task<ActionResult<List<SnPublisher>>> GetAccountManagedPublishers(Guid accountId)
|
||||
{
|
||||
var members = await db
|
||||
.PublisherMembers.Where(m => m.AccountId == accountId)
|
||||
.Where(m => m.JoinedAt != null)
|
||||
.Include(e => e.Publisher)
|
||||
.ToListAsync();
|
||||
|
||||
return members.Select(m => m.Publisher).ToList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user