Files
Portfolio-Engine/internal/database/revenue.go
2026-03-24 21:31:01 +01:00

60 lines
1.7 KiB
Go

package database
import (
"Portifolio/internal/model"
"database/sql"
"fmt"
"time"
_ "github.com/mattn/go-sqlite3"
)
func GetCategoryByID(db *sql.DB, companyID int, ID int) (*model.RevenueCategory, error) {
var rc model.RevenueCategory
err := db.QueryRow(
`SELECT id, company_id, parent_id, name FROM category WHERE company_id = ? AND id = ?`,
companyID, ID,
).Scan(&rc.ID, &rc.CompanyID, &rc.ParentID, &rc.Name)
if err == sql.ErrNoRows {
return &rc, fmt.Errorf("category %q not found for company %d", ID, companyID)
}
if err != nil {
return &rc, fmt.Errorf("get category by name: %w", err)
}
return &rc, nil
}
func GetCategoryByName(db *sql.DB, companyID int, name string) (model.RevenueCategory, error) {
var rc model.RevenueCategory
err := db.QueryRow(
`SELECT id, company_id, parent_id, name FROM category WHERE company_id = ? AND name = ?`,
companyID, name,
).Scan(&rc.ID, &rc.CompanyID, &rc.ParentID, &rc.Name)
if err == sql.ErrNoRows {
return rc, fmt.Errorf("category %q not found for company %d", name, companyID)
}
if err != nil {
return rc, fmt.Errorf("get category by name: %w", err)
}
return rc, nil
}
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
}