Something went wrong. Try again.
Get an ever updating ics link for all the events you RSVP to on the Atmosphere whenslunch.app
Something went wrong. Try again.
1.6 kB · 66 lines
Go
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package server
import ( "context" "embed" "errors" "fmt" "html/template" "log/slog" "net/http" "time"
"github.com/bluesky-social/indigo/atproto/identity" "github.com/labstack/echo/v5" "github.com/labstack/echo/v5/middleware" "github.com/spf13/viper" "gorm.io/gorm" "tangled.org/pds.dad/whens-lunch/calendarcache")
//go:embed templates/*.htmlvar templatesFS embed.FS
type Server struct { db *gorm.DB cdir *identity.CacheDirectory calCache *calendarcache.CalendarCache}
func RunHTTPServer(ctx context.Context, db *gorm.DB, cdir *identity.CacheDirectory, calCache *calendarcache.CalendarCache) {
srv := &Server{db: db, cdir: cdir, calCache: calCache}
e := echo.New() e.Logger = slog.Default() e.Use(middleware.RequestLogger())
e.Renderer = &echo.TemplateRenderer{ Template: template.Must(template.ParseFS(templatesFS, "templates/*.html")), }
e.GET("/", srv.home) e.GET("/events/:identity", srv.getEventsForUser)
port := viper.Get("server.port") host := viper.Get("server.host") address := fmt.Sprintf("%s:%s", host, port) s := http.Server{Addr: address, Handler: e} go func() { e.Logger.Info("Starting the server on ", "address", address)
if err := s.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { e.Logger.Error("failed to start server", "error", err) } e.Logger.Info("server started", "address", address) }()
<-ctx.Done()
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := s.Shutdown(ctx); err != nil { e.Logger.Error("failed to stop server", "error", err) }
}