mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-30 03:36:37 +08:00
7095d9ebec
Backend additions:
- New GORM models: NotifyChannel, PlayProfile (with PIN hashing).
- NotifyChannelService: multi-channel CRUD + unified dispatcher
supporting Telegram / Bark / WeChat / Webhook with optional
per-channel event filtering.
- PlayProfileService: per-user 'viewing personas' with
content-rating gates, library scoping, PIN protection, and
player defaults (autoplay, skip-intro, audio/subtitle prefs).
- New endpoints:
GET /admin/notify/channels list
POST /admin/notify/channels create
PUT /admin/notify/channels/:id update
DELETE /admin/notify/channels/:id delete
POST /admin/notify/channels/:id/test send test
GET /play-profiles list (admin: ?all=true)
POST /play-profiles create
PUT /play-profiles/:id update
DELETE /play-profiles/:id delete
GET /media/recent home page rail
GET /media/stats library composition
GET /watch-history list
GET /watch-history/stats aggregate
GET /watch-history/continue continue-watching rail
DELETE /watch-history[?media_id=] clear
DELETE /watch-history/:id remove one
GET /discover/sections available rails
GET /discover/feed?sections=a,b multi-section TMDb fetch
GET /system/info name/version/runtime
GET /system/status uptime/cpu/mem/disk
GET /system/scheduler read-only scheduler view
GET /stats/overview counts only
GET /stats/trend daily plays
GET /stats/top-content most played
GET /stats/libraries per-library size
GET /stats/monitor live hardware
Frontend additions:
- New API helpers: notify_channels, play_profiles, history,
stats_extra, media_extra, discover_extra, system.
- ProfileManagementPage (/play-profiles): full CRUD form with
PIN management, library scoping, language preferences.
- NotifyChannelsPage (/notify-channels, admin): typed config
forms per channel type + per-channel test action.
- SettingsPage (/settings, admin): grouped key/value editor
covering General, Organize/Scrape, Adult, qBittorrent.
- Layout sidebar links and App.tsx routes wired for all three.
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import { api } from './client'
|
|
import type { Hardware, Library, Media } from '../types'
|
|
|
|
// statsExtraAPI exposes the admin dashboard surfaces beyond /stats.
|
|
export const statsExtraAPI = {
|
|
overview: () =>
|
|
api
|
|
.get<{
|
|
libraries: number
|
|
media_count: number
|
|
users_count: number
|
|
total_size: number
|
|
total_seconds: number
|
|
generated_at: string
|
|
}>('/stats/overview')
|
|
.then((r) => r.data),
|
|
|
|
trend: (days = 14) =>
|
|
api
|
|
.get<{ trend: { day: string; count: number }[]; days: number }>('/stats/trend', {
|
|
params: { days },
|
|
})
|
|
.then((r) => r.data),
|
|
|
|
topContent: (limit = 10) =>
|
|
api
|
|
.get<{
|
|
items: { media: Media; play_count: number; last_played: string }[]
|
|
}>('/stats/top-content', { params: { limit } })
|
|
.then((r) => r.data),
|
|
|
|
libraries: () =>
|
|
api
|
|
.get<{
|
|
libraries: { library: Library; item_count: number; total_size: number }[]
|
|
}>('/stats/libraries')
|
|
.then((r) => r.data),
|
|
|
|
monitor: () => api.get<Hardware>('/stats/monitor').then((r) => r.data),
|
|
}
|