Yōten: A social tracker for your language learning journey built on the atproto.
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}