package dao import ( "context" "cms-api/internal/model" ) // GetById 根据ID获取合作伙伴 func (dao *PartnerDao) GetById(ctx context.Context, id int) (*model.Partner, error) { var partner *model.Partner err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Scan(&partner) if err != nil { return nil, err } return partner, nil } // List 获取合作伙伴列表 func (dao *PartnerDao) List(ctx context.Context, req *model.PartnerListRequest) ([]*model.Partner, int, error) { var ( partners []*model.Partner total int db = dao.Ctx(ctx) ) // 添加查询条件 if req.Category != "" { db = db.Where(dao.Columns().Category, req.Category) } if req.IsFeatured >= 0 { db = db.Where(dao.Columns().IsFeatured, req.IsFeatured) } if req.Status >= 0 { db = db.Where(dao.Columns().Status, req.Status) } if req.Keyword != "" { db = db.Where(dao.Columns().Name+" LIKE ? OR "+dao.Columns().Description+" LIKE ?", "%"+req.Keyword+"%", "%"+req.Keyword+"%") } // 获取总数 count, err := db.Count() if err != nil { return nil, 0, err } total = count // 分页查询 offset := (req.Page - 1) * req.PageSize err = db.Order(dao.Columns().SortOrder + " ASC, " + dao.Columns().CreatedAt + " DESC"). Limit(req.PageSize). Offset(offset). Scan(&partners) if err != nil { return nil, 0, err } return partners, total, nil } // GetAll 获取所有合作伙伴 func (dao *PartnerDao) GetAll(ctx context.Context) ([]*model.Partner, error) { var partners []*model.Partner err := dao.Ctx(ctx).Where(dao.Columns().Status, 1).Order(dao.Columns().SortOrder + " ASC").Scan(&partners) if err != nil { return nil, err } return partners, nil } // GetFeatured 获取推荐合作伙伴 func (dao *PartnerDao) GetFeatured(ctx context.Context, limit int) ([]*model.Partner, error) { var partners []*model.Partner err := dao.Ctx(ctx). Where(dao.Columns().Status, 1). Where(dao.Columns().IsFeatured, 1). Order(dao.Columns().SortOrder + " ASC"). Limit(limit). Scan(&partners) return partners, err } // GetByCategory 根据分类获取合作伙伴 func (dao *PartnerDao) GetByCategory(ctx context.Context, category string) ([]*model.Partner, error) { var partners []*model.Partner err := dao.Ctx(ctx). Where(dao.Columns().Category, category). Where(dao.Columns().Status, 1). Order(dao.Columns().SortOrder + " ASC"). Scan(&partners) return partners, err } // GetByName 根据名称获取合作伙伴 func (dao *PartnerDao) GetByName(ctx context.Context, name string) (*model.Partner, error) { var partner *model.Partner err := dao.Ctx(ctx).Where(dao.Columns().Name, name).Scan(&partner) if err != nil { return nil, err } return partner, nil } // Create 创建合作伙伴 func (dao *PartnerDao) Create(ctx context.Context, partner *model.Partner) (int64, error) { result, err := dao.Ctx(ctx).Data(partner).Insert() if err != nil { return 0, err } id, err := result.LastInsertId() if err != nil { return 0, err } return id, nil } // Update 更新合作伙伴 func (dao *PartnerDao) Update(ctx context.Context, id int, data interface{}) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(data).Update() return err } // Delete 删除合作伙伴 func (dao *PartnerDao) Delete(ctx context.Context, id int) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Delete() return err } // UpdateStatus 更新合作伙伴状态 func (dao *PartnerDao) UpdateStatus(ctx context.Context, id int, status int) error { _, err := dao.Ctx(ctx).Where(dao.Columns().Id, id).Data(map[string]interface{}{ dao.Columns().Status: status, }).Update() return err } // GetCount 获取合作伙伴总数 func (dao *PartnerDao) GetCount(ctx context.Context) (int, error) { count, err := dao.Ctx(ctx).Count() return count, err } // GetCountByStatus 根据状态获取合作伙伴数 func (dao *PartnerDao) GetCountByStatus(ctx context.Context, status int) (int, error) { count, err := dao.Ctx(ctx).Where(dao.Columns().Status, status).Count() return count, err } // GetFeaturedCount 获取推荐合作伙伴数 func (dao *PartnerDao) GetFeaturedCount(ctx context.Context) (int, error) { count, err := dao.Ctx(ctx).Where(dao.Columns().IsFeatured, 1).Count() return count, err } // GetCategories 获取所有分类 func (dao *PartnerDao) GetCategories(ctx context.Context) ([]string, error) { var categories []string err := dao.Ctx(ctx).Fields("DISTINCT " + dao.Columns().Category).Scan(&categories) if err != nil { return nil, err } return categories, nil } // GetCountByCategory 根据分类获取合作伙伴数 func (dao *PartnerDao) GetCountByCategory(ctx context.Context, category string) (int, error) { count, err := dao.Ctx(ctx).Where(dao.Columns().Category, category).Count() return count, err }