Files
ERP_Distribution/Distribution/Features/RecurringExpense/RecurringExpenseController.cs
T
Kalana B. Thilakarathna c775146b64
CI/CD - ERP Distribution / Build & Deploy Frontend (pull_request) Failing after 13m39s
CI/CD - ERP Distribution / Build & Deploy Backend (pull_request) Failing after 15m1s
10.
Implementation
A partner, not just software
HexDive Technologies' local team handles setup, data migration, training and ongoing support — in Sinhala, Tamil and English. [confirm]

1
Discovery
Map your network, products and processes.

2
Configuration
Set up depots, pricing, schemes, routes and users.

3
Migration & training
Move your data and train every team.

4
Go-live & support
Dedicated account manager and local support desk.
2026-10-22 17:47:49 +05:30

53 lines
1.9 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Distribution.Features.RecurringExpense;
public record ToggleRequest(bool Paused);
[ApiController]
[Route("api/recurring-expenses")]
public class RecurringExpenseController(RecurringExpenseService service) : ControllerBase
{
[HttpGet]
[Authorize("expense.view")]
public async Task<IActionResult> List([FromQuery] int page = 1, [FromQuery] int pageSize = 20) =>
Ok(await service.ListAsync(page, pageSize));
[HttpPost]
[Authorize("expense.manage_recurring")]
public async Task<IActionResult> Create(CreateRecurringExpenseRequest request, CancellationToken ct)
{
try { return Ok(await service.CreateAsync(request, ct)); }
catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); }
}
[HttpPut("{id:guid}")]
[Authorize("expense.manage_recurring")]
public async Task<IActionResult> Update(Guid id, UpdateRecurringExpenseRequest request, CancellationToken ct)
{
try
{
var result = await service.UpdateAsync(id, request, ct);
return result is null ? NotFound() : Ok(result);
}
catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); }
}
[HttpPost("{id:guid}/toggle")]
[Authorize("expense.manage_recurring")]
public async Task<IActionResult> Toggle(Guid id, ToggleRequest body, CancellationToken ct)
{
var result = await service.ToggleAsync(id, body.Paused, ct);
return result is null ? NotFound() : Ok(result);
}
[HttpPost("run-due")]
[Authorize("expense.manage_recurring")]
public async Task<IActionResult> RunDue(CancellationToken ct)
{
try { return Ok(await service.RunDueAsync(ct)); }
catch (InvalidOperationException ex) { return BadRequest(new { error = ex.Message }); }
}
}