everything you need to create an atproto appview
at main 60 lines 1.4 kB view raw
1package server 2 3import ( 4 "context" 5 "fmt" 6 7 clog "github.com/charmbracelet/log" 8 "tangled.org/oppi.li/atproto-starterkit/appview/config" 9 "tangled.org/oppi.li/atproto-starterkit/appview/db" 10 "tangled.org/oppi.li/atproto-starterkit/appview/oauth" 11 "tangled.org/oppi.li/atproto-starterkit/appview/pages" 12 "tangled.org/oppi.li/atproto-starterkit/idresolver" 13 "tangled.org/oppi.li/atproto-starterkit/log" 14) 15 16type Server struct { 17 db *db.DB 18 oauth *oauth.OAuth 19 idResolver *idresolver.Resolver 20 pages *pages.Pages 21 config *config.Config 22 logger *clog.Logger 23} 24 25func Make(ctx context.Context, config *config.Config) (*Server, error) { 26 logger := log.FromContext(ctx) 27 28 d, err := db.Make(ctx, config.Core.DbPath, log.SubLogger(logger, "db")) 29 if err != nil { 30 return nil, fmt.Errorf("failed to create db: %w", err) 31 } 32 33 res, err := idresolver.RedisResolver(config.Redis.ToURL(), config.Plc.PLCURL) 34 if err != nil { 35 logger.Error("failed to create redis resolver", "err", err) 36 res = idresolver.DefaultResolver(config.Plc.PLCURL) 37 } 38 39 oauth, err := oauth.New(config, res, log.SubLogger(logger, "oauth")) 40 if err != nil { 41 return nil, fmt.Errorf("failed to start oauth handler: %w", err) 42 } 43 44 pages := pages.New(res, config) 45 46 server := &Server{ 47 d, 48 oauth, 49 res, 50 pages, 51 config, 52 logger, 53 } 54 55 return server, nil 56} 57 58func (s *Server) Close() error { 59 return s.db.Close() 60}