feat: add endpoint and logic for retrieving transaction chart data, including SQL queries, models, and service integration
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user