mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-01 12:06:38 +08:00
73b95a8e38
- 新增 EmbyMount 表与 /admin/emby/mounts CRUD:把远程 Emby 的媒体库按需
挂载到本项目(同一服务器可选择性挂载/全量挂载),代理开关下沉到每个
挂载(一个 Emby 服务器可部分库代理、部分库直连)
- 伪装 ID 改为 embyremote~{mountID}~{remoteID}:播放/详情/状态/图片链路
全部经 ResolveMount 解析挂载与账号
- 新增「Emby 挂载」独立菜单页(/emby-mount):账号管理(添加/测试/编辑/
删除)+ 挂载列表(代理切换/停用/取消)+ 选择挂载对话框(多选+全量)
- STRM 管理页过滤 emby_remote 账号;账号表单移除 emby 类型
- Boot 幂等 AutoSeedMounts:旧 emby 账号自动全量挂载(沿用旧代理配置),
升级后媒体库不消失
- 修复:远程流请求注入浏览器 UA(防 Cloudflare 风控)+ 代理强制 Static=true
(阻止远程 ffmpeg 转码调度,反代纯字节中继)
- 全局搜索改为按挂载逐个搜索(结果归属与伪装 ID 正确)
69 lines
2.6 KiB
Go
69 lines
2.6 KiB
Go
// Package repository 实现基于 GORM 的数据访问层。
|
|
// 每个方法接受 context.Context 以便后续插入取消/追踪。
|
|
//
|
|
// Repository 故意保持精简:它们只负责持久化数据,不处理业务逻辑。
|
|
// 业务逻辑位于 internal/service。
|
|
package repository
|
|
|
|
import "gorm.io/gorm"
|
|
|
|
// Container 是所有 repositories 的注册表,注入到 services 中。
|
|
type Container struct {
|
|
DB *gorm.DB
|
|
User *UserRepository
|
|
Library *LibraryRepository
|
|
Media *MediaRepository
|
|
Series *SeriesRepository
|
|
History *HistoryRepository
|
|
Favorite *FavoriteRepository
|
|
Playlist *PlaylistRepository
|
|
Setting *SettingRepository
|
|
Log *AccessLogRepository
|
|
Permission *PermissionRepository
|
|
RefreshToken *RefreshTokenRepository
|
|
ApiConfig *ApiConfigRepository
|
|
PlayProfile *PlayProfileRepository
|
|
RegCode *RegistrationCodeRepository
|
|
SignIn *SignInRepository
|
|
UserDevice *UserDeviceRepository
|
|
StrmAccount *StrmAccountRepository
|
|
StrmSyncPath *StrmSyncPathRepository
|
|
StrmSyncRecord *StrmSyncRecordRepository
|
|
StrmDownload *StrmDownloadTaskRepository
|
|
StrmUpload *StrmUploadTaskRepository
|
|
StrmDirCache *StrmDirCacheRepository
|
|
ScrapeTask *ScrapeTaskRepository
|
|
EmbyMount *EmbyMountRepository
|
|
}
|
|
|
|
// New 将每个 repository 连接到单个 *gorm.DB。
|
|
func New(db *gorm.DB) *Container {
|
|
return &Container{
|
|
DB: db,
|
|
User: &UserRepository{db: db},
|
|
Library: &LibraryRepository{db: db},
|
|
Media: &MediaRepository{db: db},
|
|
Series: &SeriesRepository{db: db},
|
|
History: &HistoryRepository{db: db},
|
|
Favorite: &FavoriteRepository{db: db},
|
|
Playlist: &PlaylistRepository{db: db},
|
|
Setting: &SettingRepository{db: db},
|
|
Log: &AccessLogRepository{db: db},
|
|
Permission: &PermissionRepository{db: db},
|
|
RefreshToken: &RefreshTokenRepository{db: db},
|
|
ApiConfig: &ApiConfigRepository{db: db},
|
|
PlayProfile: &PlayProfileRepository{db: db},
|
|
RegCode: &RegistrationCodeRepository{db: db},
|
|
SignIn: &SignInRepository{db: db},
|
|
UserDevice: &UserDeviceRepository{db: db},
|
|
StrmAccount: &StrmAccountRepository{db: db},
|
|
StrmSyncPath: &StrmSyncPathRepository{db: db},
|
|
StrmSyncRecord: &StrmSyncRecordRepository{db: db},
|
|
StrmDownload: &StrmDownloadTaskRepository{db: db},
|
|
StrmUpload: &StrmUploadTaskRepository{db: db},
|
|
StrmDirCache: &StrmDirCacheRepository{db: db},
|
|
ScrapeTask: &ScrapeTaskRepository{db: db},
|
|
EmbyMount: &EmbyMountRepository{db: db},
|
|
}
|
|
}
|