package main import ( "context" "log" "net/http" "os" "os/signal" "trle5.xyz/trpic/src/configs" "trle5.xyz/trpic/src/database" "trle5.xyz/trpic/src/fetch_artworks/pixiv" "trle5.xyz/trpic/src/utils/auth" "trle5.xyz/trpic/src/utils/telegram" "trle5.xyz/trpic/src/web" "trle5.xyz/trpic/src/web/router" ) func main() { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill) defer cancel() configs.LoadConfig() database.Init(ctx) auth.CheckRegister(ctx) web.Init() router.Init() pixiv.InitApp() telegram.InitBot(ctx) srv := &http.Server{ Addr: configs.Config.ListenAddr, Handler: router.ChiMux, } go func () { log.Printf("ListenAddress: [%s]", configs.Config.ListenAddr) err := srv.ListenAndServe() if err != nil && err != http.ErrServerClosed { log.Println("failed to start server:", err) cancel() } }() <- ctx.Done() err := srv.Shutdown(ctx) if err != nil { log.Println("Failed to shutdown server:", err) } else { log.Println("Server shutdown") } err = database.Close() if err != nil { log.Println("failed to close database connection:", err) } else { log.Println("Database closed") } }