add export excel all expenses

This commit is contained in:
giovanni
2026-04-22 23:29:05 +07:00
parent 3e99caf3a7
commit c744043321
4 changed files with 694 additions and 0 deletions
@@ -24,6 +24,8 @@ type ExpenseController struct {
ExpenseService service.ExpenseService
}
const expenseExcelExportFetchLimit = 100
func NewExpenseController(expenseService service.ExpenseService) *ExpenseController {
return &ExpenseController{
ExpenseService: expenseService,
@@ -56,6 +58,14 @@ func (u *ExpenseController) GetAll(c *fiber.Ctx) error {
Search: c.Query("search", ""),
}
if isAllExpenseExcelExportRequest(c) {
allResults, err := u.getAllExpensesForExcel(c, query)
if err != nil {
return err
}
return exportExpenseListExcel(c, allResults)
}
if query.Page < 1 || query.Limit < 1 {
return fiber.NewError(fiber.StatusBadRequest, "page and limit must be greater than 0")
}
@@ -80,6 +90,33 @@ func (u *ExpenseController) GetAll(c *fiber.Ctx) error {
})
}
func (u *ExpenseController) getAllExpensesForExcel(c *fiber.Ctx, baseQuery *validation.Query) ([]dto.ExpenseListDTO, error) {
query := *baseQuery
query.Page = 1
query.Limit = expenseExcelExportFetchLimit
results := make([]dto.ExpenseListDTO, 0)
for {
pageResults, total, err := u.ExpenseService.GetAll(c, &query)
if err != nil {
return nil, err
}
if len(pageResults) == 0 || total == 0 {
break
}
results = append(results, pageResults...)
if int64(len(results)) >= total {
break
}
query.Page++
}
return results, nil
}
func (u *ExpenseController) GetOne(c *fiber.Ctx) error {
param := c.Params("id")