rentease/main.go
2024-04-13 19:04:57 +02:00

74 lines
1.8 KiB
Go

package main
import (
"context"
"embed"
"fmt"
"os"
"os/signal"
"strconv"
"github.com/getsentry/sentry-go"
"github.com/joho/godotenv"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"github.com/rjNemo/rentease/config"
"github.com/rjNemo/rentease/internal/booking"
"github.com/rjNemo/rentease/internal/pdf"
"github.com/rjNemo/rentease/internal/server"
)
//go:embed assets
var static embed.FS
func main() {
ctx := context.Background()
if err := run(ctx, os.Getenv); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
}
func run(ctx context.Context, getEnv func(string) string) error {
ctx, cancel := signal.NotifyContext(ctx, os.Interrupt)
defer cancel()
godotenv.Load()
if err := sentry.Init(sentry.ClientOptions{
Dsn: getEnv("SENTRY_DSN"),
EnableTracing: true,
TracesSampleRate: 1.0,
ProfilesSampleRate: 1.0,
}); err != nil {
return fmt.Errorf("error initializing sentry: %s", err)
}
db, err := gorm.Open(postgres.Open(getEnv("DATABASE_URL")), &gorm.Config{})
if err != nil {
return fmt.Errorf("error connecting to the database %s\n", err)
}
err = db.AutoMigrate(&booking.Booking{}, &booking.BookingRequest{}, &booking.Item{})
if err != nil {
return fmt.Errorf("error migrating the database %s\n", err)
}
ps, err := pdf.NewPdfService(getEnv("HTMLDOCS_PROJECT_ID"), getEnv("HTMLDOCS_REPORT_PROJECT_ID"), getEnv("HTMLDOCS_URL"), getEnv("HTMLDOCS_KEY"))
if err != nil {
return fmt.Errorf("error starting pdf service %s\n", err)
}
p := getEnv("PORT")
port, err := strconv.Atoi(p)
if err != nil {
return fmt.Errorf("error parsing PORT env %s\n", err)
}
srv, err := server.New(booking.NewService(db), ps, config.NewHost(), server.WithPort(port), server.WithFileSystem(static))
if err != nil {
return fmt.Errorf("error starting server %s\n", err)
}
srv.Start()
return nil
}