mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-06 02:36:49 +00:00
121 lines
2.8 KiB
Go
121 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"embed"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/getsentry/sentry-go"
|
|
|
|
"github.com/rjNemo/rentease/internal/auth"
|
|
"github.com/rjNemo/rentease/internal/booking"
|
|
"github.com/rjNemo/rentease/internal/config"
|
|
"github.com/rjNemo/rentease/internal/database"
|
|
"github.com/rjNemo/rentease/internal/driver/calendar"
|
|
"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, config.NewConfig()); err != nil {
|
|
fmt.Fprintf(os.Stderr, "%s\n", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func run(c context.Context, getEnv func(string) string) error {
|
|
ctx, cancel := signal.NotifyContext(c, os.Interrupt)
|
|
defer cancel()
|
|
|
|
// init sentry
|
|
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)
|
|
}
|
|
|
|
// init database
|
|
db, err := database.New(getEnv("DATABASE_URL"))
|
|
if err != nil {
|
|
return fmt.Errorf("error connecting to the database %s", err)
|
|
}
|
|
|
|
if err = database.Migrate(db, &booking.Booking{}, &booking.BookingRequest{}, &booking.Item{}); err != nil {
|
|
return fmt.Errorf("error connecting to the database %s", err)
|
|
}
|
|
|
|
// build booking service
|
|
bs, err := booking.NewService(db)
|
|
if err != nil {
|
|
return fmt.Errorf("error starting booking service %s", err)
|
|
}
|
|
|
|
// build pdf service
|
|
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", err)
|
|
}
|
|
|
|
// build authentication service
|
|
as, err := auth.NewService(
|
|
getEnv("SESSION_SECRET"),
|
|
getEnv("ADMIN"),
|
|
getEnv("ADMIN_SECRET"),
|
|
getEnv("API_KEY"),
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("error starting auth service %s", err)
|
|
}
|
|
|
|
// build calendar service
|
|
cs, err := calendar.NewService(ctx, getEnv("CALENDAR_CREDENTIALS"))
|
|
if err != nil {
|
|
return fmt.Errorf("error starting calendar service %s", err)
|
|
}
|
|
|
|
// starting server
|
|
p := getEnv("PORT")
|
|
port, err := strconv.Atoi(p)
|
|
if err != nil {
|
|
return fmt.Errorf("error parsing PORT env %s", err)
|
|
}
|
|
|
|
ogs := getEnv("ORIGINS")
|
|
origins := strings.Split(ogs, ",")
|
|
|
|
srv, err := server.New(
|
|
bs,
|
|
as,
|
|
ps,
|
|
cs,
|
|
config.NewHost(), // TODO: move to the database at some point
|
|
server.WithPort(port),
|
|
server.WithFileSystem(static),
|
|
server.WithDebug(strings.ToLower(getEnv("DEBUG")) == "true"),
|
|
server.WithSecretKey(getEnv("SECRET_KEY")),
|
|
server.WithOrigins(origins),
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("error starting server %s", err)
|
|
}
|
|
|
|
srv.Start(ctx)
|
|
return nil
|
|
}
|