Files
spsays-bff/internal/handler/disciple.go
T
2026-05-09 23:19:19 +05:30

94 lines
2.5 KiB
Go

package handler
import (
"net/http"
"github.com/prabhupadasays/spsays-bff/internal/repository"
"github.com/prabhupadasays/spsays-bff/pkg/response"
)
type DiscipleHandler struct {
repo *repository.DiscipleRepo
}
func NewDiscipleHandler(repo *repository.DiscipleRepo) *DiscipleHandler {
return &DiscipleHandler{repo: repo}
}
func (h *DiscipleHandler) List(w http.ResponseWriter, r *http.Request) {
letter := r.URL.Query().Get("letter")
suffix := r.URL.Query().Get("suffix")
var letterPtr, suffixPtr *string
if letter != "" && letter != "All" {
letterPtr = &letter
}
if suffix != "" {
suffixPtr = &suffix
}
docs, err := h.repo.GetByLetterAndSuffix(r.Context(), letterPtr, suffixPtr)
if err != nil {
response.Error(w, http.StatusInternalServerError, "failed to fetch disciples")
return
}
response.JSON(w, http.StatusOK, docs)
}
func (h *DiscipleHandler) Count(w http.ResponseWriter, r *http.Request) {
letter := r.URL.Query().Get("letter")
suffix := r.URL.Query().Get("suffix")
var letterPtr, suffixPtr *string
if letter != "" && letter != "All" {
letterPtr = &letter
}
if suffix != "" {
suffixPtr = &suffix
}
total, err := h.repo.Count(r.Context())
if err != nil {
response.Error(w, http.StatusInternalServerError, "failed to count disciples")
return
}
filtered, err := h.repo.CountFiltered(r.Context(), letterPtr, suffixPtr)
if err != nil {
response.Error(w, http.StatusInternalServerError, "failed to count filtered disciples")
return
}
response.JSON(w, http.StatusOK, map[string]int64{"total": total, "filtered": filtered})
}
func (h *DiscipleHandler) LetterCounts(w http.ResponseWriter, r *http.Request) {
docs, err := h.repo.GetLetterCounts(r.Context())
if err != nil {
response.Error(w, http.StatusInternalServerError, "failed to fetch letter counts")
return
}
response.JSON(w, http.StatusOK, docs)
}
func (h *DiscipleHandler) SuffixCounts(w http.ResponseWriter, r *http.Request) {
docs, err := h.repo.GetSuffixCounts(r.Context())
if err != nil {
response.Error(w, http.StatusInternalServerError, "failed to fetch suffix counts")
return
}
response.JSON(w, http.StatusOK, docs)
}
func (h *DiscipleHandler) Search(w http.ResponseWriter, r *http.Request) {
query := r.URL.Query().Get("q")
if query == "" {
response.Error(w, http.StatusBadRequest, "search query is required")
return
}
docs, err := h.repo.Search(r.Context(), query, 100)
if err != nil {
response.Error(w, http.StatusInternalServerError, "failed to search disciples")
return
}
response.JSON(w, http.StatusOK, docs)
}