fix: analytics avg_daily_expense uses selected month/year instead of current
All checks were successful
CI / ci (push) Successful in 13s

This commit is contained in:
Cosmo
2026-03-01 05:31:05 +00:00
parent 9e06341564
commit 901173a337
3 changed files with 21 additions and 11 deletions

View File

@@ -317,7 +317,7 @@ func (r *FinanceRepository) GetSummary(userID int64, month, year int) (*model.Fi
return summary, nil
}
func (r *FinanceRepository) GetAnalytics(userID int64, months int) (*model.FinanceAnalytics, error) {
func (r *FinanceRepository) GetAnalytics(userID int64, months, month, year int) (*model.FinanceAnalytics, error) {
analytics := &model.FinanceAnalytics{}
// Monthly trend
@@ -342,27 +342,27 @@ func (r *FinanceRepository) GetAnalytics(userID int64, months int) (*model.Finan
analytics.MonthlyTrend = []model.MonthlyTrend{}
}
// Avg daily expense for current month
now := time.Now()
// Avg daily expense for selected month
var totalExpense float64
var dayCount int
r.db.QueryRow(`SELECT COALESCE(SUM(amount),0), COUNT(DISTINCT date)
FROM finance_transactions WHERE user_id=$1 AND type='expense'
AND EXTRACT(MONTH FROM date)=$2 AND EXTRACT(YEAR FROM date)=$3`,
userID, int(now.Month()), now.Year()).Scan(&totalExpense, &dayCount)
userID, month, year).Scan(&totalExpense, &dayCount)
if dayCount > 0 {
analytics.AvgDailyExpense = totalExpense / float64(dayCount)
}
// Comparison with previous month
prevMonth := now.AddDate(0, -1, 0)
selectedMonth := time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.UTC)
prevMonthTime := selectedMonth.AddDate(0, -1, 0)
var currentMonthExp, prevMonthExp float64
r.db.QueryRow(`SELECT COALESCE(SUM(amount),0) FROM finance_transactions WHERE user_id=$1 AND type='expense'
AND EXTRACT(MONTH FROM date)=$2 AND EXTRACT(YEAR FROM date)=$3`,
userID, int(now.Month()), now.Year()).Scan(&currentMonthExp)
userID, month, year).Scan(&currentMonthExp)
r.db.QueryRow(`SELECT COALESCE(SUM(amount),0) FROM finance_transactions WHERE user_id=$1 AND type='expense'
AND EXTRACT(MONTH FROM date)=$2 AND EXTRACT(YEAR FROM date)=$3`,
userID, int(prevMonth.Month()), prevMonth.Year()).Scan(&prevMonthExp)
userID, int(prevMonthTime.Month()), prevMonthTime.Year()).Scan(&prevMonthExp)
analytics.ComparisonPrevMonth = model.Comparison{
Current: currentMonthExp,