package repository import ( "gofaster/internal/auth/model" "gorm.io/gorm" ) // FrontendRouteRepository 前台路由仓库 type FrontendRouteRepository struct { db *gorm.DB } // NewFrontendRouteRepository 创建前台路由仓库实例 func NewFrontendRouteRepository(db *gorm.DB) *FrontendRouteRepository { return &FrontendRouteRepository{db: db} } // Create 创建前台路由 func (r *FrontendRouteRepository) Create(route *model.FrontendRoute) error { return r.db.Create(route).Error } // FindByID 根据ID查找前台路由 func (r *FrontendRouteRepository) FindByID(id uint) (*model.FrontendRoute, error) { var route model.FrontendRoute err := r.db.Where("id = ?", id).First(&route).Error if err != nil { return nil, err } return &route, nil } // FindByPath 根据路径查找前台路由 func (r *FrontendRouteRepository) FindByPath(path string) (*model.FrontendRoute, error) { var route model.FrontendRoute err := r.db.Where("path = ?", path).First(&route).Error if err != nil { return nil, err } return &route, nil } // FindByModule 根据模块查找前台路由 func (r *FrontendRouteRepository) FindByModule(module string) ([]*model.FrontendRoute, error) { var routes []*model.FrontendRoute err := r.db.Where("module = ?", module).Order("sort ASC").Find(&routes).Error return routes, err } // List 获取前台路由列表 func (r *FrontendRouteRepository) List() ([]*model.FrontendRoute, error) { var routes []*model.FrontendRoute err := r.db.Order("sort ASC").Find(&routes).Error return routes, err } // Update 更新前台路由 func (r *FrontendRouteRepository) Update(route *model.FrontendRoute) error { return r.db.Save(route).Error } // Delete 删除前台路由 func (r *FrontendRouteRepository) Delete(id uint) error { return r.db.Delete(&model.FrontendRoute{}, id).Error } // UpsertByPath 根据路径更新或插入前台路由 func (r *FrontendRouteRepository) UpsertByPath(route *model.FrontendRoute) error { var existingRoute model.FrontendRoute err := r.db.Where("path = ?", route.Path).First(&existingRoute).Error if err != nil { if err == gorm.ErrRecordNotFound { // 不存在则创建 return r.Create(route) } return err } // 存在则更新 route.ID = existingRoute.ID return r.Update(route) } // GetStats 获取前台路由统计信息 func (r *FrontendRouteRepository) GetStats() (map[string]interface{}, error) { var total int64 var moduleStats []struct { Module string `json:"module"` Count int64 `json:"count"` } if err := r.db.Model(&model.FrontendRoute{}).Count(&total).Error; err != nil { return nil, err } if err := r.db.Model(&model.FrontendRoute{}). Select("module, count(*) as count"). Group("module"). Scan(&moduleStats).Error; err != nil { return nil, err } return map[string]interface{}{ "total": total, "module_stats": moduleStats, }, nil }