refactor: update repository interfaces and improve dependency injection
- Refactored repository structures to use interfaces instead of concrete types, enhancing flexibility and testability. - Updated various repository methods to accept interfaces, allowing for better dependency management. - Modified wire generation to accommodate new repository interfaces, ensuring proper service injection throughout the application. - Enhanced handler methods to utilize DTOs for filtering and data handling, improving code clarity and maintainability.
This commit is contained in:
@@ -1,22 +1,34 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"carrot_bbs/internal/dto"
|
||||
"carrot_bbs/internal/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// MaterialSubjectRepository 学科分类仓储
|
||||
type MaterialSubjectRepository struct {
|
||||
// MaterialSubjectRepository 学科分类仓储接口
|
||||
type MaterialSubjectRepository interface {
|
||||
ListActive() ([]*model.MaterialSubject, error)
|
||||
ListAll() ([]*model.MaterialSubject, error)
|
||||
GetByID(id string) (*model.MaterialSubject, error)
|
||||
Create(subject *model.MaterialSubject) error
|
||||
Update(subject *model.MaterialSubject) error
|
||||
Delete(id string) error
|
||||
CountMaterials(subjectID string) (int64, error)
|
||||
}
|
||||
|
||||
// materialSubjectRepository 学科分类仓储实现
|
||||
type materialSubjectRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewMaterialSubjectRepository(db *gorm.DB) *MaterialSubjectRepository {
|
||||
return &MaterialSubjectRepository{db: db}
|
||||
func NewMaterialSubjectRepository(db *gorm.DB) MaterialSubjectRepository {
|
||||
return &materialSubjectRepository{db: db}
|
||||
}
|
||||
|
||||
// ListActive 获取所有启用的学科分类
|
||||
func (r *MaterialSubjectRepository) ListActive() ([]*model.MaterialSubject, error) {
|
||||
func (r *materialSubjectRepository) ListActive() ([]*model.MaterialSubject, error) {
|
||||
var subjects []*model.MaterialSubject
|
||||
err := r.db.
|
||||
Where("is_active = ?", true).
|
||||
@@ -26,7 +38,7 @@ func (r *MaterialSubjectRepository) ListActive() ([]*model.MaterialSubject, erro
|
||||
}
|
||||
|
||||
// ListAll 获取所有学科分类(管理端用)
|
||||
func (r *MaterialSubjectRepository) ListAll() ([]*model.MaterialSubject, error) {
|
||||
func (r *materialSubjectRepository) ListAll() ([]*model.MaterialSubject, error) {
|
||||
var subjects []*model.MaterialSubject
|
||||
err := r.db.
|
||||
Order("sort_order ASC, created_at ASC").
|
||||
@@ -35,7 +47,7 @@ func (r *MaterialSubjectRepository) ListAll() ([]*model.MaterialSubject, error)
|
||||
}
|
||||
|
||||
// GetByID 根据ID获取学科分类
|
||||
func (r *MaterialSubjectRepository) GetByID(id string) (*model.MaterialSubject, error) {
|
||||
func (r *materialSubjectRepository) GetByID(id string) (*model.MaterialSubject, error) {
|
||||
var subject model.MaterialSubject
|
||||
if err := r.db.First(&subject, "id = ?", id).Error; err != nil {
|
||||
return nil, err
|
||||
@@ -44,50 +56,53 @@ func (r *MaterialSubjectRepository) GetByID(id string) (*model.MaterialSubject,
|
||||
}
|
||||
|
||||
// Create 创建学科分类
|
||||
func (r *MaterialSubjectRepository) Create(subject *model.MaterialSubject) error {
|
||||
func (r *materialSubjectRepository) Create(subject *model.MaterialSubject) error {
|
||||
return r.db.Create(subject).Error
|
||||
}
|
||||
|
||||
// Update 更新学科分类
|
||||
func (r *MaterialSubjectRepository) Update(subject *model.MaterialSubject) error {
|
||||
func (r *materialSubjectRepository) Update(subject *model.MaterialSubject) error {
|
||||
return r.db.Save(subject).Error
|
||||
}
|
||||
|
||||
// Delete 删除学科分类
|
||||
func (r *MaterialSubjectRepository) Delete(id string) error {
|
||||
func (r *materialSubjectRepository) Delete(id string) error {
|
||||
return r.db.Delete(&model.MaterialSubject{}, "id = ?", id).Error
|
||||
}
|
||||
|
||||
// CountMaterials 统计学科下的资料数量
|
||||
func (r *MaterialSubjectRepository) CountMaterials(subjectID string) (int64, error) {
|
||||
func (r *materialSubjectRepository) CountMaterials(subjectID string) (int64, error) {
|
||||
var count int64
|
||||
err := r.db.Model(&model.MaterialFile{}).Where("subject_id = ?", subjectID).Count(&count).Error
|
||||
return count, err
|
||||
}
|
||||
|
||||
// MaterialFileRepository 文件资料仓储
|
||||
type MaterialFileRepository struct {
|
||||
// MaterialFileRepository 文件资料仓储接口
|
||||
type MaterialFileRepository interface {
|
||||
List(params dto.MaterialFileQueryParams) ([]*model.MaterialFile, int64, error)
|
||||
GetByID(id string) (*model.MaterialFile, error)
|
||||
GetByIDWithSubject(id string) (*model.MaterialFile, error)
|
||||
Create(file *model.MaterialFile) error
|
||||
Update(file *model.MaterialFile) error
|
||||
Delete(id string) error
|
||||
IncrementDownloadCount(id string) error
|
||||
GetBySubjectID(subjectID string, page, pageSize int) ([]*model.MaterialFile, int64, error)
|
||||
Search(keyword string, page, pageSize int) ([]*model.MaterialFile, int64, error)
|
||||
GetHotMaterials(limit int) ([]*model.MaterialFile, error)
|
||||
GetLatestMaterials(limit int) ([]*model.MaterialFile, error)
|
||||
}
|
||||
|
||||
// materialFileRepository 文件资料仓储实现
|
||||
type materialFileRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewMaterialFileRepository(db *gorm.DB) *MaterialFileRepository {
|
||||
return &MaterialFileRepository{db: db}
|
||||
}
|
||||
|
||||
// ListQueryParams 查询参数
|
||||
type MaterialFileQueryParams struct {
|
||||
SubjectID string
|
||||
FileType string
|
||||
Status string
|
||||
Keyword string
|
||||
Page int
|
||||
PageSize int
|
||||
SortBy string
|
||||
SortOrder string
|
||||
func NewMaterialFileRepository(db *gorm.DB) MaterialFileRepository {
|
||||
return &materialFileRepository{db: db}
|
||||
}
|
||||
|
||||
// List 获取资料列表(支持筛选和分页)
|
||||
func (r *MaterialFileRepository) List(params MaterialFileQueryParams) ([]*model.MaterialFile, int64, error) {
|
||||
func (r *materialFileRepository) List(params dto.MaterialFileQueryParams) ([]*model.MaterialFile, int64, error) {
|
||||
var files []*model.MaterialFile
|
||||
var total int64
|
||||
|
||||
@@ -144,7 +159,7 @@ func (r *MaterialFileRepository) List(params MaterialFileQueryParams) ([]*model.
|
||||
}
|
||||
|
||||
// GetByID 根据ID获取资料详情
|
||||
func (r *MaterialFileRepository) GetByID(id string) (*model.MaterialFile, error) {
|
||||
func (r *materialFileRepository) GetByID(id string) (*model.MaterialFile, error) {
|
||||
var file model.MaterialFile
|
||||
if err := r.db.First(&file, "id = ?", id).Error; err != nil {
|
||||
return nil, err
|
||||
@@ -153,7 +168,7 @@ func (r *MaterialFileRepository) GetByID(id string) (*model.MaterialFile, error)
|
||||
}
|
||||
|
||||
// GetByIDWithSubject 根据ID获取资料详情(包含学科信息)
|
||||
func (r *MaterialFileRepository) GetByIDWithSubject(id string) (*model.MaterialFile, error) {
|
||||
func (r *materialFileRepository) GetByIDWithSubject(id string) (*model.MaterialFile, error) {
|
||||
var file model.MaterialFile
|
||||
if err := r.db.Preload("Subject").First(&file, "id = ?", id).Error; err != nil {
|
||||
return nil, err
|
||||
@@ -162,28 +177,28 @@ func (r *MaterialFileRepository) GetByIDWithSubject(id string) (*model.MaterialF
|
||||
}
|
||||
|
||||
// Create 创建资料
|
||||
func (r *MaterialFileRepository) Create(file *model.MaterialFile) error {
|
||||
func (r *materialFileRepository) Create(file *model.MaterialFile) error {
|
||||
return r.db.Create(file).Error
|
||||
}
|
||||
|
||||
// Update 更新资料
|
||||
func (r *MaterialFileRepository) Update(file *model.MaterialFile) error {
|
||||
func (r *materialFileRepository) Update(file *model.MaterialFile) error {
|
||||
return r.db.Save(file).Error
|
||||
}
|
||||
|
||||
// Delete 删除资料
|
||||
func (r *MaterialFileRepository) Delete(id string) error {
|
||||
func (r *materialFileRepository) Delete(id string) error {
|
||||
return r.db.Delete(&model.MaterialFile{}, "id = ?", id).Error
|
||||
}
|
||||
|
||||
// IncrementDownloadCount 增加下载次数
|
||||
func (r *MaterialFileRepository) IncrementDownloadCount(id string) error {
|
||||
func (r *materialFileRepository) IncrementDownloadCount(id string) error {
|
||||
return r.db.Model(&model.MaterialFile{}).Where("id = ?", id).
|
||||
UpdateColumn("download_count", gorm.Expr("download_count + ?", 1)).Error
|
||||
}
|
||||
|
||||
// GetBySubjectID 根据学科ID获取资料列表
|
||||
func (r *MaterialFileRepository) GetBySubjectID(subjectID string, page, pageSize int) ([]*model.MaterialFile, int64, error) {
|
||||
func (r *materialFileRepository) GetBySubjectID(subjectID string, page, pageSize int) ([]*model.MaterialFile, int64, error) {
|
||||
var files []*model.MaterialFile
|
||||
var total int64
|
||||
|
||||
@@ -202,7 +217,7 @@ func (r *MaterialFileRepository) GetBySubjectID(subjectID string, page, pageSize
|
||||
}
|
||||
|
||||
// Search 搜索资料
|
||||
func (r *MaterialFileRepository) Search(keyword string, page, pageSize int) ([]*model.MaterialFile, int64, error) {
|
||||
func (r *materialFileRepository) Search(keyword string, page, pageSize int) ([]*model.MaterialFile, int64, error) {
|
||||
var files []*model.MaterialFile
|
||||
var total int64
|
||||
|
||||
@@ -225,7 +240,7 @@ func (r *MaterialFileRepository) Search(keyword string, page, pageSize int) ([]*
|
||||
}
|
||||
|
||||
// GetHotMaterials 获取热门资料(按下载次数排序)
|
||||
func (r *MaterialFileRepository) GetHotMaterials(limit int) ([]*model.MaterialFile, error) {
|
||||
func (r *materialFileRepository) GetHotMaterials(limit int) ([]*model.MaterialFile, error) {
|
||||
var files []*model.MaterialFile
|
||||
err := r.db.
|
||||
Where("status = ?", model.MaterialStatusActive).
|
||||
@@ -236,7 +251,7 @@ func (r *MaterialFileRepository) GetHotMaterials(limit int) ([]*model.MaterialFi
|
||||
}
|
||||
|
||||
// GetLatestMaterials 获取最新资料
|
||||
func (r *MaterialFileRepository) GetLatestMaterials(limit int) ([]*model.MaterialFile, error) {
|
||||
func (r *materialFileRepository) GetLatestMaterials(limit int) ([]*model.MaterialFile, error) {
|
||||
var files []*model.MaterialFile
|
||||
err := r.db.
|
||||
Where("status = ?", model.MaterialStatusActive).
|
||||
|
||||
Reference in New Issue
Block a user