89 lines
2.6 KiB
Go
89 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.warky.dev/wdevs/whatshooked/pkg/api"
|
|
"git.warky.dev/wdevs/whatshooked/pkg/config"
|
|
"git.warky.dev/wdevs/whatshooked/pkg/logging"
|
|
"git.warky.dev/wdevs/whatshooked/pkg/storage"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
// Example: Initialize Phase 2 components and start the API server
|
|
func main() {
|
|
// Setup logging
|
|
logging.Init("info")
|
|
|
|
// Load configuration
|
|
cfg, err := config.Load("config.json")
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to load configuration")
|
|
}
|
|
|
|
// Check if database configuration is provided
|
|
if cfg.Database.Type == "" {
|
|
log.Warn().Msg("No database configuration found, using SQLite default")
|
|
cfg.Database.Type = "sqlite"
|
|
cfg.Database.SQLitePath = "./data/whatshooked.db"
|
|
}
|
|
|
|
// Initialize database
|
|
log.Info().
|
|
Str("type", cfg.Database.Type).
|
|
Msg("Initializing database")
|
|
|
|
if err := storage.Initialize(&cfg.Database); err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to initialize database")
|
|
}
|
|
defer storage.Close()
|
|
|
|
db := storage.GetDB()
|
|
|
|
// Create tables using BUN
|
|
log.Info().Msg("Creating database tables")
|
|
if err := storage.CreateTables(context.Background()); err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to create tables")
|
|
}
|
|
|
|
// Seed default data (creates admin user if not exists)
|
|
log.Info().Msg("Seeding default data")
|
|
if err := storage.SeedData(context.Background()); err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to seed data")
|
|
}
|
|
|
|
// Ensure API config is present
|
|
if !cfg.API.Enabled {
|
|
log.Warn().Msg("API server not enabled in config, enabling with defaults")
|
|
cfg.API.Enabled = true
|
|
}
|
|
|
|
// Create API server
|
|
log.Info().Msg("Creating API server with ResolveSpec")
|
|
server, err := api.NewServer(cfg, db)
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to create API server")
|
|
}
|
|
|
|
// Start server
|
|
addr := fmt.Sprintf("%s:%d", cfg.API.Host, cfg.API.Port)
|
|
log.Info().
|
|
Str("address", addr).
|
|
Msg("Starting API server")
|
|
log.Info().Msg("Default admin credentials: username=admin, password=admin123")
|
|
log.Info().Msg("⚠️ Please change the default password after first login!")
|
|
log.Info().Msg("")
|
|
log.Info().Msg("API Endpoints:")
|
|
log.Info().Msgf(" - POST %s/api/v1/auth/login - Login to get JWT token", addr)
|
|
log.Info().Msgf(" - POST %s/api/v1/auth/logout - Logout and invalidate token", addr)
|
|
log.Info().Msgf(" - GET %s/api/v1/users - List users (requires auth)", addr)
|
|
log.Info().Msgf(" - GET %s/api/v1/hooks - List hooks (requires auth)", addr)
|
|
log.Info().Msgf(" - GET %s/health - Health check", addr)
|
|
|
|
// Start the server (blocking call)
|
|
if err := server.Start(); err != nil {
|
|
log.Fatal().Err(err).Msg("API server error")
|
|
}
|
|
}
|