package server import ( "database/sql" "log/slog" "git.runcible.io/learning/ratchet/internal/model" "github.com/alexedwards/scs/v2" "github.com/go-playground/form/v4" ) type RatchetApp struct { logger *slog.Logger templateCache *TemplateCache //Services used by HTTP routes snippetService *model.SnippetService userService *model.UserService formDecoder *form.Decoder sessionManager *scs.SessionManager } // TODO this function presents some challenges because it both instantiates new data objects // and configures route / middleware setup func NewRatchetApp(logger *slog.Logger, tc *TemplateCache, db *sql.DB, sm *scs.SessionManager) *RatchetApp { rs := new(RatchetApp) rs.logger = logger rs.snippetService = &model.SnippetService{DB: db} rs.userService = &model.UserService{DB: db} rs.formDecoder = form.NewDecoder() rs.templateCache = tc rs.sessionManager = sm return rs }