Files
spend-sparrow/internal/service/dashboard.go
2025-06-15 14:24:29 +02:00

60 lines
1.2 KiB
Go

package service
import (
"context"
"spend-sparrow/internal/types"
"time"
"github.com/jmoiron/sqlx"
)
type Dashboard struct {
db *sqlx.DB
}
func NewDashboard(db *sqlx.DB) TreasureChest {
return TreasureChestImpl{
db: db,
}
}
func (s Dashboard) Summary(ctx context.Context, user *types.User, month time.Time) (*types.DashboardSummary, error) {
if user == nil {
return nil, ErrUnauthorized
}
var summary types.DashboardSummary
s.db.SelectContext(ctx, &summary.Expenses, `
SELECT
FROM "transaction"
WHERE user_id = $1
AND value < 0
AND account_id IS NOT NULL
AND error IS NULL
AND date_trunc('month', date) = date_trund('month', $2)`,
user.Id, month)
s.db.SelectContext(ctx, &summary.Income, `
SELECT
FROM "transaction"
WHERE user_id = $1
AND value > 0
AND account_id IS NOT NULL
AND error IS NULL
AND date_trunc('month', date) = date_trund('month', $2)`,
user.Id, month)
s.db.SelectContext(ctx, &summary.Savings, `
SELECT
FROM "transaction"
WHERE user_id = $1
AND value > 0
AND treasure_chest_id IS NOT NULL
AND error IS NULL
AND date_trunc('month', date) = date_trund('month', $2)`,
user.Id, month)
return &summary, nil
}