You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

108 lines
3.3 KiB

package repository
import (
"gofaster/internal/auth/model"
"gofaster/internal/shared/repository"
"gorm.io/gorm"
)
// RouteMappingRepository 路由映射仓库
type RouteMappingRepository struct {
repository.BaseRepo
}
// NewRouteMappingRepository 创建路由映射仓库实例
func NewRouteMappingRepository(db *gorm.DB) *RouteMappingRepository {
return &RouteMappingRepository{
BaseRepo: *repository.NewBaseRepo(db),
}
}
// Create 创建路由映射
func (r *RouteMappingRepository) Create(mapping *model.RouteMapping) error {
return r.DB().Create(mapping).Error
}
// Update 更新路由映射
func (r *RouteMappingRepository) Update(mapping *model.RouteMapping) error {
return r.DB().Save(mapping).Error
}
// Delete 删除路由映射
func (r *RouteMappingRepository) Delete(id uint) error {
return r.DB().Delete(&model.RouteMapping{}, id).Error
}
// FindByID 根据ID查找路由映射
func (r *RouteMappingRepository) FindByID(id uint) (*model.RouteMapping, error) {
var mapping model.RouteMapping
err := r.DB().First(&mapping, id).Error
if err != nil {
return nil, err
}
return &mapping, nil
}
// FindByBackendRoute 根据后台路由查找映射
func (r *RouteMappingRepository) FindByBackendRoute(backendRoute, httpMethod string) (*model.RouteMapping, error) {
var mapping model.RouteMapping
err := r.DB().Where("backend_route = ? AND http_method = ?", backendRoute, httpMethod).First(&mapping).Error
if err != nil {
return nil, err
}
return &mapping, nil
}
// FindByFrontendRoute 根据前台路由查找映射
func (r *RouteMappingRepository) FindByFrontendRoute(frontendRoute string) ([]model.RouteMapping, error) {
var mappings []model.RouteMapping
err := r.DB().Where("frontend_route = ?", frontendRoute).Find(&mappings).Error
return mappings, err
}
// FindAll 查找所有路由映射
func (r *RouteMappingRepository) FindAll() ([]model.RouteMapping, error) {
var mappings []model.RouteMapping
err := r.DB().Order("id ASC").Find(&mappings).Error
return mappings, err
}
// FindByModule 根据模块查找路由映射
func (r *RouteMappingRepository) FindByModule(module string) ([]model.RouteMapping, error) {
var mappings []model.RouteMapping
err := r.DB().Where("module = ?", module).Order("id ASC").Find(&mappings).Error
return mappings, err
}
// FindByResourceID 根据资源ID查找路由映射
func (r *RouteMappingRepository) FindByResourceID(resourceID uint) ([]model.RouteMapping, error) {
var mappings []model.RouteMapping
err := r.DB().Where("resource_id = ?", resourceID).Find(&mappings).Error
return mappings, err
}
// FindByMenuID 根据菜单ID查找路由映射
func (r *RouteMappingRepository) FindByMenuID(menuID uint) ([]model.RouteMapping, error) {
var mappings []model.RouteMapping
err := r.DB().Where("menu_id = ?", menuID).Find(&mappings).Error
return mappings, err
}
// CreateOrUpdate 创建或更新路由映射(用于增量同步)
func (r *RouteMappingRepository) CreateOrUpdate(mapping *model.RouteMapping) error {
var existing model.RouteMapping
err := r.DB().Where("backend_route = ? AND http_method = ?", mapping.BackendRoute, mapping.HTTPMethod).First(&existing).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
// 不存在则创建
return r.Create(mapping)
}
return err
}
// 存在则更新
mapping.ID = existing.ID
return r.Update(mapping)
}