94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
|
|
"video-factory/shortdrama/dao"
|
|
"video-factory/shortdrama/middleware"
|
|
"video-factory/shortdrama/model/dto"
|
|
"video-factory/shortdrama/model/entity"
|
|
"video-factory/shortdrama/service"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
)
|
|
|
|
type customer struct{}
|
|
|
|
var Customer = new(customer)
|
|
|
|
type createCustomerRes struct {
|
|
Id int64 `json:"id"`
|
|
}
|
|
|
|
func (c *customer) Create(ctx context.Context, req *dto.CreateCustomerReq) (res *createCustomerRes, err error) {
|
|
agentId := req.AgentId
|
|
if agentId == 0 {
|
|
r := g.RequestFromCtx(ctx)
|
|
agentId = middleware.GetUserId(r)
|
|
}
|
|
user, err := service.AuthService.CreateCustomer(ctx, req.Phone, req.Name, req.Region, agentId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &createCustomerRes{Id: user.Id}, nil
|
|
}
|
|
|
|
func (c *customer) List(ctx context.Context, req *dto.ListCustomerReq) (res *dto.ListCustomerRes, err error) {
|
|
var list []*entity.User
|
|
var total int
|
|
if req.AgentId > 0 {
|
|
list, total, err = dao.User.ListByAgent(ctx, req.AgentId, req.Page, req.PageSize)
|
|
} else {
|
|
list, total, err = dao.User.ListByRole(ctx, "customer", req.Page, req.PageSize)
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
items := make([]*dto.ListCustomerItem, len(list))
|
|
for i, u := range list {
|
|
items[i] = &dto.ListCustomerItem{
|
|
Id: u.Id,
|
|
Phone: u.Phone,
|
|
Name: u.Name,
|
|
Region: u.Region,
|
|
Status: u.Status,
|
|
}
|
|
cp, _ := dao.CustomerProfile.Get(ctx, u.Id)
|
|
if cp != nil {
|
|
items[i].Balance = cp.Balance
|
|
items[i].AgentId = cp.AgentId
|
|
}
|
|
if u.CreatedAt != nil {
|
|
items[i].CreatedAt = u.CreatedAt.String()
|
|
}
|
|
}
|
|
return &dto.ListCustomerRes{List: items, Total: total, Page: req.Page, PageSize: req.PageSize}, nil
|
|
}
|
|
|
|
func (c *customer) Detail(ctx context.Context, req *struct{ Id int64 }) (res *dto.CustomerDetail, err error) {
|
|
user, err := dao.User.GetOne(ctx, req.Id)
|
|
if err != nil || user == nil {
|
|
return nil, err
|
|
}
|
|
profile, _ := dao.CustomerProfile.Get(ctx, req.Id)
|
|
balance := service.AuthService.GetBalance(ctx, req.Id)
|
|
return &dto.CustomerDetail{User: user, Profile: profile, Balance: balance}, nil
|
|
}
|
|
|
|
func (c *customer) Update(ctx context.Context, req *dto.UpdateCustomerReq) (res *struct{}, err error) {
|
|
m := g.Map{}
|
|
if req.Phone != "" {
|
|
m["phone"] = req.Phone
|
|
}
|
|
if req.Name != "" {
|
|
m["name"] = req.Name
|
|
}
|
|
if req.Region != "" {
|
|
m["region"] = req.Region
|
|
}
|
|
if len(m) == 0 {
|
|
return nil, nil
|
|
}
|
|
return nil, dao.User.UpdateFields(ctx, req.Id, m)
|
|
}
|