moving handlers into service. adding website
This commit is contained in:
136
main.go
136
main.go
@@ -2,15 +2,12 @@ package main
|
||||
|
||||
import (
|
||||
"Portifolio/internal/database"
|
||||
"Portifolio/internal/handlers"
|
||||
"Portifolio/internal/shell"
|
||||
"bufio"
|
||||
"Portifolio/internal/service"
|
||||
"Portifolio/internal/website"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
@@ -28,6 +25,42 @@ func corsMiddleware(next http.Handler) http.Handler {
|
||||
})
|
||||
}
|
||||
|
||||
func RegisterRoutes(mux *http.ServeMux, db *sql.DB) {
|
||||
svc := service.New(db) // ← create it here, once
|
||||
|
||||
// ── Website (HTMX fragments) ──────────────────────────────
|
||||
mux.HandleFunc("/", website.Getsite())
|
||||
mux.HandleFunc("/style", website.Getstylesheet())
|
||||
mux.HandleFunc("/health/fragment", website.HealthFragment(svc))
|
||||
mux.HandleFunc("/positions/fragment", website.PositionsFragment(svc))
|
||||
mux.HandleFunc("/company/fragment", website.CompanyFragment(svc))
|
||||
mux.HandleFunc("/summary/fragment", website.SummaryFragment(svc))
|
||||
mux.HandleFunc("/trade/fragment", website.TradeFragment(svc))
|
||||
mux.HandleFunc("/trade/count", website.TradeCount(svc))
|
||||
|
||||
// ── API (JSON) ────────────────────────────────────────────
|
||||
mux.HandleFunc("/health", svc.HealthHandler())
|
||||
// Trades
|
||||
mux.HandleFunc("POST /trade/add", svc.AddTradeHandler())
|
||||
mux.HandleFunc("GET /trade/list", svc.GetTradeListHandler())
|
||||
//mux.HandleFunc("GET /trade/search", svc.SearchTradeHandler(svc))
|
||||
// Positions
|
||||
mux.HandleFunc("GET /positions/list", svc.GetPositionListHandler())
|
||||
//mux.HandleFunc("GET /positions/closed/list", svc.GetClosedPositionListHandler(svc))
|
||||
//mux.HandleFunc("GET /positions/closed/search", svc.SearchClosedPositionsHandler(svc))
|
||||
// Company
|
||||
mux.HandleFunc("POST /company/add", svc.AddCompanyHandler())
|
||||
mux.HandleFunc("GET /company/list", svc.GetCompaniesHandler())
|
||||
mux.HandleFunc("GET /company/revenue/categories", svc.GetCompanyRevenueCategories())
|
||||
//mux.HandleFunc("POST /company/S-O/add", svc.AddSharesOutstandingHandler(svc))
|
||||
//mux.HandleFunc("GET /company/S-O/list", svc.GetSharesOutstandingHandler(svc))
|
||||
// Currency
|
||||
mux.HandleFunc("GET /currency/list", svc.GetCurrenciesHandler())
|
||||
mux.HandleFunc("POST /currency/add", svc.AddCurrencyHandler())
|
||||
// Revenue
|
||||
mux.HandleFunc("POST /add/revenue/entry", svc.AddRevenueEntryHandler())
|
||||
mux.HandleFunc("POST /api/v1/revenue/add", svc.AddRevenueEntryHandler())
|
||||
}
|
||||
func main() {
|
||||
var err error
|
||||
db, err = sql.Open("sqlite3", "./app.db?_foreign_keys=on")
|
||||
@@ -44,97 +77,8 @@ func main() {
|
||||
fmt.Println("Connected to SQLite database")
|
||||
|
||||
mux := http.NewServeMux()
|
||||
|
||||
mux.HandleFunc("/health", handlers.HealthHandler(db))
|
||||
|
||||
//Trades
|
||||
mux.HandleFunc("POST /trade/add", handlers.AddTradeHandler(db))
|
||||
mux.HandleFunc("GET /trade/list", handlers.GetTradeListHandler(db))
|
||||
mux.HandleFunc("GET /trade/search", handlers.GetTradeListHandler(db)) // new
|
||||
//Positions
|
||||
mux.HandleFunc("GET /positions/list", handlers.GetPositionListHandler(db))
|
||||
mux.HandleFunc("GET /positions/closed/list", handlers.GetPositionListHandler(db)) // new
|
||||
mux.HandleFunc("GET /positions/closed/search", handlers.GetTradeListHandler(db)) // new
|
||||
// Company
|
||||
mux.HandleFunc("POST /company/add", handlers.AddCompanyHandler(db))
|
||||
mux.HandleFunc("GET /company/list", handlers.GetCompaniesHandler(db))
|
||||
mux.HandleFunc("GET /company/revenue/categories", handlers.GetCompanyRevenueCategories(db))
|
||||
mux.HandleFunc("POST /company/S-O/add", handlers.GetCompaniesHandler(db)) // new
|
||||
mux.HandleFunc("GET /company/S-O/list", handlers.GetCompaniesHandler(db)) // new
|
||||
|
||||
// Currency
|
||||
mux.HandleFunc("GET /currency/list", handlers.GetCurrenciesHandler(db))
|
||||
mux.HandleFunc("POST /currency/add", handlers.AddCurrencyHandler(db))
|
||||
|
||||
// Revenue
|
||||
mux.HandleFunc("POST /add/revenue/entry", handlers.AddRevenueEntryHandler(db))
|
||||
mux.HandleFunc("POST /api/v1/revenue/add", handlers.AddRevenueEntryHandler(db))
|
||||
|
||||
//http.HandleFunc("GET /revenue/report", handlers.GetRevenueReportHandler(db))
|
||||
RegisterRoutes(mux, db)
|
||||
|
||||
fmt.Println("Server running on :8080")
|
||||
go func() {
|
||||
log.Fatal(http.ListenAndServe(":8080", corsMiddleware(mux)))
|
||||
}()
|
||||
|
||||
runShell(db)
|
||||
}
|
||||
|
||||
func runShell(db *sql.DB) {
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
fmt.Println("\nShell ready. Type 'help' for commands.")
|
||||
|
||||
for {
|
||||
fmt.Print("> ")
|
||||
if !scanner.Scan() {
|
||||
break
|
||||
}
|
||||
|
||||
parts := strings.Fields(scanner.Text())
|
||||
if len(parts) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
switch parts[0] {
|
||||
// Company
|
||||
case "add-company":
|
||||
shell.AddCompany(scanner, db)
|
||||
case "list-companies":
|
||||
shell.ListCompanies(db)
|
||||
|
||||
// Currency
|
||||
case "add-currency":
|
||||
shell.AddCurrency(scanner, db)
|
||||
case "list-currency":
|
||||
shell.ListCurrencies(db)
|
||||
|
||||
// Revenue
|
||||
case "add-revenue":
|
||||
shell.AddRevenue(scanner, db)
|
||||
case "list-revenue":
|
||||
shell.ListRevenue(scanner, db)
|
||||
|
||||
case "help":
|
||||
fmt.Println("\nCommands:")
|
||||
fmt.Println(" --- Company ---")
|
||||
fmt.Println(" add-company add a new company")
|
||||
fmt.Println(" list-companies list all companies")
|
||||
fmt.Println(" --- Currency ---")
|
||||
fmt.Println(" add-currency add a new currency")
|
||||
fmt.Println(" list-currency list all currencies")
|
||||
fmt.Println(" --- Revenue ---")
|
||||
fmt.Println(" add-revenue add a revenue entry interactively")
|
||||
fmt.Println(" list-revenue list revenue for a company/period")
|
||||
fmt.Println(" sum-revenue sum revenue across periods")
|
||||
fmt.Println(" --- Other ---")
|
||||
fmt.Println(" exit quit")
|
||||
|
||||
case "exit":
|
||||
fmt.Println("Bye!")
|
||||
os.Exit(0)
|
||||
|
||||
default:
|
||||
fmt.Printf("Unknown command: %s. Type 'help' for commands.\n", parts[0])
|
||||
}
|
||||
}
|
||||
http.ListenAndServe(":8080", corsMiddleware(mux))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user