Files
kjh2064 3f293d8aa8
deploy / deploy (push) Successful in 1m52s
deploy / notify (push) Successful in 1s
V13-FE-006: consolidate approved UI and contract hardening
2026-08-13 02:41:00 +09:00

33 lines
1.4 KiB
C#

using Dapper;
using FastEndpoints;
using Npgsql;
namespace Modules.OMS.Lookups.Customers;
public sealed class Endpoint(NpgsqlDataSource dataSource) : EndpointWithoutRequest
{
public override void Configure()
{
Get("/api/lookups/customers");
Permissions("oms.order.read");
}
public override async Task HandleAsync(CancellationToken ct)
{
var query = Query<string>("query", false) ?? string.Empty;
var page = Math.Max(1, Query<int>("page", false));
var pageSize = Math.Clamp(Query<int>("pageSize", false), 1, 100);
await using var connection = await dataSource.OpenConnectionAsync(ct);
var items = (await connection.QueryAsync(new CommandDefinition(@"
select id, code, name as DisplayName, case when is_active then '사용' else '중지' end as Status
from oms.customers
where is_active = true and (@Query = '' or code ilike '%' || @Query || '%' or name ilike '%' || @Query || '%')
order by code
offset @Offset limit @PageSize;", new { Query = query, Offset = (page - 1) * pageSize, PageSize = pageSize }, cancellationToken: ct))).ToArray();
var count = await connection.ExecuteScalarAsync<int>(new CommandDefinition(@"
select count(*) from oms.customers
where is_active = true and (@Query = '' or code ilike '%' || @Query || '%' or name ilike '%' || @Query || '%');", new { Query = query }, cancellationToken: ct));
await Send.OkAsync(new { items, totalCount = count }, ct);
}
}