mirror of
https://github.com/ctwj/urldb.git
synced 2025-11-25 03:15:04 +08:00
update: category
This commit is contained in:
@@ -32,9 +32,10 @@ func ToResourceResponse(resource *entity.Resource) dto.ResourceResponse {
|
||||
response.Tags = make([]dto.TagResponse, len(resource.Tags))
|
||||
for i, tag := range resource.Tags {
|
||||
response.Tags[i] = dto.TagResponse{
|
||||
ID: tag.ID,
|
||||
Name: tag.Name,
|
||||
Description: tag.Description,
|
||||
ID: tag.ID,
|
||||
Name: tag.Name,
|
||||
Description: tag.Description,
|
||||
ResourceCount: 0, // 在资源上下文中,标签的资源数量不相关
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,19 +72,21 @@ func ToCategoryResponseList(categories []entity.Category, resourceCounts map[uin
|
||||
}
|
||||
|
||||
// ToTagResponse 将Tag实体转换为TagResponse
|
||||
func ToTagResponse(tag *entity.Tag) dto.TagResponse {
|
||||
func ToTagResponse(tag *entity.Tag, resourceCount int64) dto.TagResponse {
|
||||
return dto.TagResponse{
|
||||
ID: tag.ID,
|
||||
Name: tag.Name,
|
||||
Description: tag.Description,
|
||||
ID: tag.ID,
|
||||
Name: tag.Name,
|
||||
Description: tag.Description,
|
||||
ResourceCount: resourceCount,
|
||||
}
|
||||
}
|
||||
|
||||
// ToTagResponseList 将Tag实体列表转换为TagResponse列表
|
||||
func ToTagResponseList(tags []entity.Tag) []dto.TagResponse {
|
||||
func ToTagResponseList(tags []entity.Tag, resourceCounts map[uint]int64) []dto.TagResponse {
|
||||
responses := make([]dto.TagResponse, len(tags))
|
||||
for i, tag := range tags {
|
||||
responses[i] = ToTagResponse(&tag)
|
||||
count := resourceCounts[tag.ID]
|
||||
responses[i] = ToTagResponse(&tag, count)
|
||||
}
|
||||
return responses
|
||||
}
|
||||
|
||||
@@ -39,9 +39,10 @@ type CategoryResponse struct {
|
||||
|
||||
// TagResponse 标签响应
|
||||
type TagResponse struct {
|
||||
ID uint `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
ID uint `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
ResourceCount int64 `json:"resource_count"`
|
||||
}
|
||||
|
||||
// PanResponse 平台响应
|
||||
|
||||
@@ -12,6 +12,8 @@ type CategoryRepository interface {
|
||||
FindByName(name string) (*entity.Category, error)
|
||||
FindWithResources() ([]entity.Category, error)
|
||||
GetResourceCount(categoryID uint) (int64, error)
|
||||
FindWithPagination(page, pageSize int) ([]entity.Category, int64, error)
|
||||
Search(query string, page, pageSize int) ([]entity.Category, int64, error)
|
||||
}
|
||||
|
||||
// CategoryRepositoryImpl Category的Repository实现
|
||||
@@ -49,3 +51,49 @@ func (r *CategoryRepositoryImpl) GetResourceCount(categoryID uint) (int64, error
|
||||
err := r.db.Model(&entity.Resource{}).Where("category_id = ?", categoryID).Count(&count).Error
|
||||
return count, err
|
||||
}
|
||||
|
||||
// FindWithPagination 分页查询分类
|
||||
func (r *CategoryRepositoryImpl) FindWithPagination(page, pageSize int) ([]entity.Category, int64, error) {
|
||||
var categories []entity.Category
|
||||
var total int64
|
||||
|
||||
// 获取总数
|
||||
err := r.db.Model(&entity.Category{}).Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 分页查询
|
||||
offset := (page - 1) * pageSize
|
||||
err = r.db.Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&categories).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return categories, total, nil
|
||||
}
|
||||
|
||||
// Search 搜索分类
|
||||
func (r *CategoryRepositoryImpl) Search(query string, page, pageSize int) ([]entity.Category, int64, error) {
|
||||
var categories []entity.Category
|
||||
var total int64
|
||||
|
||||
// 构建搜索条件
|
||||
searchQuery := "%" + query + "%"
|
||||
|
||||
// 获取总数
|
||||
err := r.db.Model(&entity.Category{}).Where("name ILIKE ? OR description ILIKE ?", searchQuery, searchQuery).Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 分页搜索
|
||||
offset := (page - 1) * pageSize
|
||||
err = r.db.Where("name ILIKE ? OR description ILIKE ?", searchQuery, searchQuery).
|
||||
Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&categories).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return categories, total, nil
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ type TagRepository interface {
|
||||
FindWithResources() ([]entity.Tag, error)
|
||||
GetResourceCount(tagID uint) (int64, error)
|
||||
FindByResourceID(resourceID uint) ([]entity.Tag, error)
|
||||
FindWithPagination(page, pageSize int) ([]entity.Tag, int64, error)
|
||||
Search(query string, page, pageSize int) ([]entity.Tag, int64, error)
|
||||
}
|
||||
|
||||
// TagRepositoryImpl Tag的Repository实现
|
||||
@@ -58,3 +60,49 @@ func (r *TagRepositoryImpl) FindByResourceID(resourceID uint) ([]entity.Tag, err
|
||||
Where("resource_tags.resource_id = ?", resourceID).Find(&tags).Error
|
||||
return tags, err
|
||||
}
|
||||
|
||||
// FindWithPagination 分页查询标签
|
||||
func (r *TagRepositoryImpl) FindWithPagination(page, pageSize int) ([]entity.Tag, int64, error) {
|
||||
var tags []entity.Tag
|
||||
var total int64
|
||||
|
||||
// 获取总数
|
||||
err := r.db.Model(&entity.Tag{}).Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 分页查询
|
||||
offset := (page - 1) * pageSize
|
||||
err = r.db.Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&tags).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return tags, total, nil
|
||||
}
|
||||
|
||||
// Search 搜索标签
|
||||
func (r *TagRepositoryImpl) Search(query string, page, pageSize int) ([]entity.Tag, int64, error) {
|
||||
var tags []entity.Tag
|
||||
var total int64
|
||||
|
||||
// 构建搜索条件
|
||||
searchQuery := "%" + query + "%"
|
||||
|
||||
// 获取总数
|
||||
err := r.db.Model(&entity.Tag{}).Where("name ILIKE ? OR description ILIKE ?", searchQuery, searchQuery).Count(&total).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 分页搜索
|
||||
offset := (page - 1) * pageSize
|
||||
err = r.db.Where("name ILIKE ? OR description ILIKE ?", searchQuery, searchQuery).
|
||||
Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&tags).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return tags, total, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user