Files
portfolio-tracker/cmd/app/main.go
T
Matthias Hinrichs 9b7bdcbc53 first commit
2025-07-05 03:10:41 +02:00

75 lines
2.2 KiB
Go

package main
import (
"fmt"
"net/http"
"os"
"portfolio-tracker/internal/handler"
"portfolio-tracker/internal/model"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func main() {
// Create data directory if it doesn't exist
if err := os.MkdirAll("data", 0755); err != nil {
panic("failed to create data directory: " + err.Error())
}
dbPath := "data/portfolio.db"
fmt.Printf("Opening database at: %s\n", dbPath)
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{
Logger: logger.Default.LogMode(logger.Error),
})
// Set the global DB variable for the handlers
handler.DB = db
// Auto-migrate all models
err = db.AutoMigrate(
&model.User{},
&model.Portfolio{},
&model.Activity{},
)
if err != nil {
panic("failed to migrate database: " + err.Error())
}
fmt.Println("Database migrations completed successfully")
// Routes - organized by functionality
// Main pages
http.HandleFunc("/", handler.Handler)
http.HandleFunc("/details", handler.DetailsHandler)
// API endpoints
http.HandleFunc("/api/yahoo", handler.JsonEndpoint)
http.HandleFunc("/api/yahoomaxdividends", handler.YahooMaxDividendsHandler)
http.HandleFunc("/api/stocksearch", handler.StockSearchEndpoint)
// Admin endpoints
http.HandleFunc("/api/admin/clear-currency-cache", handler.ClearCurrencyCacheHandler)
http.HandleFunc("/api/admin/currency-cache-info", handler.CurrencyCacheInfoHandler)
// Authentication
http.HandleFunc("/user/register", handler.RegisterHandler)
http.HandleFunc("/user/login", handler.LoginHandler)
http.HandleFunc("/user/logout", handler.LogoutHandler)
// Portfolio management
http.HandleFunc("/portfolio", handler.PortfolioHandler)
http.HandleFunc("/portfolio/create", handler.CreatePortfolioHandler)
http.HandleFunc("/portfolio/transaction", handler.PortfolioTransactionHandler)
http.HandleFunc("/portfolio/transaction/edit", handler.EditTransactionHandler)
http.HandleFunc("/portfolio/transaction/delete", handler.DeleteTransactionHandler)
http.HandleFunc("/portfolio/", handler.PortfolioDetailHandler) // Note the trailing slash
fmt.Println("Server läuft auf http://localhost:8080")
http.ListenAndServe(":8080", nil)
}