first endpoint: getting product descriptions

This commit is contained in:
Daniel Goc
2026-03-12 10:18:59 +01:00
parent 6f00e7f784
commit 395c09f7e1
10 changed files with 328 additions and 463 deletions

View File

@@ -0,0 +1,81 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/service/productDescriptionService"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
// ProductDescriptionHandler handles endpoints that receive, save and translate product descriptions.
type ProductDescriptionHandler struct {
productDescriptionService *productDescriptionService.ProductDescriptionService
config *config.Config
}
// NewProductDescriptionHandler creates a new ProductDescriptionHandler instance
func NewProductDescriptionHandler() *ProductDescriptionHandler {
productDescriptionService := productDescriptionService.New()
return &ProductDescriptionHandler{
productDescriptionService: productDescriptionService,
config: config.Get(),
}
}
// ProductDescriptionRoutes registers all product description routes
func ProductDescriptionHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewProductDescriptionHandler()
r.Get("/get-product-description", handler.GetProductDescription)
// r.Get("/get-years", handler.GetYears)
// r.Get("/get-quarters", handler.GetQuarters)
// r.Get("/get-issues", handler.GetIssues)
return r
}
// GetProductDescription returns the product description for a given product ID
func (h *ProductDescriptionHandler) GetProductDescription(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody), // possibly could return a dfifferent error
})
}
productID_attribute := c.Query("productID")
productID, err := strconv.Atoi(productID_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute),
})
}
productShopID_attribute := c.Query("productShopID")
productShopID, err := strconv.Atoi(productShopID_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute),
})
}
productLangID_attribute := c.Query("productLangID")
productLangID, err := strconv.Atoi(productLangID_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute),
})
}
response, err := h.productDescriptionService.GetProductDescription(userID, uint(productID), uint(productShopID), uint(productLangID))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, err),
})
}
return c.JSON(response)
}

View File

@@ -1,179 +0,0 @@
package restricted
import (
"strconv"
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/service/repoService"
"git.ma-al.com/goc_daniel/b2b/app/utils/pagination"
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
"github.com/gofiber/fiber/v3"
)
// RepoHandler handles endpoints asking for repository data (to create charts)
type RepoHandler struct {
repoService *repoService.RepoService
config *config.Config
}
// NewRepoHandler creates a new RepoHandler instance
func NewRepoHandler() *RepoHandler {
repoService := repoService.New()
return &RepoHandler{
repoService: repoService,
config: config.Get(),
}
}
// RepoHandlerRoutes registers all repo routes
func RepoHandlerRoutes(r fiber.Router) fiber.Router {
handler := NewRepoHandler()
r.Get("/get-repos", handler.GetRepoIDs)
r.Get("/get-years", handler.GetYears)
r.Get("/get-quarters", handler.GetQuarters)
r.Get("/get-issues", handler.GetIssues)
return r
}
func (h *RepoHandler) GetRepoIDs(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody),
})
}
response, err := h.repoService.GetRepositoriesForUser(userID)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, err),
})
}
return c.JSON(response)
}
func (h *RepoHandler) GetYears(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody),
})
}
repoID_attribute := c.Query("repoID")
repoID, err := strconv.Atoi(repoID_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadRepoIDAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadRepoIDAttribute),
})
}
response, err := h.repoService.GetYearsForUser(userID, uint(repoID))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, err),
})
}
return c.JSON(response)
}
func (h *RepoHandler) GetQuarters(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody),
})
}
repoID_attribute := c.Query("repoID")
repoID, err := strconv.Atoi(repoID_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadRepoIDAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadRepoIDAttribute),
})
}
year_attribute := c.Query("year")
year, err := strconv.Atoi(year_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadYearAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadYearAttribute),
})
}
response, err := h.repoService.GetQuartersForUser(userID, uint(repoID), uint(year))
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, err),
})
}
return c.JSON(response)
}
func (h *RepoHandler) GetIssues(c fiber.Ctx) error {
userID, ok := c.Locals("userID").(uint)
if !ok {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrInvalidBody)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrInvalidBody),
})
}
repoID_attribute := c.Query("repoID")
repoID, err := strconv.Atoi(repoID_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadRepoIDAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadRepoIDAttribute),
})
}
year_attribute := c.Query("year")
year, err := strconv.Atoi(year_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadYearAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadYearAttribute),
})
}
quarter_attribute := c.Query("quarter")
quarter, err := strconv.Atoi(quarter_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadQuarterAttribute)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadQuarterAttribute),
})
}
page_number_attribute := c.Query("page_number")
page_number, err := strconv.Atoi(page_number_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadPaging)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadPaging),
})
}
elements_per_page_attribute := c.Query("elements_per_page")
elements_per_page, err := strconv.Atoi(elements_per_page_attribute)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadPaging)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, responseErrors.ErrBadPaging),
})
}
var paging pagination.Paging
paging.Page = uint(page_number)
paging.Elements = uint(elements_per_page)
response, err := h.repoService.GetIssuesForUser(userID, uint(repoID), uint(year), uint(quarter), paging)
if err != nil {
return c.Status(responseErrors.GetErrorStatus(err)).JSON(fiber.Map{
"error": responseErrors.GetErrorCode(c, err),
})
}
return c.JSON(response)
}

View File

@@ -90,8 +90,8 @@ func (s *Server) Setup() error {
public.AuthHandlerRoutes(auth)
// Repo routes (restricted)
repo := s.restricted.Group("/repo")
restricted.RepoHandlerRoutes(repo)
productDescription := s.restricted.Group("/product-description")
restricted.ProductDescriptionHandlerRoutes(productDescription)
// // Restricted routes example
// restricted := s.api.Group("/restricted")