package stacks import ( "database/sql" "encoding/json" "net/http" "os" "screenmark/screenmark/middleware" "screenmark/screenmark/models" "github.com/charmbracelet/log" "github.com/go-chi/chi/v5" ) type StackHandler struct { logger *log.Logger stackModel models.ListModel } func (h *StackHandler) getAllStacks(w http.ResponseWriter, r *http.Request) { ctx := r.Context() userId, err := middleware.GetUserID(ctx) if err != nil { h.logger.Warn("could not get users in get all stacks", "err", err) w.WriteHeader(http.StatusUnauthorized) return } lists, err := h.stackModel.List(ctx, userId) if err != nil { h.logger.Warn("could not get stacks", "err", err) w.WriteHeader(http.StatusBadRequest) return } jsonLists, err := json.Marshal(lists) if err != nil { h.logger.Warn("could not marshal json lists", "err", err) w.WriteHeader(http.StatusBadRequest) return } w.Write(jsonLists) w.WriteHeader(http.StatusOK) } func (h *StackHandler) CreateRoutes(r chi.Router) { h.logger.Info("Mounting stack router") r.Group(func(r chi.Router) { r.Use(middleware.ProtectedRoute) r.Use(middleware.SetJson) r.Get("/", h.getAllStacks) }) } func CreateStackHandler(db *sql.DB) StackHandler { stackModel := models.NewListModel(db) logger := log.New(os.Stdout).WithPrefix("Stacks") return StackHandler{ logger, stackModel, } }