rev cat getter by company id

This commit is contained in:
zipfriis
2026-03-25 19:07:57 +01:00
parent e056d8a37e
commit 206954fb75
6 changed files with 79 additions and 33 deletions

Binary file not shown.

BIN
app.db

Binary file not shown.

View File

@@ -52,3 +52,54 @@ func InsertCategory(db *sql.DB, rc model.RevenueCategory) error {
}
return nil
}
func GetCategoriesByCompanyID(db *sql.DB, companyID int) ([]string, error) {
rows, err := db.Query("SELECT name FROM category WHERE company_id = ?", companyID)
if err != nil {
return []string{}, err
}
defer rows.Close()
var list []string
for rows.Next() {
var Name string
err := rows.Scan(&Name)
if err != nil {
return []string{}, err
}
list = append(list, Name)
}
return list, nil
}
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
}

View File

@@ -9,37 +9,6 @@ import (
_ "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

View File

@@ -1,10 +1,12 @@
package handlers
import (
"Portifolio/internal/database"
"Portifolio/internal/model"
"Portifolio/internal/service"
"database/sql"
"encoding/json"
"fmt"
"net/http"
_ "github.com/mattn/go-sqlite3"
@@ -69,3 +71,25 @@ func GetRevenueReportHandler(db *sql.DB) http.HandlerFunc {
}
}
*/
func GetCompanyRevenueCategories(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var input struct {
CompanyID int `json:"company_id"`
}
if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
http.Error(w, "invalid json", http.StatusBadRequest)
return
}
catlist, err := database.GetCategoriesByCompanyID(db, input.CompanyID)
if err != nil {
http.Error(w, fmt.Sprintf("Could not find categories by that id:%s", err), http.StatusBadRequest)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(map[string][]string{"list": catlist})
}
}

View File

@@ -41,14 +41,16 @@ func main() {
http.HandleFunc("GET /positions/list", handlers.GetTradeListHandler(db))
// Company
http.HandleFunc("POST /add/company", handlers.AddCompanyHandler(db))
http.HandleFunc("GET /companies", handlers.GetCompaniesHandler(db))
http.HandleFunc("POST /company/add", handlers.AddCompanyHandler(db))
http.HandleFunc("GET /company/list", handlers.GetCompaniesHandler(db))
http.HandleFunc("GET /company/revenue/categories", handlers.GetCompanyRevenueCategories(db))
// Currency
http.HandleFunc("GET /currencies", handlers.GetCurrenciesHandler(db))
// Revenue
http.HandleFunc("POST /add/revenue/entry", handlers.AddRevenueEntryHandler(db))
//http.HandleFunc("GET /revenue/report", handlers.GetRevenueReportHandler(db))
fmt.Println("Server running on :8080")