refactor: move lists to their representative repos
This commit is contained in:
@@ -70,7 +70,7 @@ func (h *customerHandler) customerData(fc fiber.Ctx) error {
|
||||
}
|
||||
|
||||
func (h *customerHandler) listCustomers(fc fiber.Ctx) error {
|
||||
p, filt, err := query_params.ParseFilters[model.Customer](fc, columnMappingListProducts)
|
||||
p, filt, err := query_params.ParseFilters[model.Customer](fc, columnMappingListUsers)
|
||||
if err != nil {
|
||||
return fc.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, err)))
|
||||
@@ -94,3 +94,10 @@ func (h *customerHandler) listCustomers(fc fiber.Ctx) error {
|
||||
|
||||
return fc.JSON(response.Make(&customer, 0, i18n.T_(fc, response.Message_OK)))
|
||||
}
|
||||
|
||||
var columnMappingListUsers map[string]string = map[string]string{
|
||||
"user_id": "users.id",
|
||||
"email": "users.email",
|
||||
"first_name": "users.first_name",
|
||||
"second_name": "users.second_name",
|
||||
}
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
package restricted
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_daniel/b2b/app/config"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/service/listService"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
|
||||
"github.com/gofiber/fiber/v3"
|
||||
)
|
||||
|
||||
// ListHandler handles endpoints that list various things (e.g. products or users)
|
||||
type ListHandler struct {
|
||||
listService *listService.ListService
|
||||
config *config.Config
|
||||
}
|
||||
|
||||
// NewListHandler creates a new ListHandler instance
|
||||
func NewListHandler() *ListHandler {
|
||||
listService := listService.New()
|
||||
return &ListHandler{
|
||||
listService: listService,
|
||||
config: config.Get(),
|
||||
}
|
||||
}
|
||||
|
||||
func ListHandlerRoutes(r fiber.Router) fiber.Router {
|
||||
handler := NewListHandler()
|
||||
|
||||
r.Get("/list-products", handler.ListProducts)
|
||||
r.Get("/list-users", handler.ListUsers)
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
func (h *ListHandler) ListProducts(c fiber.Ctx) error {
|
||||
paging, filters, err := query_params.ParseFilters[model.Product](c, columnMappingListProducts)
|
||||
if err != nil {
|
||||
return c.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
||||
}
|
||||
|
||||
id_lang, ok := localeExtractor.GetLangID(c)
|
||||
if !ok {
|
||||
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
|
||||
}
|
||||
|
||||
list, err := h.listService.ListProducts(id_lang, paging, filters)
|
||||
if err != nil {
|
||||
return c.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
||||
}
|
||||
|
||||
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
|
||||
}
|
||||
|
||||
var columnMappingListProducts map[string]string = map[string]string{
|
||||
"product_id": "ps.id_product",
|
||||
"name": "pl.name",
|
||||
"reference": "p.reference",
|
||||
"category_name": "cl.name",
|
||||
"category_id": "cp.id_category",
|
||||
"quantity": "sa.quantity",
|
||||
}
|
||||
|
||||
func (h *ListHandler) ListUsers(c fiber.Ctx) error {
|
||||
paging, filters, err := query_params.ParseFilters[model.Customer](c, columnMappingListUsers)
|
||||
if err != nil {
|
||||
return c.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
||||
}
|
||||
|
||||
id_lang, ok := localeExtractor.GetLangID(c)
|
||||
if !ok {
|
||||
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
|
||||
}
|
||||
|
||||
list, err := h.listService.ListUsers(id_lang, paging, filters)
|
||||
if err != nil {
|
||||
return c.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
||||
}
|
||||
|
||||
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
|
||||
}
|
||||
|
||||
var columnMappingListUsers map[string]string = map[string]string{
|
||||
"user_id": "users.id",
|
||||
"email": "users.email",
|
||||
"first_name": "users.first_name",
|
||||
"second_name": "users.second_name",
|
||||
"role": "users.role",
|
||||
}
|
||||
@@ -4,10 +4,12 @@ import (
|
||||
"strconv"
|
||||
|
||||
"git.ma-al.com/goc_daniel/b2b/app/config"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/service/productService"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/localeExtractor"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/query_params"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
|
||||
"github.com/gofiber/fiber/v3"
|
||||
@@ -31,6 +33,7 @@ func ProductsHandlerRoutes(r fiber.Router) fiber.Router {
|
||||
handler := NewProductsHandler()
|
||||
|
||||
r.Get("/:id/:country_id/:quantity", handler.GetProductJson)
|
||||
r.Get("/list", handler.ListProducts)
|
||||
|
||||
return r
|
||||
}
|
||||
@@ -73,3 +76,34 @@ func (h *ProductsHandler) GetProductJson(c fiber.Ctx) error {
|
||||
|
||||
return c.JSON(response.Make(&productJson, 1, i18n.T_(c, response.Message_OK)))
|
||||
}
|
||||
|
||||
func (h *ProductsHandler) ListProducts(c fiber.Ctx) error {
|
||||
paging, filters, err := query_params.ParseFilters[model.Product](c, columnMappingListProducts)
|
||||
if err != nil {
|
||||
return c.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
||||
}
|
||||
|
||||
id_lang, ok := localeExtractor.GetLangID(c)
|
||||
if !ok {
|
||||
return c.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadAttribute)))
|
||||
}
|
||||
|
||||
list, err := h.productService.Find(id_lang, paging, filters)
|
||||
if err != nil {
|
||||
return c.Status(responseErrors.GetErrorStatus(err)).
|
||||
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
||||
}
|
||||
|
||||
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
|
||||
}
|
||||
|
||||
var columnMappingListProducts map[string]string = map[string]string{
|
||||
"product_id": "ps.id_product",
|
||||
"name": "pl.name",
|
||||
"reference": "p.reference",
|
||||
"category_name": "cl.name",
|
||||
"category_id": "cp.id_category",
|
||||
"quantity": "sa.quantity",
|
||||
}
|
||||
|
||||
@@ -97,10 +97,6 @@ func (s *Server) Setup() error {
|
||||
productTranslation := s.restricted.Group("/product-translation")
|
||||
restricted.ProductTranslationHandlerRoutes(productTranslation)
|
||||
|
||||
// lists of things routes (restricted)
|
||||
list := s.restricted.Group("/list")
|
||||
restricted.ListHandlerRoutes(list)
|
||||
|
||||
product := s.restricted.Group("/product")
|
||||
restricted.ProductsHandlerRoutes(product)
|
||||
|
||||
|
||||
@@ -177,5 +177,4 @@ type UserInList struct {
|
||||
Email string `gorm:"column:email" json:"email"`
|
||||
FirstName string `gorm:"column:first_name" json:"first_name"`
|
||||
LastName string `gorm:"column:last_name" json:"last_name"`
|
||||
Role string `gorm:"column:role" json:"role"`
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
type UICustomerRepo interface {
|
||||
Get(id uint) (*model.Customer, error)
|
||||
Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.Customer], error)
|
||||
Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.UserInList], error)
|
||||
}
|
||||
|
||||
type CustomerRepo struct{}
|
||||
@@ -29,11 +29,57 @@ func (repo *CustomerRepo) Get(id uint) (*model.Customer, error) {
|
||||
return &customer, err
|
||||
}
|
||||
|
||||
func (repo *CustomerRepo) Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.Customer], error) {
|
||||
found, err := find.Paginate[model.Customer](langId, p, db.DB.
|
||||
Model(&model.Customer{}).
|
||||
func (repo *CustomerRepo) Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.UserInList], error) {
|
||||
found, err := find.Paginate[model.UserInList](langId, p, db.DB.
|
||||
Table("b2b_customers AS users").
|
||||
Select(`
|
||||
users.id AS id,
|
||||
users.email AS email,
|
||||
users.first_name AS first_name,
|
||||
users.last_name AS last_name
|
||||
`).
|
||||
Scopes(filt.All()...),
|
||||
)
|
||||
|
||||
return &found, err
|
||||
}
|
||||
|
||||
// func (repo *ListRepo) ListUsers(id_lang uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.UserInList], error) {
|
||||
// var list []model.UserInList
|
||||
// var total int64
|
||||
|
||||
// query := db.Get().
|
||||
// Table("b2b_customers AS users").
|
||||
// Select(`
|
||||
// users.id AS id,
|
||||
// users.email AS email,
|
||||
// users.first_name AS first_name,
|
||||
// users.last_name AS last_name,
|
||||
// users.role AS role
|
||||
// `)
|
||||
|
||||
// // Apply all filters
|
||||
// if filt != nil {
|
||||
// filt.ApplyAll(query)
|
||||
// }
|
||||
|
||||
// // run counter first as query is without limit and offset
|
||||
// err := query.Count(&total).Error
|
||||
// if err != nil {
|
||||
// return find.Found[model.UserInList]{}, err
|
||||
// }
|
||||
|
||||
// err = query.
|
||||
// Order("users.id DESC").
|
||||
// Limit(p.Limit()).
|
||||
// Offset(p.Offset()).
|
||||
// Find(&list).Error
|
||||
// if err != nil {
|
||||
// return find.Found[model.UserInList]{}, err
|
||||
// }
|
||||
|
||||
// return find.Found[model.UserInList]{
|
||||
// Items: list,
|
||||
// Count: uint(total),
|
||||
// }, nil
|
||||
// }
|
||||
|
||||
@@ -1,121 +0,0 @@
|
||||
package listRepo
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_daniel/b2b/app/config"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/db"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model/dbmodel"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/filters"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/find"
|
||||
"git.ma-al.com/goc_marek/gormcol"
|
||||
"github.com/WinterYukky/gorm-extra-clause-plugin/exclause"
|
||||
)
|
||||
|
||||
type UIListRepo interface {
|
||||
ListProducts(id_lang uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.ProductInList], error)
|
||||
ListUsers(id_lang uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.UserInList], error)
|
||||
}
|
||||
|
||||
type ListRepo struct{}
|
||||
|
||||
func New() UIListRepo {
|
||||
return &ListRepo{}
|
||||
}
|
||||
|
||||
func (repo *ListRepo) ListProducts(id_lang uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.ProductInList], error) {
|
||||
var list []model.ProductInList
|
||||
var total int64
|
||||
|
||||
query := db.Get().
|
||||
Table(gormcol.Field.Tab(dbmodel.PsProductShopCols.Active)+" AS ps").
|
||||
Select(`
|
||||
ps.id_product AS product_id,
|
||||
pl.name AS name,
|
||||
pl.link_rewrite AS link_rewrite,
|
||||
CONCAT(?, '/', ims.id_image, '-small_default/', pl.link_rewrite, '.webp') AS image_link,
|
||||
cl.name AS category_name,
|
||||
p.reference AS reference,
|
||||
COALESCE(v.variants_number, 0) AS variants_number,
|
||||
sa.quantity AS quantity
|
||||
`, config.Get().Image.ImagePrefix).
|
||||
Joins("JOIN "+dbmodel.PsProductCols.IDProduct.Tab()+" p ON p.id_product = ps.id_product").
|
||||
Joins("JOIN ps_product_lang pl ON pl.id_product = ps.id_product AND pl.id_lang = ?", id_lang).
|
||||
Joins("JOIN ps_image_shop ims ON ims.id_product = ps.id_product AND ims.cover = 1").
|
||||
Joins("JOIN ps_category_lang cl ON cl.id_category = ps.id_category_default AND cl.id_lang = ?", id_lang).
|
||||
Joins("JOIN ps_category_product cp ON cp.id_product = ps.id_product").
|
||||
Joins("LEFT JOIN variants v ON v.id_product = ps.id_product").
|
||||
Joins("LEFT JOIN ps_stock_available sa ON sa.id_product = ps.id_product AND sa.id_product_attribute = 0").
|
||||
Where("ps.active = ?", 1).
|
||||
Group("ps.id_product").
|
||||
Clauses(exclause.With{CTEs: []exclause.CTE{
|
||||
{
|
||||
Name: "variants",
|
||||
Subquery: exclause.Subquery{DB: db.Get().Model(&dbmodel.PsProductAttributeShop{}).Select("id_product", "COUNT(*) AS variants_number").Group("id_product")},
|
||||
},
|
||||
}})
|
||||
|
||||
// Apply all filters
|
||||
if filt != nil {
|
||||
filt.ApplyAll(query)
|
||||
}
|
||||
|
||||
// run counter first as query is without limit and offset
|
||||
err := query.Count(&total).Error
|
||||
if err != nil {
|
||||
return find.Found[model.ProductInList]{}, err
|
||||
}
|
||||
|
||||
err = query.
|
||||
Order("ps.id_product DESC").
|
||||
Limit(p.Limit()).
|
||||
Offset(p.Offset()).
|
||||
Find(&list).Error
|
||||
if err != nil {
|
||||
return find.Found[model.ProductInList]{}, err
|
||||
}
|
||||
|
||||
return find.Found[model.ProductInList]{
|
||||
Items: list,
|
||||
Count: uint(total),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (repo *ListRepo) ListUsers(id_lang uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.UserInList], error) {
|
||||
var list []model.UserInList
|
||||
var total int64
|
||||
|
||||
query := db.Get().
|
||||
Table("b2b_customers AS users").
|
||||
Select(`
|
||||
users.id AS id,
|
||||
users.email AS email,
|
||||
users.first_name AS first_name,
|
||||
users.last_name AS last_name,
|
||||
users.role AS role
|
||||
`)
|
||||
|
||||
// Apply all filters
|
||||
if filt != nil {
|
||||
filt.ApplyAll(query)
|
||||
}
|
||||
|
||||
// run counter first as query is without limit and offset
|
||||
err := query.Count(&total).Error
|
||||
if err != nil {
|
||||
return find.Found[model.UserInList]{}, err
|
||||
}
|
||||
|
||||
err = query.
|
||||
Order("users.id DESC").
|
||||
Limit(p.Limit()).
|
||||
Offset(p.Offset()).
|
||||
Find(&list).Error
|
||||
if err != nil {
|
||||
return find.Found[model.UserInList]{}, err
|
||||
}
|
||||
|
||||
return find.Found[model.UserInList]{
|
||||
Items: list,
|
||||
Count: uint(total),
|
||||
}, nil
|
||||
}
|
||||
@@ -4,11 +4,19 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"git.ma-al.com/goc_daniel/b2b/app/config"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/db"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model/dbmodel"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/filters"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/find"
|
||||
"git.ma-al.com/goc_marek/gormcol"
|
||||
"github.com/WinterYukky/gorm-extra-clause-plugin/exclause"
|
||||
)
|
||||
|
||||
type UIProductsRepo interface {
|
||||
GetJSON(p_id_product, p_id_shop, p_id_lang, p_id_customer, b2b_id_country, p_quantity int) (*json.RawMessage, error)
|
||||
Find(id_lang uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.ProductInList], error)
|
||||
}
|
||||
|
||||
type ProductsRepo struct{}
|
||||
@@ -37,3 +45,61 @@ func (repo *ProductsRepo) GetJSON(p_id_product, p_id_shop, p_id_lang, p_id_custo
|
||||
raw := json.RawMessage(productStr)
|
||||
return &raw, nil
|
||||
}
|
||||
|
||||
func (repo *ProductsRepo) Find(id_lang uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.ProductInList], error) {
|
||||
var list []model.ProductInList
|
||||
var total int64
|
||||
|
||||
query := db.Get().
|
||||
Table(gormcol.Field.Tab(dbmodel.PsProductShopCols.Active)+" AS ps").
|
||||
Select(`
|
||||
ps.id_product AS product_id,
|
||||
pl.name AS name,
|
||||
pl.link_rewrite AS link_rewrite,
|
||||
CONCAT(?, '/', ims.id_image, '-small_default/', pl.link_rewrite, '.webp') AS image_link,
|
||||
cl.name AS category_name,
|
||||
p.reference AS reference,
|
||||
COALESCE(v.variants_number, 0) AS variants_number,
|
||||
sa.quantity AS quantity
|
||||
`, config.Get().Image.ImagePrefix).
|
||||
Joins("JOIN "+dbmodel.PsProductCols.IDProduct.Tab()+" p ON p.id_product = ps.id_product").
|
||||
Joins("JOIN ps_product_lang pl ON pl.id_product = ps.id_product AND pl.id_lang = ?", id_lang).
|
||||
Joins("JOIN ps_image_shop ims ON ims.id_product = ps.id_product AND ims.cover = 1").
|
||||
Joins("JOIN ps_category_lang cl ON cl.id_category = ps.id_category_default AND cl.id_lang = ?", id_lang).
|
||||
Joins("JOIN ps_category_product cp ON cp.id_product = ps.id_product").
|
||||
Joins("LEFT JOIN variants v ON v.id_product = ps.id_product").
|
||||
Joins("LEFT JOIN ps_stock_available sa ON sa.id_product = ps.id_product AND sa.id_product_attribute = 0").
|
||||
Where("ps.active = ?", 1).
|
||||
Group("ps.id_product").
|
||||
Clauses(exclause.With{CTEs: []exclause.CTE{
|
||||
{
|
||||
Name: "variants",
|
||||
Subquery: exclause.Subquery{DB: db.Get().Model(&dbmodel.PsProductAttributeShop{}).Select("id_product", "COUNT(*) AS variants_number").Group("id_product")},
|
||||
},
|
||||
}}).
|
||||
Order("ps.id_product DESC")
|
||||
|
||||
// Apply all filters
|
||||
if filt != nil {
|
||||
filt.ApplyAll(query)
|
||||
}
|
||||
|
||||
// run counter first as query is without limit and offset
|
||||
err := query.Count(&total).Error
|
||||
if err != nil {
|
||||
return find.Found[model.ProductInList]{}, err
|
||||
}
|
||||
|
||||
err = query.
|
||||
Limit(p.Limit()).
|
||||
Offset(p.Offset()).
|
||||
Find(&list).Error
|
||||
if err != nil {
|
||||
return find.Found[model.ProductInList]{}, err
|
||||
}
|
||||
|
||||
return find.Found[model.ProductInList]{
|
||||
Items: list,
|
||||
Count: uint(total),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -21,6 +21,6 @@ func (s *CustomerService) GetById(id uint) (*model.Customer, error) {
|
||||
return s.repo.Get(id)
|
||||
}
|
||||
|
||||
func (s *CustomerService) Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.Customer], error) {
|
||||
func (s *CustomerService) Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.UserInList], error) {
|
||||
return s.repo.Find(langId, p, filt)
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
package listService
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/repos/listRepo"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/filters"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/find"
|
||||
)
|
||||
|
||||
type ListService struct {
|
||||
listRepo listRepo.UIListRepo
|
||||
}
|
||||
|
||||
func New() *ListService {
|
||||
return &ListService{
|
||||
listRepo: listRepo.New(),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ListService) ListProducts(id_lang uint, p find.Paging, filters *filters.FiltersList) (find.Found[model.ProductInList], error) {
|
||||
return s.listRepo.ListProducts(id_lang, p, filters)
|
||||
}
|
||||
|
||||
func (s *ListService) ListUsers(id_lang uint, p find.Paging, filters *filters.FiltersList) (find.Found[model.UserInList], error) {
|
||||
return s.listRepo.ListUsers(id_lang, p, filters)
|
||||
}
|
||||
@@ -3,8 +3,11 @@ package productService
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/repos/productsRepo"
|
||||
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/filters"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/find"
|
||||
)
|
||||
|
||||
type ProductService struct {
|
||||
@@ -25,3 +28,7 @@ func (s *ProductService) GetJSON(p_id_product, p_id_lang, p_id_customer, b2b_id_
|
||||
|
||||
return products, nil
|
||||
}
|
||||
|
||||
func (s *ProductService) Find(id_lang uint, p find.Paging, filters *filters.FiltersList) (find.Found[model.ProductInList], error) {
|
||||
return s.productsRepo.Find(id_lang, p, filters)
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ info:
|
||||
|
||||
http:
|
||||
method: GET
|
||||
url: "{{bas_url}}/restricted/list/list-products?p=1&elems=30&sort=product_id,asc&category_id_in=243&reference=~62"
|
||||
url: "{{bas_url}}/restricted/product/list?p=1&elems=30&sort=product_id,asc&category_id_in=243&reference=~62"
|
||||
params:
|
||||
- name: p
|
||||
value: "1"
|
||||
@@ -25,9 +25,6 @@ http:
|
||||
body:
|
||||
type: json
|
||||
data: ""
|
||||
auth:
|
||||
type: bearer
|
||||
token: "{{token}}"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
package currencyRepo
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_daniel/b2b/app/db"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/filters"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/utils/query/find"
|
||||
)
|
||||
|
||||
type UICurrencyRepo interface {
|
||||
CreateConversionRate(currencyRate *model.CurrencyRate) error
|
||||
Get(id uint) (*model.Currency, error)
|
||||
}
|
||||
|
||||
type CurrencyRepo struct{}
|
||||
|
||||
func New() UICurrencyRepo {
|
||||
return &CurrencyRepo{}
|
||||
}
|
||||
|
||||
func (repo *CurrencyRepo) CreateConversionRate(currencyRate *model.CurrencyRate) error {
|
||||
return db.DB.Debug().Create(currencyRate).Error
|
||||
}
|
||||
|
||||
func (repo *CurrencyRepo) Get(id uint) (*model.Currency, error) {
|
||||
var currency model.Currency
|
||||
|
||||
err := db.DB.Table("b2b_currencies c").
|
||||
Select("c.*, r.conversion_rate").
|
||||
Joins(`
|
||||
LEFT JOIN b2b_currency_rates r
|
||||
ON r.b2b_id_currency = c.id
|
||||
AND r.created_at = (
|
||||
SELECT MAX(created_at)
|
||||
FROM b2b_currency_rates
|
||||
WHERE b2b_id_currency = c.id
|
||||
)
|
||||
`).
|
||||
Where("c.id = ?", id).
|
||||
Scan(¤cy).Error
|
||||
|
||||
return ¤cy, err
|
||||
}
|
||||
|
||||
func (repo *CurrencyRepo) Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.Currency], error) {
|
||||
|
||||
found, err := find.Paginate[model.Currency](langId, p, db.DB.
|
||||
Model(&model.Currency{}).
|
||||
Scopes(filt.All()...),
|
||||
)
|
||||
|
||||
return &found, err
|
||||
}
|
||||
Reference in New Issue
Block a user