85 lines
3.0 KiB
Go
85 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"Portifolio/internal/database"
|
|
"Portifolio/internal/service"
|
|
"Portifolio/internal/website"
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
var db *sql.DB
|
|
|
|
func corsMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
log.Printf("Incoming request: %s %s from %s", r.Method, r.URL.Path, r.Header.Get("Origin"))
|
|
if r.Method == http.MethodOptions {
|
|
w.WriteHeader(http.StatusNoContent)
|
|
return
|
|
}
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
|
|
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")
|
|
if err != nil {
|
|
log.Fatal("Failed to open database:", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
if err = db.Ping(); err != nil {
|
|
log.Fatal("Failed to connect to database:", err)
|
|
}
|
|
|
|
database.InitDB(db)
|
|
fmt.Println("Connected to SQLite database")
|
|
|
|
mux := http.NewServeMux()
|
|
RegisterRoutes(mux, db)
|
|
|
|
fmt.Println("Server running on :8080")
|
|
http.ListenAndServe(":8080", corsMiddleware(mux))
|
|
}
|