Files
billit/internal/handler/buyer.go
2025-12-06 15:31:18 +05:30

108 lines
2.8 KiB
Go

package handler
import "billit/internal/view"
import (
"billit/internal/database"
"net/http"
"github.com/labstack/echo/v4"
)
// BuyerHandlers holds db reference for buyer operations
type BuyerHandlers struct {
db database.Service
}
// NewBuyerHandlers creates handlers with db access
func NewBuyerHandlers(db database.Service) *BuyerHandlers {
return &BuyerHandlers{db: db}
}
// BuyerListHandler renders the /buyer page with all buyers
func (h *BuyerHandlers) BuyerListHandler(c echo.Context) error {
userID := getUserID(c)
buyers, err := h.db.GetAllBuyerDetails(userID)
if err != nil {
return view.RenderServerError(c, "Failed to load buyers. Please try again.")
}
return view.Render(c, view.BuyerListPage(buyers))
}
// BuyerCreatePageHandler renders the /buyer/create form page
func (h *BuyerHandlers) BuyerCreatePageHandler(c echo.Context) error {
return view.Render(c, view.BuyerCreatePage())
}
// BuyerEditPageHandler renders the /buyer/edit/:id form page
func (h *BuyerHandlers) BuyerEditPageHandler(c echo.Context) error {
id := c.Param("id")
userID := getUserID(c)
buyer, err := h.db.GetBuyerDetails(id, userID)
if err != nil || buyer == nil {
return view.RenderNotFound(c, "Buyer not found or you don't have access to it.")
}
return view.Render(c, view.BuyerEditPage(*buyer))
}
// BuyerCreateHandler handles POST /buyer/create
func (h *BuyerHandlers) BuyerCreateHandler(c echo.Context) error {
userID := getUserID(c)
if userID == "" {
return c.Redirect(http.StatusFound, "/")
}
name := c.FormValue("name")
if name == "" {
return c.String(http.StatusBadRequest, "Name is required")
}
details := c.FormValue("details")
_, err := h.db.CreateBuyerDetails(userID, name, details)
if err != nil {
return c.String(http.StatusInternalServerError, "Failed to create buyer")
}
return c.Redirect(http.StatusFound, "/buyer")
}
// BuyerUpdateHandler handles POST /buyer/edit/:id
func (h *BuyerHandlers) BuyerUpdateHandler(c echo.Context) error {
userID := getUserID(c)
if userID == "" {
return c.Redirect(http.StatusFound, "/")
}
id := c.Param("id")
name := c.FormValue("name")
if name == "" {
return c.String(http.StatusBadRequest, "Name is required")
}
details := c.FormValue("details")
err := h.db.UpdateBuyerDetails(id, userID, name, details)
if err != nil {
return c.String(http.StatusInternalServerError, "Failed to update buyer")
}
return c.Redirect(http.StatusFound, "/buyer")
}
// BuyerDeleteHandler handles DELETE /buyer/:id
func (h *BuyerHandlers) BuyerDeleteHandler(c echo.Context) error {
userID := getUserID(c)
if userID == "" {
return c.String(http.StatusUnauthorized, "Unauthorized")
}
id := c.Param("id")
err := h.db.DeleteBuyerDetails(id, userID)
if err != nil {
return c.String(http.StatusInternalServerError, "Failed to delete buyer")
}
return c.NoContent(http.StatusOK)
}