package database import ( "Portifolio/internal/model" "database/sql" "fmt" "time" _ "github.com/mattn/go-sqlite3" ) func GetPeriodByID(db *sql.DB, periodID int) (model.Period, error) { var p model.Period var start, end string err := db.QueryRow( `SELECT type, year, idx, start_date, end_date FROM periods WHERE id = ?`, periodID, ).Scan(&p.Type, &p.Year, &p.Index, &start, &end) if err == sql.ErrNoRows { return p, fmt.Errorf("period %d not found", periodID) } if err != nil { return p, fmt.Errorf("get period by id: %w", err) } p.Start, _ = time.Parse("2006-01-02", start) p.End, _ = time.Parse("2006-01-02", end) return p, nil } func GetRevenueByPeriod(db *sql.DB, companyID int, periodID int) ([]model.Revenue, error) { rows, err := db.Query( `SELECT id, company_id, currency_id, period_id, value FROM revenue_entries WHERE company_id = ? AND period_id = ?`, companyID, periodID, ) if err != nil { return nil, fmt.Errorf("query revenue by period: %w", err) } defer rows.Close() var revenues []model.Revenue for rows.Next() { var rc model.Revenue if err := rows.Scan(&rc.ID, &rc.Company, &rc.Currency, &rc.Period, &rc.Value); err != nil { return nil, fmt.Errorf("scan revenue row: %w", err) } revenues = append(revenues, rc) } if err := rows.Err(); err != nil { return nil, fmt.Errorf("iterate revenue rows: %w", err) } if len(revenues) == 0 { return nil, fmt.Errorf("revenue by company %d and period_id %d not found", companyID, periodID) } return revenues, nil } func GetRevenueByCategory(db *sql.DB, companyID int, categoryID int) ([]model.Revenue, error) { rows, err := db.Query( `SELECT id, company_id, currency_id, category_id, value FROM revenue_entries WHERE company_id = ? AND category_id = ?`, companyID, categoryID, ) if err != nil { return nil, fmt.Errorf("query revenue by category: %w", err) } defer rows.Close() var revenues []model.Revenue for rows.Next() { var rc model.Revenue if err := rows.Scan(&rc.ID, &rc.Company, &rc.Currency, &rc.Category, &rc.Value); err != nil { return nil, fmt.Errorf("scan revenue row: %w", err) } revenues = append(revenues, rc) } if err := rows.Err(); err != nil { return nil, fmt.Errorf("iterate revenue rows: %w", err) } if len(revenues) == 0 { return nil, fmt.Errorf("revenue by company %d and category_id %d not found", companyID, categoryID) } return revenues, nil }