feat: add endpoint and logic for retrieving transaction chart data, including SQL queries, models, and service integration

This commit is contained in:
Tran Anh Tuan
2026-05-14 10:41:25 +07:00
parent 0a56dfeb61
commit 96bc22942b
11 changed files with 413 additions and 0 deletions

View File

@@ -2,6 +2,8 @@ package repositories
import (
"context"
"sort"
"time"
"wm-backend/internal/mapper"
"wm-backend/internal/models"
db "wm-backend/sqlc_gen"
@@ -83,3 +85,43 @@ func GetAnomalyItems(ctx context.Context, queries *db.Queries, warehouseID pgtyp
}
return items, nil
}
func GetTransactionChartData(ctx context.Context, queries *db.Queries, startDate, endDate time.Time, warehouseID pgtype.Int8) (models.TransactionChartData, error) {
results, err := queries.GetTransactionChartData(ctx, db.GetTransactionChartDataParams{
StartDate: startDate,
EndDate: endDate,
WarehouseID: warehouseID,
})
if err != nil {
return models.TransactionChartData{}, err
}
dateMap := make(map[string]*models.TransactionChartItem)
for _, r := range results {
row := mapper.ToDomainTransactionChartRow(r)
dateStr := row.Date.Format("2006-01-02")
if _, exists := dateMap[dateStr]; !exists {
dateMap[dateStr] = &models.TransactionChartItem{
Date: dateStr,
ImportQuantity: 0,
ExportQuantity: 0,
}
}
switch row.TransactionType {
case "import":
dateMap[dateStr].ImportQuantity = row.TotalQuantity
case "export":
dateMap[dateStr].ExportQuantity = row.TotalQuantity
}
}
items := make([]models.TransactionChartItem, 0, len(dateMap))
for _, item := range dateMap {
items = append(items, *item)
}
sort.Slice(items, func(i, j int) bool {
return items[i].Date < items[j].Date
})
return models.TransactionChartData{Items: items}, nil
}