Update scheduling parameters and refactor channel endpoints: extend HorizonDays to 7 and RetentionDays to 90 in appsettings.json. Consolidate channel-related endpoint logic by removing obsolete files and enhancing the ShowEndpoints with audience and genre management capabilities. Improve error handling and streamline command handlers for channel operations.
build / backend (push) Successful in 7m40s
build / frontend (push) Failing after 39s
tests / backend-tests (push) Successful in 6m9s

This commit is contained in:
Leonid Pershin
2026-07-26 13:32:13 +03:00
parent c4ef954dea
commit 66040a8841
272 changed files with 27944 additions and 8699 deletions
+21
View File
@@ -29,6 +29,27 @@ function AdminLayout() {
>
{t('admin.shows.title')}
</Link>
<Link
to="/admin/groups"
className={cn('pb-2 uppercase tracking-wide text-muted-foreground hover:text-foreground')}
activeProps={{ className: 'border-b-2 border-primary text-primary' }}
>
{t('admin.groups.title')}
</Link>
<Link
to="/admin/collections"
className={cn('pb-2 uppercase tracking-wide text-muted-foreground hover:text-foreground')}
activeProps={{ className: 'border-b-2 border-primary text-primary' }}
>
{t('admin.collections.title')}
</Link>
<Link
to="/admin/genres"
className={cn('pb-2 uppercase tracking-wide text-muted-foreground hover:text-foreground')}
activeProps={{ className: 'border-b-2 border-primary text-primary' }}
>
{t('admin.genres.title')}
</Link>
<Link
to="/admin/channels"
className={cn('pb-2 uppercase tracking-wide text-muted-foreground hover:text-foreground')}
@@ -0,0 +1,11 @@
import { createFileRoute } from '@tanstack/react-router'
import { CollectionDetail } from '@/features/admin/collections/CollectionDetail'
export const Route = createFileRoute('/admin/collections/$collectionId')({
component: CollectionDetailRoute,
})
function CollectionDetailRoute() {
const { collectionId } = Route.useParams()
return <CollectionDetail collectionId={collectionId} />
}
@@ -0,0 +1,4 @@
import { createFileRoute } from '@tanstack/react-router'
import { CollectionsPanel } from '@/features/admin/collections/CollectionsPanel'
export const Route = createFileRoute('/admin/collections/')({ component: CollectionsPanel })
@@ -0,0 +1,4 @@
import { createFileRoute, Outlet } from '@tanstack/react-router'
// Лейаут для /admin/collections/*: список — в index-роуте, деталь — в collections.$collectionId.
export const Route = createFileRoute('/admin/collections')({ component: () => <Outlet /> })
+4
View File
@@ -0,0 +1,4 @@
import { createFileRoute } from '@tanstack/react-router'
import { GenresPanel } from '@/features/admin/genres/GenresPanel'
export const Route = createFileRoute('/admin/genres')({ component: GenresPanel })
@@ -0,0 +1,9 @@
import { createFileRoute } from '@tanstack/react-router'
import { GroupDetail } from '@/features/admin/groups/GroupDetail'
export const Route = createFileRoute('/admin/groups/$groupId')({ component: GroupDetailRoute })
function GroupDetailRoute() {
const { groupId } = Route.useParams()
return <GroupDetail groupId={groupId} />
}
@@ -0,0 +1,4 @@
import { createFileRoute } from '@tanstack/react-router'
import { GroupsPanel } from '@/features/admin/groups/GroupsPanel'
export const Route = createFileRoute('/admin/groups/')({ component: GroupsPanel })
+4
View File
@@ -0,0 +1,4 @@
import { createFileRoute, Outlet } from '@tanstack/react-router'
// Лейаут для /admin/groups/*: список — в index-роуте, редактор — в groups.$groupId.
export const Route = createFileRoute('/admin/groups')({ component: () => <Outlet /> })