feat: Phase 8 ConsultingActivity (6 endpoints) - Total: 50/73
TaxBaik CI/CD / build-and-deploy (push) Failing after 2m7s

This commit is contained in:
2026-07-03 17:30:28 +09:00
parent 6f125e485b
commit d31e18e88b
2 changed files with 82 additions and 0 deletions
@@ -0,0 +1,82 @@
using FastEndpoints;
using TaxBaik.Application.Services;
namespace TaxBaik.Web.Endpoints.ConsultingActivity;
public class Req { public int ClientId { get; set; } public string? Topic { get; set; } public string? Notes { get; set; } public DateTime ActivityDate { get; set; } }
public class Resp { public List<object> Data { get; set; } = []; }
public class IdResp { public int Id { get; set; } }
public class Qry { public int DaysAhead { get; set; } = 30; }
public class CreateEp : Endpoint<Req, IdResp>
{
readonly ConsultingActivityService _s;
public CreateEp(ConsultingActivityService s) => _s = s;
public override void Configure() { Post("/api/consultingactivity"); Policies("Bearer"); }
public override async Task HandleAsync(Req r, CancellationToken ct)
{
var id = await _s.CreateAsync(r.ClientId, r.Topic, r.Notes, r.ActivityDate);
await SendAsync(new IdResp { Id = id }, 201, cancellation: ct);
}
}
public class GetAllEp : Endpoint<EmptyRequest, Resp>
{
readonly ConsultingActivityService _s;
public GetAllEp(ConsultingActivityService s) => _s = s;
public override void Configure() { Get("/api/consultingactivity"); Policies("Bearer"); }
public override async Task HandleAsync(EmptyRequest _, CancellationToken ct)
{
var items = await _s.GetAllAsync();
await SendAsync(new Resp { Data = items.Cast<object>().ToList() }, 200, cancellation: ct);
}
}
public class GetByIdEp : Endpoint<EmptyRequest, object>
{
readonly ConsultingActivityService _s;
public GetByIdEp(ConsultingActivityService s) => _s = s;
public override void Configure() { Get("/api/consultingactivity/{id}"); Policies("Bearer"); }
public override async Task HandleAsync(EmptyRequest _, CancellationToken ct)
{
var item = await _s.GetByIdAsync(Route<int>("id"));
if (item == null) ThrowError("활동을 찾을 수 없습니다.", statusCode: 404);
await SendAsync(item, 200, cancellation: ct);
}
}
public class GetByClientEp : Endpoint<EmptyRequest, Resp>
{
readonly ConsultingActivityService _s;
public GetByClientEp(ConsultingActivityService s) => _s = s;
public override void Configure() { Get("/api/consultingactivity/client/{clientId}"); Policies("Bearer"); }
public override async Task HandleAsync(EmptyRequest _, CancellationToken ct)
{
var items = await _s.GetByClientIdAsync(Route<int>("clientId"));
await SendAsync(new Resp { Data = items.Cast<object>().ToList() }, 200, cancellation: ct);
}
}
public class GetRecentEp : Endpoint<Qry, Resp>
{
readonly ConsultingActivityService _s;
public GetRecentEp(ConsultingActivityService s) => _s = s;
public override void Configure() { Get("/api/consultingactivity/recent"); Policies("Bearer"); }
public override async Task HandleAsync(Qry q, CancellationToken ct)
{
var items = await _s.GetRecentActivitiesAsync(q.DaysAhead);
await SendAsync(new Resp { Data = items.Cast<object>().ToList() }, 200, cancellation: ct);
}
}
public class GetPendingFollowupsEp : Endpoint<EmptyRequest, Resp>
{
readonly ConsultingActivityService _s;
public GetPendingFollowupsEp(ConsultingActivityService s) => _s = s;
public override void Configure() { Get("/api/consultingactivity/pending-followups"); Policies("Bearer"); }
public override async Task HandleAsync(EmptyRequest _, CancellationToken ct)
{
var items = await _s.GetPendingFollowupsAsync();
await SendAsync(new Resp { Data = items.Cast<object>().ToList() }, 200, cancellation: ct);
}
}