package server import ( "context" "fmt" clog "github.com/charmbracelet/log" "tangled.org/oppi.li/atproto-starterkit/appview/config" "tangled.org/oppi.li/atproto-starterkit/appview/db" "tangled.org/oppi.li/atproto-starterkit/appview/oauth" "tangled.org/oppi.li/atproto-starterkit/appview/pages" "tangled.org/oppi.li/atproto-starterkit/idresolver" "tangled.org/oppi.li/atproto-starterkit/log" ) type Server struct { db *db.DB oauth *oauth.OAuth idResolver *idresolver.Resolver pages *pages.Pages config *config.Config logger *clog.Logger } func Make(ctx context.Context, config *config.Config) (*Server, error) { logger := log.FromContext(ctx) d, err := db.Make(ctx, config.Core.DbPath, log.SubLogger(logger, "db")) if err != nil { return nil, fmt.Errorf("failed to create db: %w", err) } res, err := idresolver.RedisResolver(config.Redis.ToURL(), config.Plc.PLCURL) if err != nil { logger.Error("failed to create redis resolver", "err", err) res = idresolver.DefaultResolver(config.Plc.PLCURL) } oauth, err := oauth.New(config, res, log.SubLogger(logger, "oauth")) if err != nil { return nil, fmt.Errorf("failed to start oauth handler: %w", err) } pages := pages.New(res, config) server := &Server{ d, oauth, res, pages, config, logger, } return server, nil } func (s *Server) Close() error { return s.db.Close() }