167 lines
4.6 KiB
Go
167 lines
4.6 KiB
Go
package customerRepo
|
|
|
|
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 UICustomerRepo interface {
|
|
Get(id uint) (*model.Customer, error)
|
|
GetByEmail(email string) (*model.Customer, error)
|
|
GetByExternalProviderId(provider model.AuthProvider, id string) (*model.Customer, error)
|
|
Find(langId uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.UserInList], error)
|
|
Save(customer *model.Customer) error
|
|
Create(customer *model.Customer) error
|
|
}
|
|
|
|
type CustomerRepo struct{}
|
|
|
|
func New() UICustomerRepo {
|
|
return &CustomerRepo{}
|
|
}
|
|
|
|
func (repo *CustomerRepo) Get(id uint) (*model.Customer, error) {
|
|
var customer model.Customer
|
|
|
|
err := db.DB.
|
|
Preload("Role.Permissions").
|
|
First(&customer, id).
|
|
Error
|
|
|
|
return &customer, err
|
|
}
|
|
|
|
func (repo *CustomerRepo) GetByEmail(email string) (*model.Customer, error) {
|
|
var customer model.Customer
|
|
|
|
err := db.DB.
|
|
Preload("Role.Permissions").
|
|
Where("email = ?", email).
|
|
First(&customer).
|
|
Error
|
|
|
|
return &customer, err
|
|
}
|
|
|
|
func (repo *CustomerRepo) GetByExternalProviderId(provider model.AuthProvider, id string) (*model.Customer, error) {
|
|
var customer model.Customer
|
|
|
|
err := db.DB.
|
|
Preload("Role.Permissions").
|
|
Where("provider = ? AND provider_id = ?", provider, id).
|
|
First(&customer).
|
|
Error
|
|
|
|
return &customer, err
|
|
}
|
|
|
|
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 *CustomerRepo) Save(customer *model.Customer) error {
|
|
return db.DB.Save(customer).Error
|
|
}
|
|
|
|
func (repo *CustomerRepo) Create(customer *model.Customer) error {
|
|
return db.DB.Create(customer).Error
|
|
}
|
|
|
|
// func (repo *CustomerRepo) Search(
|
|
// customerId uint,
|
|
// partnerCode string,
|
|
// p find.Paging,
|
|
// filt *filters.FiltersList,
|
|
// search string,
|
|
// ) (found find.Found[model.UserInList], err error) {
|
|
// words := strings.Fields(search)
|
|
// if len(words) > 5 {
|
|
// words = words[:5]
|
|
// }
|
|
|
|
// query := ctx.DB().
|
|
// Model(&model.Customer{}).
|
|
// Select("customer.id AS id, customer.first_name as first_name, customer.last_name as last_name, customer.phone_number AS phone_number, customer.email AS email, count(distinct investment_plan_contract.id) as iiplan_purchases, count(distinct `order`.id) as single_purchases, entity.name as entity_name").
|
|
// Where("customer.id <> ?", customerId).
|
|
// Where("(customer.id IN (SELECT id FROM customer WHERE partner_code IN (WITH RECURSIVE partners AS (SELECT code AS dst FROM partner WHERE code = ? UNION SELECT code FROM partner JOIN partners ON partners.dst = partner.superior_code) SELECT dst FROM partners)) OR customer.recommender_code = ?)", partnerCode, partnerCode).
|
|
// Scopes(view.CustomerListQuery())
|
|
|
|
// var conditions []string
|
|
// var args []interface{}
|
|
// for _, word := range words {
|
|
|
|
// conditions = append(conditions, `
|
|
// (LOWER(first_name) LIKE ? OR
|
|
// LOWER(last_name) LIKE ? OR
|
|
// phone_number LIKE ? OR
|
|
// LOWER(email) LIKE ?)
|
|
// `)
|
|
|
|
// for i := 0; i < 4; i++ {
|
|
// args = append(args, "%"+strings.ToLower(word)+"%")
|
|
// }
|
|
// }
|
|
|
|
// finalQuery := strings.Join(conditions, " AND ")
|
|
|
|
// query = query.Where(finalQuery, args...).
|
|
// Scopes(filt.All()...)
|
|
|
|
// found, err = find.Paginate[V](ctx, p, query)
|
|
|
|
// return found, errs.Recorded(span, 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
|
|
// }
|