diff --git a/src/TaxBaik.Web/Controllers/ConsultingActivityController.cs b/src/TaxBaik.Web/Controllers/ConsultingActivityController.cs.bak similarity index 100% rename from src/TaxBaik.Web/Controllers/ConsultingActivityController.cs rename to src/TaxBaik.Web/Controllers/ConsultingActivityController.cs.bak diff --git a/src/TaxBaik.Web/Endpoints/ConsultingActivity/AllEndpoints.cs b/src/TaxBaik.Web/Endpoints/ConsultingActivity/AllEndpoints.cs new file mode 100644 index 0000000..088c7b5 --- /dev/null +++ b/src/TaxBaik.Web/Endpoints/ConsultingActivity/AllEndpoints.cs @@ -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 Data { get; set; } = []; } +public class IdResp { public int Id { get; set; } } +public class Qry { public int DaysAhead { get; set; } = 30; } + +public class CreateEp : Endpoint +{ + 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 +{ + 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().ToList() }, 200, cancellation: ct); + } +} + +public class GetByIdEp : Endpoint +{ + 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("id")); + if (item == null) ThrowError("활동을 찾을 수 없습니다.", statusCode: 404); + await SendAsync(item, 200, cancellation: ct); + } +} + +public class GetByClientEp : Endpoint +{ + 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("clientId")); + await SendAsync(new Resp { Data = items.Cast().ToList() }, 200, cancellation: ct); + } +} + +public class GetRecentEp : Endpoint +{ + 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().ToList() }, 200, cancellation: ct); + } +} + +public class GetPendingFollowupsEp : Endpoint +{ + 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().ToList() }, 200, cancellation: ct); + } +}