Yōten: A social tracker for your language learning journey built on the atproto.
at master 47 lines 915 B view raw
1package main 2 3import ( 4 "context" 5 "encoding/gob" 6 "fmt" 7 "log" 8 "net/http" 9 "os" 10 11 "yoten.app/internal/server" 12 "yoten.app/internal/server/config" 13 "yoten.app/internal/server/handlers" 14) 15 16func main() { 17 ctx := context.Background() 18 19 config, err := config.LoadConfig(ctx) 20 if err != nil { 21 log.Fatalf("failed to load config: %v", err) 22 os.Exit(-1) 23 } 24 25 state, err := server.Make(ctx, config) 26 defer func() { 27 if err := state.Close(); err != nil { 28 log.Fatalf("failed to create state: %v", err) 29 } 30 }() 31 if err != nil { 32 log.Fatalf("failed to start server: %v", err) 33 os.Exit(-1) 34 } 35 36 handler := handlers.NewHandler(state) 37 38 gob.Register(map[string][]uint8{}) 39 40 log.Printf("Starting server on :%s\n", config.Core.Port) 41 err = http.ListenAndServe(fmt.Sprintf(":%s", config.Core.Port), handler.Router()) 42 if err != nil { 43 log.Fatalf("failed to start server: %v", err) 44 } 45 46 log.Println("Shutdown complete.") 47}