A personal media tracker built on the AT Protocol opnshelf.xyz
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: sync show metadata for smarter Up Next

Add local Season and Episode tables plus background TMDB sync so show
metadata can be cached and reused across tracking flows.

Use the local episode data to power Up Next sorting, progress metrics,
and next-episode resolution, and expose local season/episode endpoints.

Update mobile and web Up Next UIs with sort controls and progress bars,
and regenerate the API client for the new contract.

+8179 -5802
+89 -6
apps/mobile/app/(tabs)/profile/up-next.tsx
··· 4 4 } from "@opnshelf/api"; 5 5 import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; 6 6 import { router } from "expo-router"; 7 - import { ArrowLeft, LogIn, Tv } from "lucide-react-native"; 8 - import { useCallback, useMemo } from "react"; 7 + import { ArrowLeft, ArrowUpDown, LogIn, Tv } from "lucide-react-native"; 8 + import { useCallback, useMemo, useState } from "react"; 9 9 import { StyleSheet, Text, TouchableOpacity, View } from "react-native"; 10 10 import { SafeAreaView } from "react-native-safe-area-context"; 11 11 import { Button } from "@/components/ui/Button"; 12 12 import { Card, CardContent, CardHeader } from "@/components/ui/Card"; 13 + import { 14 + type SortBy, 15 + type SortOrder, 16 + SortPickerModal, 17 + type SortValue, 18 + } from "@/components/up-next/SortPickerModal"; 13 19 import { UpNextShowList } from "@/components/up-next/UpNextShowList"; 14 20 import { borderRadius, spacing } from "@/constants/spacing"; 15 21 import { useAuth } from "@/contexts/auth"; ··· 17 23 18 24 const PAGE_SIZE = 12; 19 25 26 + const SORT_LABELS: Record<SortValue, string> = { 27 + "lastWatched-desc": "Recently watched", 28 + "lastWatched-asc": "Oldest watched", 29 + "title-asc": "Title A-Z", 30 + "title-desc": "Title Z-A", 31 + "progress-desc": "Most progress", 32 + "progress-asc": "Least progress", 33 + }; 34 + 20 35 type UpNextInfiniteQueryKey = [ 21 36 { 22 37 _id: "showsControllerGetUserUpNext"; ··· 26 41 }; 27 42 query: { 28 43 pageSize: number; 44 + sortBy: SortBy; 45 + sortOrder: SortOrder; 29 46 }; 30 47 }, 31 48 ]; ··· 36 53 const queryClient = useQueryClient(); 37 54 const userDid = user?.did ?? ""; 38 55 56 + const [sortBy, setSortBy] = useState<SortBy>("lastWatched"); 57 + const [sortOrder, setSortOrder] = useState<SortOrder>("desc"); 58 + const [sortModalVisible, setSortModalVisible] = useState(false); 59 + const sortValue = `${sortBy}-${sortOrder}` as SortValue; 60 + 39 61 const queryKey = useMemo( 40 62 () => 41 63 [ ··· 43 65 _id: "showsControllerGetUserUpNext" as const, 44 66 _infinite: true as const, 45 67 path: { userDid }, 46 - query: { pageSize: PAGE_SIZE }, 68 + query: { pageSize: PAGE_SIZE, sortBy, sortOrder }, 47 69 }, 48 70 ] satisfies UpNextInfiniteQueryKey, 49 - [userDid], 71 + [userDid, sortBy, sortOrder], 50 72 ); 51 73 52 74 const upNextQuery = useInfiniteQuery({ ··· 57 79 query: { 58 80 page: pageParam as number, 59 81 pageSize: PAGE_SIZE, 82 + sortBy, 83 + sortOrder, 60 84 }, 61 85 signal, 62 86 throwOnError: true, ··· 69 93 getNextPageParam: (lastPage) => 70 94 lastPage.hasNextPage ? lastPage.page + 1 : undefined, 71 95 }); 96 + 97 + const handleSortChange = useCallback( 98 + (value: SortValue) => { 99 + const [newSortBy, newSortOrder] = value.split("-") as [SortBy, SortOrder]; 100 + setSortBy(newSortBy); 101 + setSortOrder(newSortOrder); 102 + queryClient.removeQueries({ queryKey }); 103 + }, 104 + [queryClient, queryKey], 105 + ); 72 106 73 107 const pages = upNextQuery.data?.pages ?? []; 74 108 const items = useMemo( ··· 166 200 style={[styles.container, { backgroundColor: colors.background }]} 167 201 edges={["top", "left", "right", "bottom"]} 168 202 > 169 - <Header /> 203 + <Header 204 + sortLabel={SORT_LABELS[sortValue]} 205 + onSortPress={() => setSortModalVisible(true)} 206 + /> 170 207 <UpNextShowList 171 208 items={items} 172 209 isLoading={upNextQuery.isLoading} ··· 178 215 refreshing={isRefreshing} 179 216 onRefresh={() => void handleRefresh()} 180 217 /> 218 + <SortPickerModal 219 + visible={sortModalVisible} 220 + onClose={() => setSortModalVisible(false)} 221 + value={sortValue} 222 + onSelect={handleSortChange} 223 + /> 181 224 </SafeAreaView> 182 225 ); 183 226 } 184 227 185 - function Header() { 228 + function Header({ 229 + sortLabel, 230 + onSortPress, 231 + }: { 232 + sortLabel?: string; 233 + onSortPress?: () => void; 234 + }) { 186 235 const { colors } = useTheme(); 187 236 188 237 return ( ··· 200 249 Pick up exactly where you left off. 201 250 </Text> 202 251 </View> 252 + {onSortPress && ( 253 + <TouchableOpacity 254 + onPress={onSortPress} 255 + style={[ 256 + styles.sortButton, 257 + { backgroundColor: colors.surfaceContainerHigh }, 258 + ]} 259 + > 260 + <ArrowUpDown size={16} color={colors.onSurfaceVariant} /> 261 + {sortLabel && ( 262 + <Text 263 + style={[styles.sortLabel, { color: colors.onSurfaceVariant }]} 264 + numberOfLines={1} 265 + > 266 + {sortLabel} 267 + </Text> 268 + )} 269 + </TouchableOpacity> 270 + )} 203 271 </View> 204 272 ); 205 273 } ··· 231 299 headerSubtitle: { 232 300 fontSize: 14, 233 301 lineHeight: 20, 302 + }, 303 + sortButton: { 304 + flexDirection: "row", 305 + alignItems: "center", 306 + gap: spacing.xs, 307 + paddingHorizontal: spacing.sm, 308 + paddingVertical: spacing.xs + 2, 309 + borderRadius: borderRadius.full, 310 + alignSelf: "flex-start", 311 + marginTop: spacing.xs, 312 + }, 313 + sortLabel: { 314 + fontSize: 12, 315 + fontWeight: "600", 316 + maxWidth: 100, 234 317 }, 235 318 centerContent: { 236 319 flex: 1,
+189
apps/mobile/components/up-next/SortPickerModal.tsx
··· 1 + import { 2 + ArrowDownAZ, 3 + ArrowUpDown, 4 + Check, 5 + Clock, 6 + TrendingUp, 7 + } from "lucide-react-native"; 8 + import { 9 + Modal, 10 + Pressable, 11 + StyleSheet, 12 + Text, 13 + View, 14 + } from "react-native"; 15 + import { borderRadius, spacing } from "@/constants/spacing"; 16 + import { useTheme } from "@/contexts/theme"; 17 + 18 + type SortBy = "lastWatched" | "title" | "progress"; 19 + type SortOrder = "asc" | "desc"; 20 + type SortValue = `${SortBy}-${SortOrder}`; 21 + 22 + const SORT_OPTIONS: Array<{ 23 + value: SortValue; 24 + label: string; 25 + Icon: typeof Clock; 26 + }> = [ 27 + { value: "lastWatched-desc", label: "Recently watched", Icon: Clock }, 28 + { value: "lastWatched-asc", label: "Oldest watched", Icon: Clock }, 29 + { value: "title-asc", label: "Title A-Z", Icon: ArrowDownAZ }, 30 + { value: "title-desc", label: "Title Z-A", Icon: ArrowDownAZ }, 31 + { value: "progress-desc", label: "Most progress", Icon: TrendingUp }, 32 + { value: "progress-asc", label: "Least progress", Icon: TrendingUp }, 33 + ]; 34 + 35 + interface SortPickerModalProps { 36 + visible: boolean; 37 + onClose: () => void; 38 + value: SortValue; 39 + onSelect: (value: SortValue) => void; 40 + } 41 + 42 + export type { SortBy, SortOrder, SortValue }; 43 + 44 + export function SortPickerModal({ 45 + visible, 46 + onClose, 47 + value, 48 + onSelect, 49 + }: SortPickerModalProps) { 50 + const { colors } = useTheme(); 51 + 52 + return ( 53 + <Modal 54 + visible={visible} 55 + animationType="fade" 56 + transparent 57 + onRequestClose={onClose} 58 + > 59 + <Pressable style={styles.overlay} onPress={onClose}> 60 + <Pressable 61 + style={[ 62 + styles.sheet, 63 + { backgroundColor: colors.surfaceContainer }, 64 + ]} 65 + onPress={(e) => e.stopPropagation()} 66 + > 67 + <View style={styles.handle}> 68 + <View 69 + style={[ 70 + styles.handleBar, 71 + { backgroundColor: colors.onSurfaceVariant }, 72 + ]} 73 + /> 74 + </View> 75 + 76 + <View style={styles.header}> 77 + <ArrowUpDown size={20} color={colors.onSurface} /> 78 + <Text style={[styles.title, { color: colors.onSurface }]}> 79 + Sort by 80 + </Text> 81 + </View> 82 + 83 + <View style={styles.options}> 84 + {SORT_OPTIONS.map((opt) => { 85 + const isSelected = opt.value === value; 86 + return ( 87 + <Pressable 88 + key={opt.value} 89 + onPress={() => { 90 + onSelect(opt.value); 91 + onClose(); 92 + }} 93 + style={[ 94 + styles.option, 95 + isSelected && { 96 + backgroundColor: `${colors.primaryContainer}`, 97 + }, 98 + ]} 99 + > 100 + <opt.Icon 101 + size={18} 102 + color={ 103 + isSelected 104 + ? colors.onPrimaryContainer 105 + : colors.onSurfaceVariant 106 + } 107 + /> 108 + <Text 109 + style={[ 110 + styles.optionLabel, 111 + { 112 + color: isSelected 113 + ? colors.onPrimaryContainer 114 + : colors.onSurface, 115 + fontWeight: isSelected ? "700" : "500", 116 + }, 117 + ]} 118 + > 119 + {opt.label} 120 + </Text> 121 + {isSelected && ( 122 + <Check 123 + size={18} 124 + color={colors.onPrimaryContainer} 125 + style={styles.checkIcon} 126 + /> 127 + )} 128 + </Pressable> 129 + ); 130 + })} 131 + </View> 132 + </Pressable> 133 + </Pressable> 134 + </Modal> 135 + ); 136 + } 137 + 138 + const styles = StyleSheet.create({ 139 + overlay: { 140 + flex: 1, 141 + backgroundColor: "rgba(0, 0, 0, 0.5)", 142 + justifyContent: "flex-end", 143 + }, 144 + sheet: { 145 + borderTopLeftRadius: borderRadius.xxl, 146 + borderTopRightRadius: borderRadius.xxl, 147 + paddingBottom: spacing.xl, 148 + }, 149 + handle: { 150 + alignItems: "center", 151 + paddingVertical: spacing.sm, 152 + }, 153 + handleBar: { 154 + width: 36, 155 + height: 4, 156 + borderRadius: borderRadius.full, 157 + opacity: 0.4, 158 + }, 159 + header: { 160 + flexDirection: "row", 161 + alignItems: "center", 162 + gap: spacing.sm, 163 + paddingHorizontal: spacing.lg, 164 + paddingTop: spacing.sm, 165 + paddingBottom: spacing.md, 166 + }, 167 + title: { 168 + fontSize: 18, 169 + fontWeight: "700", 170 + }, 171 + options: { 172 + paddingHorizontal: spacing.md, 173 + }, 174 + option: { 175 + flexDirection: "row", 176 + alignItems: "center", 177 + gap: spacing.md, 178 + paddingVertical: spacing.md, 179 + paddingHorizontal: spacing.md, 180 + borderRadius: borderRadius.lg, 181 + }, 182 + optionLabel: { 183 + fontSize: 15, 184 + flex: 1, 185 + }, 186 + checkIcon: { 187 + marginLeft: "auto", 188 + }, 189 + });
+38
apps/mobile/components/up-next/UpNextShowList.tsx
··· 142 142 </View> 143 143 )} 144 144 </View> 145 + {item.totalEpisodes > 0 && ( 146 + <View 147 + style={[ 148 + styles.progressTrack, 149 + { backgroundColor: colors.surfaceContainerHighest }, 150 + ]} 151 + > 152 + <View 153 + style={[ 154 + styles.progressFill, 155 + { 156 + width: `${Math.min(Math.round((item.episodesWatched / item.totalEpisodes) * 100), 100)}%`, 157 + backgroundColor: colors.primary, 158 + }, 159 + ]} 160 + /> 161 + </View> 162 + )} 145 163 </View> 146 164 147 165 <View style={styles.upNextMeta}> ··· 424 442 borderColor: "transparent", 425 443 }} 426 444 /> 445 + <Skeleton 446 + width={84} 447 + height={3} 448 + borderRadius={borderRadius.full} 449 + style={{ 450 + marginTop: 6, 451 + backgroundColor: colors.surfaceContainerHighest, 452 + borderColor: "transparent", 453 + }} 454 + /> 427 455 </View> 428 456 <View style={styles.upNextMeta}> 429 457 <View style={styles.metaTop}> ··· 635 663 posterFallbackText: { 636 664 fontSize: 10, 637 665 fontWeight: "600", 666 + }, 667 + progressTrack: { 668 + height: 3, 669 + borderRadius: borderRadius.full, 670 + overflow: "hidden", 671 + marginTop: 6, 672 + }, 673 + progressFill: { 674 + height: "100%", 675 + borderRadius: borderRadius.full, 638 676 }, 639 677 upNextMeta: { 640 678 flex: 1,
+2 -2
apps/web/src/components/MovieHero.tsx
··· 40 40 }} 41 41 /> 42 42 <div className="absolute bottom-0 left-0 right-0 p-4 md:p-8"> 43 - <div className="container mx-auto max-w-6xl"> 43 + <div className="container mx-auto max-w-7xl"> 44 44 <div className="flex items-end gap-4 md:gap-8"> 45 45 <div className="shrink-0"> 46 46 <div className="w-28 md:w-48 lg:w-64 rounded-lg overflow-hidden bg-(--md-sys-color-surface-container)" /> ··· 95 95 </button> 96 96 97 97 <div className="absolute bottom-0 left-0 right-0 p-4 md:p-8"> 98 - <div className="container mx-auto max-w-6xl"> 98 + <div className="container mx-auto max-w-7xl"> 99 99 <div className="flex items-end gap-4 md:gap-8"> 100 100 <div className="shrink-0"> 101 101 <div
+1 -1
apps/web/src/components/NotFoundPage.tsx
··· 28 28 }} 29 29 /> 30 30 31 - <div className="container relative mx-auto flex w-full max-w-6xl flex-1 px-4 py-12 md:py-20"> 31 + <div className="container relative mx-auto flex w-full max-w-7xl flex-1 px-4 py-12 md:py-20"> 32 32 <div className="grid w-full gap-6 lg:grid-cols-[1.1fr_0.9fr] lg:items-center"> 33 33 <div className="max-w-2xl"> 34 34 <div
+2 -2
apps/web/src/components/detail/DetailHero.tsx
··· 36 36 }} 37 37 /> 38 38 <div className="absolute bottom-0 left-0 right-0 p-4 md:p-8"> 39 - <div className="container mx-auto max-w-6xl"> 39 + <div className="container mx-auto max-w-7xl"> 40 40 <div className="flex items-end gap-4 md:gap-8"> 41 41 <div className="shrink-0"> 42 42 <div className="w-28 md:w-48 lg:w-64 rounded-lg overflow-hidden bg-(--md-sys-color-surface-container)" /> ··· 103 103 </button> 104 104 105 105 <div className="absolute bottom-0 left-0 right-0 p-4 md:p-8"> 106 - <div className="container mx-auto max-w-6xl"> 106 + <div className="container mx-auto max-w-7xl"> 107 107 <div className="flex items-end gap-4 md:gap-8"> 108 108 <div className="shrink-0"> 109 109 <div
+1 -1
apps/web/src/components/home/DashboardHomePage.tsx
··· 106 106 }, [lists]); 107 107 108 108 return ( 109 - <div className="container mx-auto max-w-6xl px-4 py-8 md:py-10"> 109 + <div className="container mx-auto max-w-7xl px-4 py-8 md:py-10"> 110 110 <div 111 111 className="mb-8 rounded-[28px] border p-5 md:p-6" 112 112 style={{
+6 -6
apps/web/src/components/home/LandingHomePage.tsx
··· 85 85 "radial-gradient(circle at top left, rgba(243, 188, 0, 0.18), transparent 35%), radial-gradient(circle at 85% 20%, rgba(176, 207, 186, 0.12), transparent 30%), linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(255, 255, 255, 0))", 86 86 }} 87 87 /> 88 - <div className="container relative mx-auto max-w-6xl px-4 py-16 md:py-24"> 88 + <div className="container relative mx-auto max-w-7xl px-4 py-16 md:py-24"> 89 89 <div className="max-w-5xl"> 90 90 <div className="mb-6 flex items-center gap-3"> 91 91 <img ··· 151 151 </section> 152 152 153 153 <section className="border-b border-[var(--md-sys-color-outline-variant)] bg-[color:rgba(255,255,255,0.02)]"> 154 - <div className="container mx-auto max-w-6xl px-4 py-10 md:py-14"> 154 + <div className="container mx-auto max-w-7xl px-4 py-10 md:py-14"> 155 155 <div className="mb-8 max-w-2xl"> 156 156 <p 157 157 className="md-label-large uppercase tracking-[0.12em]" ··· 189 189 </div> 190 190 </section> 191 191 192 - <section className="container mx-auto max-w-6xl px-4 py-16 md:py-20"> 192 + <section className="container mx-auto max-w-7xl px-4 py-16 md:py-20"> 193 193 <div className="mb-10 max-w-2xl"> 194 194 <p 195 195 className="md-label-large uppercase tracking-[0.12em]" ··· 252 252 </div> 253 253 </section> 254 254 255 - <section className="container mx-auto max-w-6xl px-4 pb-16"> 255 + <section className="container mx-auto max-w-7xl px-4 pb-16"> 256 256 <div 257 257 className="grid gap-6 overflow-hidden rounded-[32px] border px-6 py-8 md:px-10 md:py-10 lg:grid-cols-[1fr_auto] lg:items-center" 258 258 style={{ ··· 291 291 </div> 292 292 </section> 293 293 294 - <section className="container mx-auto max-w-6xl px-4 pb-16"> 294 + <section className="container mx-auto max-w-7xl px-4 pb-16"> 295 295 <div className="grid gap-6 lg:grid-cols-[0.8fr_1.2fr] lg:items-center"> 296 296 <div className="max-w-xl"> 297 297 <p ··· 335 335 </div> 336 336 </section> 337 337 338 - <section className="container mx-auto max-w-6xl px-4 pb-20"> 338 + <section className="container mx-auto max-w-7xl px-4 pb-20"> 339 339 <div 340 340 className="rounded-[32px] border px-6 py-10 text-center md:px-10" 341 341 style={{
+1 -1
apps/web/src/components/onboarding/onboarding-content.tsx
··· 165 165 166 166 return ( 167 167 <div className="flex flex-1 justify-center bg-(--md-sys-color-surface) p-4 md:p-6"> 168 - <div className="grid w-full max-w-6xl gap-4 lg:grid-cols-[280px_minmax(0,1fr)]"> 168 + <div className="grid w-full max-w-7xl gap-4 lg:grid-cols-[280px_minmax(0,1fr)]"> 169 169 <aside className="flex flex-col gap-5 rounded-(--md-sys-shape-corner-extra-large) border border-(--md-sys-color-outline-variant) bg-(--md-sys-color-surface-container-low) p-5"> 170 170 <p className="md-label-small m-0 uppercase tracking-[0.14em] text-(--md-sys-color-primary)"> 171 171 Onboarding
+4
apps/web/src/components/up-next/UpNextShowCollection.test.tsx
··· 43 43 { 44 44 showId: "show-1", 45 45 watchCount: 3, 46 + totalEpisodes: 10, 47 + episodesWatched: 3, 46 48 latestWatchedDate: "2026-03-20T12:00:00.000Z", 47 49 lastWatched: { 48 50 seasonNumber: 1, ··· 64 66 { 65 67 showId: "show-2", 66 68 watchCount: 7, 69 + totalEpisodes: 20, 70 + episodesWatched: 7, 67 71 latestWatchedDate: "2026-03-19T12:00:00.000Z", 68 72 lastWatched: { 69 73 seasonNumber: 2,
+17
apps/web/src/components/up-next/UpNextShowCollection.tsx
··· 185 185 </div> 186 186 )} 187 187 </div> 188 + {item.totalEpisodes > 0 ? ( 189 + <div 190 + className="mt-1.5 h-1 w-full overflow-hidden rounded-full" 191 + style={{ 192 + backgroundColor: 193 + "var(--md-sys-color-surface-container-highest)", 194 + }} 195 + > 196 + <div 197 + className="h-full rounded-full transition-all duration-300" 198 + style={{ 199 + width: `${Math.min(Math.round((item.episodesWatched / item.totalEpisodes) * 100), 100)}%`, 200 + backgroundColor: "var(--md-sys-color-primary)", 201 + }} 202 + /> 203 + </div> 204 + ) : null} 188 205 </div> 189 206 <div className="flex min-w-0 flex-1 flex-col justify-between"> 190 207 <div>
+1 -1
apps/web/src/routes/index.tsx
··· 22 22 const { data: user, isLoading: isUserLoading } = useCurrentUser(); 23 23 24 24 if (isUserLoading) { 25 - return <AuthLoadingState className="max-w-6xl py-16" />; 25 + return <AuthLoadingState className="max-w-7xl py-16" />; 26 26 } 27 27 28 28 if (!user) {
+1 -1
apps/web/src/routes/movies.$movieId.$title.tsx
··· 307 307 onBack={() => router.history.back()} 308 308 /> 309 309 310 - <div className="container mx-auto px-4 py-6 max-w-6xl"> 310 + <div className="container mx-auto px-4 py-6 max-w-7xl"> 311 311 <div className="grid grid-cols-1 md:grid-cols-[300px_1fr] gap-8 min-w-0"> 312 312 <div className="space-y-4 min-w-0"> 313 313 <DetailActions
+2 -2
apps/web/src/routes/profile.$handle.followers.tsx
··· 99 99 } 100 100 101 101 if (!profile || followersQuery.isLoading) { 102 - return <AuthLoadingState className="max-w-6xl py-8" />; 102 + return <AuthLoadingState className="max-w-7xl py-8" />; 103 103 } 104 104 105 105 if (isOwner) { 106 - return <AuthLoadingState className="max-w-6xl py-8" />; 106 + return <AuthLoadingState className="max-w-7xl py-8" />; 107 107 } 108 108 109 109 const currentPage = followersQuery.data?.page ?? page;
+2 -2
apps/web/src/routes/profile.$handle.following.tsx
··· 99 99 } 100 100 101 101 if (!profile || followingQuery.isLoading) { 102 - return <AuthLoadingState className="max-w-6xl py-8" />; 102 + return <AuthLoadingState className="max-w-7xl py-8" />; 103 103 } 104 104 105 105 if (isOwner) { 106 - return <AuthLoadingState className="max-w-6xl py-8" />; 106 + return <AuthLoadingState className="max-w-7xl py-8" />; 107 107 } 108 108 109 109 const currentPage = followingQuery.data?.page ?? page;
+2 -2
apps/web/src/routes/profile.$handle.people.tsx
··· 211 211 ]); 212 212 213 213 if (isAuthLoading || isLoading) { 214 - return <AuthLoadingState className="max-w-6xl py-8" />; 214 + return <AuthLoadingState className="max-w-7xl py-8" />; 215 215 } 216 216 217 217 if (!currentUser) { ··· 567 567 onPageChange: (page: number) => void; 568 568 }) { 569 569 if (isLoading) { 570 - return <AuthLoadingState className="max-w-6xl py-8" />; 570 + return <AuthLoadingState className="max-w-7xl py-8" />; 571 571 } 572 572 573 573 if (items.length === 0) {
+83 -15
apps/web/src/routes/profile.$handle.up-next.tsx
··· 5 5 } from "@opnshelf/api"; 6 6 import { useQuery } from "@tanstack/react-query"; 7 7 import { createFileRoute, redirect, useNavigate } from "@tanstack/react-router"; 8 + import { ArrowDownAZ, ArrowUpDown, Clock, TrendingUp } from "lucide-react"; 8 9 import { useEffect, useMemo } from "react"; 9 10 import { AuthLoadingState } from "@/components/AuthLoadingState"; 10 11 import { PaginationControls } from "@/components/PaginationControls"; 12 + import { 13 + Select, 14 + SelectContent, 15 + SelectItem, 16 + SelectTrigger, 17 + SelectValue, 18 + } from "@/components/ui/select"; 11 19 import { UpNextShowCollection } from "@/components/up-next/UpNextShowCollection"; 12 20 import { useProfileRouteState } from "@/hooks/useProfileRouteState"; 13 21 import { getVisiblePages, parsePageNumber } from "@/lib/pagination"; ··· 16 24 17 25 const PAGE_SIZE = 8; 18 26 27 + type SortBy = "lastWatched" | "title" | "progress"; 28 + type SortOrder = "asc" | "desc"; 29 + 30 + const SORT_OPTIONS: Array<{ 31 + value: `${SortBy}-${SortOrder}`; 32 + label: string; 33 + icon: typeof Clock; 34 + }> = [ 35 + { value: "lastWatched-desc", label: "Recently watched", icon: Clock }, 36 + { value: "lastWatched-asc", label: "Oldest watched", icon: Clock }, 37 + { value: "title-asc", label: "Title A-Z", icon: ArrowDownAZ }, 38 + { value: "title-desc", label: "Title Z-A", icon: ArrowDownAZ }, 39 + { value: "progress-desc", label: "Most progress", icon: TrendingUp }, 40 + { value: "progress-asc", label: "Least progress", icon: TrendingUp }, 41 + ]; 42 + 19 43 export const Route = createFileRoute("/profile/$handle/up-next")({ 20 44 beforeLoad: async ({ context, params }) => { 21 45 const handle = params.handle.trim().replace(/^@/, "").toLowerCase(); ··· 46 70 }, 47 71 validateSearch: (search: Record<string, unknown>) => ({ 48 72 page: parsePageNumber(search.page), 73 + sortBy: (["lastWatched", "title", "progress"].includes( 74 + search.sortBy as string, 75 + ) 76 + ? search.sortBy 77 + : "lastWatched") as SortBy, 78 + sortOrder: (["asc", "desc"].includes(search.sortOrder as string) 79 + ? search.sortOrder 80 + : "desc") as SortOrder, 49 81 }), 50 82 head: ({ params }) => ({ 51 83 meta: [{ title: `@${params.handle.replace(/^@/, "")} Up Next | OpnShelf` }], ··· 55 87 56 88 function ProfileUpNextPage() { 57 89 const { handle } = Route.useParams(); 58 - const { page } = Route.useSearch(); 90 + const { page, sortBy, sortOrder } = Route.useSearch(); 59 91 const navigate = useNavigate({ from: Route.fullPath }); 60 92 const { profile, isAuthLoading, isOwner, isProfileLoading } = 61 93 useProfileRouteState(handle); 62 94 const userDid = profile?.did ?? ""; 63 95 96 + const sortValue = `${sortBy}-${sortOrder}` as `${SortBy}-${SortOrder}`; 97 + 64 98 const upNextQuery = useQuery({ 65 99 ...showsControllerGetUserUpNextOptions({ 66 100 path: { userDid }, 67 - query: { page, pageSize: PAGE_SIZE }, 101 + query: { page, pageSize: PAGE_SIZE, sortBy, sortOrder }, 68 102 }), 69 103 enabled: !!userDid && isOwner, 70 104 }); ··· 83 117 84 118 if (upNextQuery.data.page !== page) { 85 119 navigate({ 86 - search: { page: upNextQuery.data.page }, 120 + search: { page: upNextQuery.data.page, sortBy, sortOrder }, 87 121 replace: true, 88 122 resetScroll: false, 89 123 }); 90 124 } 91 - }, [navigate, page, upNextQuery.data]); 125 + }, [navigate, page, sortBy, sortOrder, upNextQuery.data]); 92 126 93 127 if (isAuthLoading || isProfileLoading) { 94 - return <AuthLoadingState className="max-w-6xl py-8" />; 128 + return <AuthLoadingState className="max-w-7xl py-8" />; 95 129 } 96 130 97 131 if (!profile || !isOwner) { ··· 100 134 101 135 return ( 102 136 <div className="space-y-6"> 103 - <PaginationControls 104 - currentPage={currentPage} 105 - totalPages={totalPages} 106 - pageNumbers={pageNumbers} 107 - isFetching={upNextQuery.isFetching} 108 - onPageChange={(nextPage) => { 109 - navigate({ search: { page: nextPage } }); 110 - }} 111 - /> 137 + <div className="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"> 138 + <PaginationControls 139 + currentPage={currentPage} 140 + totalPages={totalPages} 141 + pageNumbers={pageNumbers} 142 + isFetching={upNextQuery.isFetching} 143 + onPageChange={(nextPage) => { 144 + navigate({ 145 + search: { page: nextPage, sortBy, sortOrder }, 146 + }); 147 + }} 148 + /> 149 + <Select 150 + value={sortValue} 151 + onValueChange={(value) => { 152 + const [newSortBy, newSortOrder] = value.split("-") as [ 153 + SortBy, 154 + SortOrder, 155 + ]; 156 + navigate({ 157 + search: { 158 + page: 1, 159 + sortBy: newSortBy, 160 + sortOrder: newSortOrder, 161 + }, 162 + }); 163 + }} 164 + > 165 + <SelectTrigger className="w-full bg-popover sm:w-56"> 166 + <ArrowUpDown className="mr-2 h-4 w-4 shrink-0 opacity-50" /> 167 + <SelectValue /> 168 + </SelectTrigger> 169 + <SelectContent> 170 + {SORT_OPTIONS.map((opt) => ( 171 + <SelectItem key={opt.value} value={opt.value}> 172 + {opt.label} 173 + </SelectItem> 174 + ))} 175 + </SelectContent> 176 + </Select> 177 + </div> 112 178 113 179 <UpNextShowCollection 114 180 isFetching={upNextQuery.isFetching} ··· 127 193 pageNumbers={pageNumbers} 128 194 isFetching={upNextQuery.isFetching} 129 195 onPageChange={(nextPage) => { 130 - navigate({ search: { page: nextPage } }); 196 + navigate({ 197 + search: { page: nextPage, sortBy, sortOrder }, 198 + }); 131 199 }} 132 200 /> 133 201 </div>
+1 -1
apps/web/src/routes/shows.$showId.$title.seasons.$seasonNumber.episodes.$episodeNumber.tsx
··· 396 396 onBack={() => router.history.back()} 397 397 /> 398 398 399 - <div className="container mx-auto px-4 py-6 max-w-6xl"> 399 + <div className="container mx-auto px-4 py-6 max-w-7xl"> 400 400 <div className="grid grid-cols-1 md:grid-cols-[300px_1fr] gap-8 min-w-0"> 401 401 <div className="space-y-4 min-w-0 max-w-[300px]"> 402 402 <DetailActions
+1 -1
apps/web/src/routes/shows.$showId.$title.seasons.$seasonNumber.tsx
··· 322 322 onBack={() => router.history.back()} 323 323 /> 324 324 325 - <div className="container mx-auto px-4 py-6 max-w-6xl"> 325 + <div className="container mx-auto px-4 py-6 max-w-7xl"> 326 326 <div className="grid grid-cols-1 md:grid-cols-[300px_1fr] gap-8 min-w-0"> 327 327 <div className="space-y-4 min-w-0"> 328 328 <DetailActions
+1 -1
apps/web/src/routes/shows.$showId.$title.tsx
··· 276 276 onBack={() => router.history.back()} 277 277 /> 278 278 279 - <div className="container mx-auto px-4 py-6 max-w-6xl"> 279 + <div className="container mx-auto px-4 py-6 max-w-7xl"> 280 280 <div className="grid grid-cols-1 md:grid-cols-[300px_1fr] gap-8 min-w-0"> 281 281 <div className="space-y-4 min-w-0"> 282 282 <DetailActions
+15 -1
apps/web/src/styles.css
··· 8 8 @custom-variant dark (&:is(.dark *)); 9 9 10 10 @theme { 11 - --color-border: var(--border); 12 11 --color-background: var(--background); 13 12 --color-foreground: var(--foreground); 13 + --color-card: var(--card); 14 + --color-card-foreground: var(--card-foreground); 15 + --color-popover: var(--popover); 16 + --color-popover-foreground: var(--popover-foreground); 14 17 --color-primary: var(--primary); 15 18 --color-primary-foreground: var(--primary-foreground); 19 + --color-secondary: var(--secondary); 20 + --color-secondary-foreground: var(--secondary-foreground); 21 + --color-muted: var(--muted); 22 + --color-muted-foreground: var(--muted-foreground); 23 + --color-accent: var(--accent); 24 + --color-accent-foreground: var(--accent-foreground); 25 + --color-destructive: var(--destructive); 26 + --color-destructive-foreground: var(--destructive-foreground); 27 + --color-border: var(--border); 28 + --color-input: var(--input); 29 + --color-ring: var(--ring); 16 30 } 17 31 18 32 /* ============================================
+63
backend/prisma/migrations/20260327101326_add_season_episode_tables/migration.sql
··· 1 + -- CreateTable 2 + CREATE TABLE "Season" ( 3 + "id" TEXT NOT NULL, 4 + "tmdbId" INTEGER NOT NULL, 5 + "showId" TEXT NOT NULL, 6 + "seasonNumber" INTEGER NOT NULL, 7 + "name" TEXT NOT NULL, 8 + "posterPath" TEXT, 9 + "airDate" TIMESTAMP(3), 10 + "episodeCount" INTEGER, 11 + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 12 + "updatedAt" TIMESTAMP(3) NOT NULL, 13 + 14 + CONSTRAINT "Season_pkey" PRIMARY KEY ("id") 15 + ); 16 + 17 + -- CreateTable 18 + CREATE TABLE "Episode" ( 19 + "id" TEXT NOT NULL, 20 + "tmdbId" INTEGER NOT NULL, 21 + "seasonId" TEXT NOT NULL, 22 + "showId" TEXT NOT NULL, 23 + "episodeNumber" INTEGER NOT NULL, 24 + "seasonNumber" INTEGER NOT NULL, 25 + "name" TEXT NOT NULL, 26 + "airDate" TIMESTAMP(3), 27 + "overview" TEXT, 28 + "stillPath" TEXT, 29 + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 30 + "updatedAt" TIMESTAMP(3) NOT NULL, 31 + 32 + CONSTRAINT "Episode_pkey" PRIMARY KEY ("id") 33 + ); 34 + 35 + -- CreateIndex 36 + CREATE UNIQUE INDEX "Season_tmdbId_key" ON "Season"("tmdbId"); 37 + 38 + -- CreateIndex 39 + CREATE INDEX "Season_showId_idx" ON "Season"("showId"); 40 + 41 + -- CreateIndex 42 + CREATE UNIQUE INDEX "Season_showId_seasonNumber_key" ON "Season"("showId", "seasonNumber"); 43 + 44 + -- CreateIndex 45 + CREATE UNIQUE INDEX "Episode_tmdbId_key" ON "Episode"("tmdbId"); 46 + 47 + -- CreateIndex 48 + CREATE INDEX "Episode_seasonId_idx" ON "Episode"("seasonId"); 49 + 50 + -- CreateIndex 51 + CREATE INDEX "Episode_showId_idx" ON "Episode"("showId"); 52 + 53 + -- CreateIndex 54 + CREATE INDEX "Episode_airDate_idx" ON "Episode"("airDate"); 55 + 56 + -- CreateIndex 57 + CREATE UNIQUE INDEX "Episode_showId_seasonNumber_episodeNumber_key" ON "Episode"("showId", "seasonNumber", "episodeNumber"); 58 + 59 + -- AddForeignKey 60 + ALTER TABLE "Season" ADD CONSTRAINT "Season_showId_fkey" FOREIGN KEY ("showId") REFERENCES "Show"("showId") ON DELETE CASCADE ON UPDATE CASCADE; 61 + 62 + -- AddForeignKey 63 + ALTER TABLE "Episode" ADD CONSTRAINT "Episode_seasonId_fkey" FOREIGN KEY ("seasonId") REFERENCES "Season"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+43
backend/prisma/schema.prisma
··· 152 152 153 153 trackedBy TrackedEpisode[] 154 154 listItems ListItem[] 155 + seasons Season[] 155 156 156 157 @@index([title]) 158 + } 159 + 160 + model Season { 161 + id String @id @default(cuid()) 162 + tmdbId Int @unique 163 + showId String 164 + show Show @relation(fields: [showId], references: [showId], onDelete: Cascade) 165 + seasonNumber Int 166 + name String 167 + posterPath String? 168 + airDate DateTime? 169 + episodeCount Int? 170 + 171 + episodes Episode[] 172 + 173 + createdAt DateTime @default(now()) 174 + updatedAt DateTime @updatedAt 175 + 176 + @@unique([showId, seasonNumber]) 177 + @@index([showId]) 178 + } 179 + 180 + model Episode { 181 + id String @id @default(cuid()) 182 + tmdbId Int @unique 183 + seasonId String 184 + season Season @relation(fields: [seasonId], references: [id], onDelete: Cascade) 185 + showId String 186 + episodeNumber Int 187 + seasonNumber Int 188 + name String 189 + airDate DateTime? 190 + overview String? 191 + stillPath String? 192 + 193 + createdAt DateTime @default(now()) 194 + updatedAt DateTime @updatedAt 195 + 196 + @@unique([showId, seasonNumber, episodeNumber]) 197 + @@index([seasonId]) 198 + @@index([showId]) 199 + @@index([airDate]) 157 200 } 158 201 159 202 model TrackedMovie {
+10
backend/src/generated/browser.ts
··· 53 53 */ 54 54 export type Show = Prisma.ShowModel 55 55 /** 56 + * Model Season 57 + * 58 + */ 59 + export type Season = Prisma.SeasonModel 60 + /** 61 + * Model Episode 62 + * 63 + */ 64 + export type Episode = Prisma.EpisodeModel 65 + /** 56 66 * Model TrackedMovie 57 67 * 58 68 */
+10
backend/src/generated/client.ts
··· 73 73 */ 74 74 export type Show = Prisma.ShowModel 75 75 /** 76 + * Model Season 77 + * 78 + */ 79 + export type Season = Prisma.SeasonModel 80 + /** 81 + * Model Episode 82 + * 83 + */ 84 + export type Episode = Prisma.EpisodeModel 85 + /** 76 86 * Model TrackedMovie 77 87 * 78 88 */
+22 -2
backend/src/generated/internal/class.ts
··· 20 20 "clientVersion": "7.3.0", 21 21 "engineVersion": "9d6ad21cbbceab97458517b147a6a09ff43aa735", 22 22 "activeProvider": "postgresql", 23 - "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../src/generated\"\n moduleFormat = \"cjs\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n did String @id\n handle String @unique\n displayName String?\n avatar String?\n profileRkey String?\n profileUri String?\n profileCid String?\n profileDisplayName String?\n profileAvatarCid String?\n profileAvatarMimeType String?\n profileUpdatedAt DateTime?\n timezone String @default(\"UTC\")\n timeFormat String @default(\"24h\")\n onboardingCompletedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n trackedMovies TrackedMovie[]\n trackedEpisodes TrackedEpisode[]\n traktImportJobs TraktImportJob[]\n lists List[]\n following Follow[] @relation(\"UserFollowing\")\n followers Follow[] @relation(\"UserFollowers\")\n\n @@index([handle])\n @@index([profileAvatarCid])\n}\n\nmodel Follow {\n followerDid String\n followingDid String\n rkey String?\n uri String?\n cid String?\n createdAt DateTime @default(now())\n\n follower User @relation(\"UserFollowing\", fields: [followerDid], references: [did], onDelete: Cascade)\n following User @relation(\"UserFollowers\", fields: [followingDid], references: [did], onDelete: Cascade)\n\n @@id([followerDid, followingDid])\n @@index([followerDid, createdAt])\n @@index([followingDid, createdAt])\n @@index([followerDid, rkey])\n}\n\nenum MediaType {\n movie\n show\n}\n\nenum TraktImportJobStatus {\n queued\n running\n waiting_retry\n completed\n failed\n}\n\n// OAuth session storage for @atproto/oauth-client-node sessionStore\n// No FK to User because the OAuth library stores session before we create the User\n// Cookie stores opaque id (not DID) for session lookup\nmodel AuthSession {\n id String @id @default(cuid())\n userDid String @unique\n sessionData String // JSON-serialized session from the library\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([updatedAt])\n}\n\nmodel AuthState {\n key String @id\n stateData String\n expiresAt DateTime\n createdAt DateTime @default(now())\n\n @@index([expiresAt])\n}\n\nmodel TraktImportJob {\n id String @id @default(cuid())\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n traktUsername String\n status TraktImportJobStatus @default(queued)\n currentPage Int @default(1)\n totalPages Int?\n sourceCount Int @default(0)\n normalizedCount Int @default(0)\n importedCount Int @default(0)\n skippedCount Int @default(0)\n failedCount Int @default(0)\n nextRunAt DateTime @default(now())\n lastError String?\n profileUsername String?\n profileSlug String?\n profileName String?\n profileAvatarUrl String?\n startedAt DateTime?\n completedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userDid, status])\n @@index([status, nextRunAt])\n @@index([userDid, createdAt])\n}\n\nmodel Movie {\n movieId String @id\n title String\n posterPath String?\n backdropPath String?\n releaseYear Int?\n releaseDate DateTime?\n overview String?\n colors Json? // { primary, secondary, accent, muted }\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n trackedBy TrackedMovie[]\n listItems ListItem[]\n\n @@index([title])\n}\n\nmodel Show {\n showId String @id\n title String\n posterPath String?\n backdropPath String?\n firstAirYear Int?\n firstAirDate DateTime?\n overview String?\n colors Json?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n trackedBy TrackedEpisode[]\n listItems ListItem[]\n\n @@index([title])\n}\n\nmodel TrackedMovie {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String\n\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n\n movieId String\n movie Movie @relation(fields: [movieId], references: [movieId], onDelete: Cascade)\n\n status String @default(\"watched\")\n watchedDate DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userDid])\n @@index([movieId])\n @@index([status])\n @@index([createdAt])\n @@index([watchedDate])\n @@index([uri])\n @@index([cid])\n}\n\nmodel TrackedEpisode {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String\n\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n\n showId String\n show Show @relation(fields: [showId], references: [showId], onDelete: Cascade)\n\n seasonNumber Int\n episodeNumber Int\n status String @default(\"watched\")\n watchedDate DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userDid])\n @@index([showId])\n @@index([seasonNumber])\n @@index([episodeNumber])\n @@index([status])\n @@index([createdAt])\n @@index([watchedDate])\n @@index([uri])\n @@index([cid])\n}\n\nmodel List {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String?\n\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n\n name String\n description String?\n slug String\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n items ListItem[]\n\n @@unique([userDid, slug])\n @@index([userDid])\n @@index([isDefault])\n}\n\nmodel ListItem {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String?\n\n listId String\n list List @relation(fields: [listId], references: [id], onDelete: Cascade)\n\n mediaType MediaType\n mediaId String\n movieId String?\n movie Movie? @relation(fields: [movieId], references: [movieId], onDelete: Cascade)\n showId String?\n show Show? @relation(fields: [showId], references: [showId], onDelete: Cascade)\n\n notes String?\n position Int @default(0)\n\n createdAt DateTime @default(now())\n\n @@unique([listId, mediaType, mediaId])\n @@index([listId])\n @@index([mediaType, mediaId])\n}\n", 23 + "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../src/generated\"\n moduleFormat = \"cjs\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n did String @id\n handle String @unique\n displayName String?\n avatar String?\n profileRkey String?\n profileUri String?\n profileCid String?\n profileDisplayName String?\n profileAvatarCid String?\n profileAvatarMimeType String?\n profileUpdatedAt DateTime?\n timezone String @default(\"UTC\")\n timeFormat String @default(\"24h\")\n onboardingCompletedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n trackedMovies TrackedMovie[]\n trackedEpisodes TrackedEpisode[]\n traktImportJobs TraktImportJob[]\n lists List[]\n following Follow[] @relation(\"UserFollowing\")\n followers Follow[] @relation(\"UserFollowers\")\n\n @@index([handle])\n @@index([profileAvatarCid])\n}\n\nmodel Follow {\n followerDid String\n followingDid String\n rkey String?\n uri String?\n cid String?\n createdAt DateTime @default(now())\n\n follower User @relation(\"UserFollowing\", fields: [followerDid], references: [did], onDelete: Cascade)\n following User @relation(\"UserFollowers\", fields: [followingDid], references: [did], onDelete: Cascade)\n\n @@id([followerDid, followingDid])\n @@index([followerDid, createdAt])\n @@index([followingDid, createdAt])\n @@index([followerDid, rkey])\n}\n\nenum MediaType {\n movie\n show\n}\n\nenum TraktImportJobStatus {\n queued\n running\n waiting_retry\n completed\n failed\n}\n\n// OAuth session storage for @atproto/oauth-client-node sessionStore\n// No FK to User because the OAuth library stores session before we create the User\n// Cookie stores opaque id (not DID) for session lookup\nmodel AuthSession {\n id String @id @default(cuid())\n userDid String @unique\n sessionData String // JSON-serialized session from the library\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([updatedAt])\n}\n\nmodel AuthState {\n key String @id\n stateData String\n expiresAt DateTime\n createdAt DateTime @default(now())\n\n @@index([expiresAt])\n}\n\nmodel TraktImportJob {\n id String @id @default(cuid())\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n traktUsername String\n status TraktImportJobStatus @default(queued)\n currentPage Int @default(1)\n totalPages Int?\n sourceCount Int @default(0)\n normalizedCount Int @default(0)\n importedCount Int @default(0)\n skippedCount Int @default(0)\n failedCount Int @default(0)\n nextRunAt DateTime @default(now())\n lastError String?\n profileUsername String?\n profileSlug String?\n profileName String?\n profileAvatarUrl String?\n startedAt DateTime?\n completedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userDid, status])\n @@index([status, nextRunAt])\n @@index([userDid, createdAt])\n}\n\nmodel Movie {\n movieId String @id\n title String\n posterPath String?\n backdropPath String?\n releaseYear Int?\n releaseDate DateTime?\n overview String?\n colors Json? // { primary, secondary, accent, muted }\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n trackedBy TrackedMovie[]\n listItems ListItem[]\n\n @@index([title])\n}\n\nmodel Show {\n showId String @id\n title String\n posterPath String?\n backdropPath String?\n firstAirYear Int?\n firstAirDate DateTime?\n overview String?\n colors Json?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n trackedBy TrackedEpisode[]\n listItems ListItem[]\n seasons Season[]\n\n @@index([title])\n}\n\nmodel Season {\n id String @id @default(cuid())\n tmdbId Int @unique\n showId String\n show Show @relation(fields: [showId], references: [showId], onDelete: Cascade)\n seasonNumber Int\n name String\n posterPath String?\n airDate DateTime?\n episodeCount Int?\n\n episodes Episode[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([showId, seasonNumber])\n @@index([showId])\n}\n\nmodel Episode {\n id String @id @default(cuid())\n tmdbId Int @unique\n seasonId String\n season Season @relation(fields: [seasonId], references: [id], onDelete: Cascade)\n showId String\n episodeNumber Int\n seasonNumber Int\n name String\n airDate DateTime?\n overview String?\n stillPath String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([showId, seasonNumber, episodeNumber])\n @@index([seasonId])\n @@index([showId])\n @@index([airDate])\n}\n\nmodel TrackedMovie {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String\n\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n\n movieId String\n movie Movie @relation(fields: [movieId], references: [movieId], onDelete: Cascade)\n\n status String @default(\"watched\")\n watchedDate DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userDid])\n @@index([movieId])\n @@index([status])\n @@index([createdAt])\n @@index([watchedDate])\n @@index([uri])\n @@index([cid])\n}\n\nmodel TrackedEpisode {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String\n\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n\n showId String\n show Show @relation(fields: [showId], references: [showId], onDelete: Cascade)\n\n seasonNumber Int\n episodeNumber Int\n status String @default(\"watched\")\n watchedDate DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userDid])\n @@index([showId])\n @@index([seasonNumber])\n @@index([episodeNumber])\n @@index([status])\n @@index([createdAt])\n @@index([watchedDate])\n @@index([uri])\n @@index([cid])\n}\n\nmodel List {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String?\n\n userDid String\n user User @relation(fields: [userDid], references: [did], onDelete: Cascade)\n\n name String\n description String?\n slug String\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n items ListItem[]\n\n @@unique([userDid, slug])\n @@index([userDid])\n @@index([isDefault])\n}\n\nmodel ListItem {\n id String @id @default(cuid())\n rkey String @unique\n uri String\n cid String?\n\n listId String\n list List @relation(fields: [listId], references: [id], onDelete: Cascade)\n\n mediaType MediaType\n mediaId String\n movieId String?\n movie Movie? @relation(fields: [movieId], references: [movieId], onDelete: Cascade)\n showId String?\n show Show? @relation(fields: [showId], references: [showId], onDelete: Cascade)\n\n notes String?\n position Int @default(0)\n\n createdAt DateTime @default(now())\n\n @@unique([listId, mediaType, mediaId])\n @@index([listId])\n @@index([mediaType, mediaId])\n}\n", 24 24 "runtimeDataModel": { 25 25 "models": {}, 26 26 "enums": {}, ··· 28 28 } 29 29 } 30 30 31 - config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"did\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"handle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileRkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileUri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileCid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileDisplayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileAvatarCid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileAvatarMimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileUpdatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"timezone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timeFormat\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"onboardingCompletedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trackedMovies\",\"kind\":\"object\",\"type\":\"TrackedMovie\",\"relationName\":\"TrackedMovieToUser\"},{\"name\":\"trackedEpisodes\",\"kind\":\"object\",\"type\":\"TrackedEpisode\",\"relationName\":\"TrackedEpisodeToUser\"},{\"name\":\"traktImportJobs\",\"kind\":\"object\",\"type\":\"TraktImportJob\",\"relationName\":\"TraktImportJobToUser\"},{\"name\":\"lists\",\"kind\":\"object\",\"type\":\"List\",\"relationName\":\"ListToUser\"},{\"name\":\"following\",\"kind\":\"object\",\"type\":\"Follow\",\"relationName\":\"UserFollowing\"},{\"name\":\"followers\",\"kind\":\"object\",\"type\":\"Follow\",\"relationName\":\"UserFollowers\"}],\"dbName\":null},\"Follow\":{\"fields\":[{\"name\":\"followerDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"followingDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"follower\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserFollowing\"},{\"name\":\"following\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserFollowers\"}],\"dbName\":null},\"AuthSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionData\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"AuthState\":{\"fields\":[{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stateData\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TraktImportJob\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TraktImportJobToUser\"},{\"name\":\"traktUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TraktImportJobStatus\"},{\"name\":\"currentPage\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalPages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sourceCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"normalizedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"importedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"skippedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"failedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"nextRunAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lastError\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileSlug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileAvatarUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Movie\":{\"fields\":[{\"name\":\"movieId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"posterPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"backdropPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"releaseYear\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"releaseDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"overview\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"colors\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trackedBy\",\"kind\":\"object\",\"type\":\"TrackedMovie\",\"relationName\":\"MovieToTrackedMovie\"},{\"name\":\"listItems\",\"kind\":\"object\",\"type\":\"ListItem\",\"relationName\":\"ListItemToMovie\"}],\"dbName\":null},\"Show\":{\"fields\":[{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"posterPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"backdropPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstAirYear\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"firstAirDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"overview\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"colors\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trackedBy\",\"kind\":\"object\",\"type\":\"TrackedEpisode\",\"relationName\":\"ShowToTrackedEpisode\"},{\"name\":\"listItems\",\"kind\":\"object\",\"type\":\"ListItem\",\"relationName\":\"ListItemToShow\"}],\"dbName\":null},\"TrackedMovie\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TrackedMovieToUser\"},{\"name\":\"movieId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"movie\",\"kind\":\"object\",\"type\":\"Movie\",\"relationName\":\"MovieToTrackedMovie\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"watchedDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TrackedEpisode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TrackedEpisodeToUser\"},{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"show\",\"kind\":\"object\",\"type\":\"Show\",\"relationName\":\"ShowToTrackedEpisode\"},{\"name\":\"seasonNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"episodeNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"watchedDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"List\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ListToUser\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"ListItem\",\"relationName\":\"ListToListItem\"}],\"dbName\":null},\"ListItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"listId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"list\",\"kind\":\"object\",\"type\":\"List\",\"relationName\":\"ListToListItem\"},{\"name\":\"mediaType\",\"kind\":\"enum\",\"type\":\"MediaType\"},{\"name\":\"mediaId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"movieId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"movie\",\"kind\":\"object\",\"type\":\"Movie\",\"relationName\":\"ListItemToMovie\"},{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"show\",\"kind\":\"object\",\"type\":\"Show\",\"relationName\":\"ListItemToShow\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") 31 + config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"did\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"handle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileRkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileUri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileCid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileDisplayName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileAvatarCid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileAvatarMimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileUpdatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"timezone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timeFormat\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"onboardingCompletedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trackedMovies\",\"kind\":\"object\",\"type\":\"TrackedMovie\",\"relationName\":\"TrackedMovieToUser\"},{\"name\":\"trackedEpisodes\",\"kind\":\"object\",\"type\":\"TrackedEpisode\",\"relationName\":\"TrackedEpisodeToUser\"},{\"name\":\"traktImportJobs\",\"kind\":\"object\",\"type\":\"TraktImportJob\",\"relationName\":\"TraktImportJobToUser\"},{\"name\":\"lists\",\"kind\":\"object\",\"type\":\"List\",\"relationName\":\"ListToUser\"},{\"name\":\"following\",\"kind\":\"object\",\"type\":\"Follow\",\"relationName\":\"UserFollowing\"},{\"name\":\"followers\",\"kind\":\"object\",\"type\":\"Follow\",\"relationName\":\"UserFollowers\"}],\"dbName\":null},\"Follow\":{\"fields\":[{\"name\":\"followerDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"followingDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"follower\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserFollowing\"},{\"name\":\"following\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserFollowers\"}],\"dbName\":null},\"AuthSession\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sessionData\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"AuthState\":{\"fields\":[{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stateData\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TraktImportJob\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TraktImportJobToUser\"},{\"name\":\"traktUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"TraktImportJobStatus\"},{\"name\":\"currentPage\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"totalPages\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"sourceCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"normalizedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"importedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"skippedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"failedCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"nextRunAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lastError\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileUsername\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileSlug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profileAvatarUrl\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Movie\":{\"fields\":[{\"name\":\"movieId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"posterPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"backdropPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"releaseYear\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"releaseDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"overview\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"colors\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trackedBy\",\"kind\":\"object\",\"type\":\"TrackedMovie\",\"relationName\":\"MovieToTrackedMovie\"},{\"name\":\"listItems\",\"kind\":\"object\",\"type\":\"ListItem\",\"relationName\":\"ListItemToMovie\"}],\"dbName\":null},\"Show\":{\"fields\":[{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"posterPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"backdropPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstAirYear\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"firstAirDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"overview\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"colors\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"trackedBy\",\"kind\":\"object\",\"type\":\"TrackedEpisode\",\"relationName\":\"ShowToTrackedEpisode\"},{\"name\":\"listItems\",\"kind\":\"object\",\"type\":\"ListItem\",\"relationName\":\"ListItemToShow\"},{\"name\":\"seasons\",\"kind\":\"object\",\"type\":\"Season\",\"relationName\":\"SeasonToShow\"}],\"dbName\":null},\"Season\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tmdbId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"show\",\"kind\":\"object\",\"type\":\"Show\",\"relationName\":\"SeasonToShow\"},{\"name\":\"seasonNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"posterPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"airDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"episodeCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"episodes\",\"kind\":\"object\",\"type\":\"Episode\",\"relationName\":\"EpisodeToSeason\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Episode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tmdbId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"seasonId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"season\",\"kind\":\"object\",\"type\":\"Season\",\"relationName\":\"EpisodeToSeason\"},{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"episodeNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"seasonNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"airDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"overview\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stillPath\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TrackedMovie\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TrackedMovieToUser\"},{\"name\":\"movieId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"movie\",\"kind\":\"object\",\"type\":\"Movie\",\"relationName\":\"MovieToTrackedMovie\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"watchedDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"TrackedEpisode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TrackedEpisodeToUser\"},{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"show\",\"kind\":\"object\",\"type\":\"Show\",\"relationName\":\"ShowToTrackedEpisode\"},{\"name\":\"seasonNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"episodeNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"watchedDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"List\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userDid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ListToUser\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"items\",\"kind\":\"object\",\"type\":\"ListItem\",\"relationName\":\"ListToListItem\"}],\"dbName\":null},\"ListItem\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rkey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"uri\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"listId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"list\",\"kind\":\"object\",\"type\":\"List\",\"relationName\":\"ListToListItem\"},{\"name\":\"mediaType\",\"kind\":\"enum\",\"type\":\"MediaType\"},{\"name\":\"mediaId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"movieId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"movie\",\"kind\":\"object\",\"type\":\"Movie\",\"relationName\":\"ListItemToMovie\"},{\"name\":\"showId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"show\",\"kind\":\"object\",\"type\":\"Show\",\"relationName\":\"ListItemToShow\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"position\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") 32 32 33 33 async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> { 34 34 const { Buffer } = await import('node:buffer') ··· 245 245 * ``` 246 246 */ 247 247 get show(): Prisma.ShowDelegate<ExtArgs, { omit: OmitOpts }>; 248 + 249 + /** 250 + * `prisma.season`: Exposes CRUD operations for the **Season** model. 251 + * Example usage: 252 + * ```ts 253 + * // Fetch zero or more Seasons 254 + * const seasons = await prisma.season.findMany() 255 + * ``` 256 + */ 257 + get season(): Prisma.SeasonDelegate<ExtArgs, { omit: OmitOpts }>; 258 + 259 + /** 260 + * `prisma.episode`: Exposes CRUD operations for the **Episode** model. 261 + * Example usage: 262 + * ```ts 263 + * // Fetch zero or more Episodes 264 + * const episodes = await prisma.episode.findMany() 265 + * ``` 266 + */ 267 + get episode(): Prisma.EpisodeDelegate<ExtArgs, { omit: OmitOpts }>; 248 268 249 269 /** 250 270 * `prisma.trackedMovie`: Exposes CRUD operations for the **TrackedMovie** model.
+187 -1
backend/src/generated/internal/prismaNamespace.ts
··· 391 391 TraktImportJob: 'TraktImportJob', 392 392 Movie: 'Movie', 393 393 Show: 'Show', 394 + Season: 'Season', 395 + Episode: 'Episode', 394 396 TrackedMovie: 'TrackedMovie', 395 397 TrackedEpisode: 'TrackedEpisode', 396 398 List: 'List', ··· 410 412 omit: GlobalOmitOptions 411 413 } 412 414 meta: { 413 - modelProps: "user" | "follow" | "authSession" | "authState" | "traktImportJob" | "movie" | "show" | "trackedMovie" | "trackedEpisode" | "list" | "listItem" 415 + modelProps: "user" | "follow" | "authSession" | "authState" | "traktImportJob" | "movie" | "show" | "season" | "episode" | "trackedMovie" | "trackedEpisode" | "list" | "listItem" 414 416 txIsolationLevel: TransactionIsolationLevel 415 417 } 416 418 model: { ··· 932 934 } 933 935 } 934 936 } 937 + Season: { 938 + payload: Prisma.$SeasonPayload<ExtArgs> 939 + fields: Prisma.SeasonFieldRefs 940 + operations: { 941 + findUnique: { 942 + args: Prisma.SeasonFindUniqueArgs<ExtArgs> 943 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> | null 944 + } 945 + findUniqueOrThrow: { 946 + args: Prisma.SeasonFindUniqueOrThrowArgs<ExtArgs> 947 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> 948 + } 949 + findFirst: { 950 + args: Prisma.SeasonFindFirstArgs<ExtArgs> 951 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> | null 952 + } 953 + findFirstOrThrow: { 954 + args: Prisma.SeasonFindFirstOrThrowArgs<ExtArgs> 955 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> 956 + } 957 + findMany: { 958 + args: Prisma.SeasonFindManyArgs<ExtArgs> 959 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload>[] 960 + } 961 + create: { 962 + args: Prisma.SeasonCreateArgs<ExtArgs> 963 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> 964 + } 965 + createMany: { 966 + args: Prisma.SeasonCreateManyArgs<ExtArgs> 967 + result: BatchPayload 968 + } 969 + createManyAndReturn: { 970 + args: Prisma.SeasonCreateManyAndReturnArgs<ExtArgs> 971 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload>[] 972 + } 973 + delete: { 974 + args: Prisma.SeasonDeleteArgs<ExtArgs> 975 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> 976 + } 977 + update: { 978 + args: Prisma.SeasonUpdateArgs<ExtArgs> 979 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> 980 + } 981 + deleteMany: { 982 + args: Prisma.SeasonDeleteManyArgs<ExtArgs> 983 + result: BatchPayload 984 + } 985 + updateMany: { 986 + args: Prisma.SeasonUpdateManyArgs<ExtArgs> 987 + result: BatchPayload 988 + } 989 + updateManyAndReturn: { 990 + args: Prisma.SeasonUpdateManyAndReturnArgs<ExtArgs> 991 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload>[] 992 + } 993 + upsert: { 994 + args: Prisma.SeasonUpsertArgs<ExtArgs> 995 + result: runtime.Types.Utils.PayloadToResult<Prisma.$SeasonPayload> 996 + } 997 + aggregate: { 998 + args: Prisma.SeasonAggregateArgs<ExtArgs> 999 + result: runtime.Types.Utils.Optional<Prisma.AggregateSeason> 1000 + } 1001 + groupBy: { 1002 + args: Prisma.SeasonGroupByArgs<ExtArgs> 1003 + result: runtime.Types.Utils.Optional<Prisma.SeasonGroupByOutputType>[] 1004 + } 1005 + count: { 1006 + args: Prisma.SeasonCountArgs<ExtArgs> 1007 + result: runtime.Types.Utils.Optional<Prisma.SeasonCountAggregateOutputType> | number 1008 + } 1009 + } 1010 + } 1011 + Episode: { 1012 + payload: Prisma.$EpisodePayload<ExtArgs> 1013 + fields: Prisma.EpisodeFieldRefs 1014 + operations: { 1015 + findUnique: { 1016 + args: Prisma.EpisodeFindUniqueArgs<ExtArgs> 1017 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> | null 1018 + } 1019 + findUniqueOrThrow: { 1020 + args: Prisma.EpisodeFindUniqueOrThrowArgs<ExtArgs> 1021 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> 1022 + } 1023 + findFirst: { 1024 + args: Prisma.EpisodeFindFirstArgs<ExtArgs> 1025 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> | null 1026 + } 1027 + findFirstOrThrow: { 1028 + args: Prisma.EpisodeFindFirstOrThrowArgs<ExtArgs> 1029 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> 1030 + } 1031 + findMany: { 1032 + args: Prisma.EpisodeFindManyArgs<ExtArgs> 1033 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload>[] 1034 + } 1035 + create: { 1036 + args: Prisma.EpisodeCreateArgs<ExtArgs> 1037 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> 1038 + } 1039 + createMany: { 1040 + args: Prisma.EpisodeCreateManyArgs<ExtArgs> 1041 + result: BatchPayload 1042 + } 1043 + createManyAndReturn: { 1044 + args: Prisma.EpisodeCreateManyAndReturnArgs<ExtArgs> 1045 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload>[] 1046 + } 1047 + delete: { 1048 + args: Prisma.EpisodeDeleteArgs<ExtArgs> 1049 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> 1050 + } 1051 + update: { 1052 + args: Prisma.EpisodeUpdateArgs<ExtArgs> 1053 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> 1054 + } 1055 + deleteMany: { 1056 + args: Prisma.EpisodeDeleteManyArgs<ExtArgs> 1057 + result: BatchPayload 1058 + } 1059 + updateMany: { 1060 + args: Prisma.EpisodeUpdateManyArgs<ExtArgs> 1061 + result: BatchPayload 1062 + } 1063 + updateManyAndReturn: { 1064 + args: Prisma.EpisodeUpdateManyAndReturnArgs<ExtArgs> 1065 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload>[] 1066 + } 1067 + upsert: { 1068 + args: Prisma.EpisodeUpsertArgs<ExtArgs> 1069 + result: runtime.Types.Utils.PayloadToResult<Prisma.$EpisodePayload> 1070 + } 1071 + aggregate: { 1072 + args: Prisma.EpisodeAggregateArgs<ExtArgs> 1073 + result: runtime.Types.Utils.Optional<Prisma.AggregateEpisode> 1074 + } 1075 + groupBy: { 1076 + args: Prisma.EpisodeGroupByArgs<ExtArgs> 1077 + result: runtime.Types.Utils.Optional<Prisma.EpisodeGroupByOutputType>[] 1078 + } 1079 + count: { 1080 + args: Prisma.EpisodeCountArgs<ExtArgs> 1081 + result: runtime.Types.Utils.Optional<Prisma.EpisodeCountAggregateOutputType> | number 1082 + } 1083 + } 1084 + } 935 1085 TrackedMovie: { 936 1086 payload: Prisma.$TrackedMoviePayload<ExtArgs> 937 1087 fields: Prisma.TrackedMovieFieldRefs ··· 1381 1531 export type ShowScalarFieldEnum = (typeof ShowScalarFieldEnum)[keyof typeof ShowScalarFieldEnum] 1382 1532 1383 1533 1534 + export const SeasonScalarFieldEnum = { 1535 + id: 'id', 1536 + tmdbId: 'tmdbId', 1537 + showId: 'showId', 1538 + seasonNumber: 'seasonNumber', 1539 + name: 'name', 1540 + posterPath: 'posterPath', 1541 + airDate: 'airDate', 1542 + episodeCount: 'episodeCount', 1543 + createdAt: 'createdAt', 1544 + updatedAt: 'updatedAt' 1545 + } as const 1546 + 1547 + export type SeasonScalarFieldEnum = (typeof SeasonScalarFieldEnum)[keyof typeof SeasonScalarFieldEnum] 1548 + 1549 + 1550 + export const EpisodeScalarFieldEnum = { 1551 + id: 'id', 1552 + tmdbId: 'tmdbId', 1553 + seasonId: 'seasonId', 1554 + showId: 'showId', 1555 + episodeNumber: 'episodeNumber', 1556 + seasonNumber: 'seasonNumber', 1557 + name: 'name', 1558 + airDate: 'airDate', 1559 + overview: 'overview', 1560 + stillPath: 'stillPath', 1561 + createdAt: 'createdAt', 1562 + updatedAt: 'updatedAt' 1563 + } as const 1564 + 1565 + export type EpisodeScalarFieldEnum = (typeof EpisodeScalarFieldEnum)[keyof typeof EpisodeScalarFieldEnum] 1566 + 1567 + 1384 1568 export const TrackedMovieScalarFieldEnum = { 1385 1569 id: 'id', 1386 1570 rkey: 'rkey', ··· 1703 1887 traktImportJob?: Prisma.TraktImportJobOmit 1704 1888 movie?: Prisma.MovieOmit 1705 1889 show?: Prisma.ShowOmit 1890 + season?: Prisma.SeasonOmit 1891 + episode?: Prisma.EpisodeOmit 1706 1892 trackedMovie?: Prisma.TrackedMovieOmit 1707 1893 trackedEpisode?: Prisma.TrackedEpisodeOmit 1708 1894 list?: Prisma.ListOmit
+36
backend/src/generated/internal/prismaNamespaceBrowser.ts
··· 58 58 TraktImportJob: 'TraktImportJob', 59 59 Movie: 'Movie', 60 60 Show: 'Show', 61 + Season: 'Season', 62 + Episode: 'Episode', 61 63 TrackedMovie: 'TrackedMovie', 62 64 TrackedEpisode: 'TrackedEpisode', 63 65 List: 'List', ··· 192 194 } as const 193 195 194 196 export type ShowScalarFieldEnum = (typeof ShowScalarFieldEnum)[keyof typeof ShowScalarFieldEnum] 197 + 198 + 199 + export const SeasonScalarFieldEnum = { 200 + id: 'id', 201 + tmdbId: 'tmdbId', 202 + showId: 'showId', 203 + seasonNumber: 'seasonNumber', 204 + name: 'name', 205 + posterPath: 'posterPath', 206 + airDate: 'airDate', 207 + episodeCount: 'episodeCount', 208 + createdAt: 'createdAt', 209 + updatedAt: 'updatedAt' 210 + } as const 211 + 212 + export type SeasonScalarFieldEnum = (typeof SeasonScalarFieldEnum)[keyof typeof SeasonScalarFieldEnum] 213 + 214 + 215 + export const EpisodeScalarFieldEnum = { 216 + id: 'id', 217 + tmdbId: 'tmdbId', 218 + seasonId: 'seasonId', 219 + showId: 'showId', 220 + episodeNumber: 'episodeNumber', 221 + seasonNumber: 'seasonNumber', 222 + name: 'name', 223 + airDate: 'airDate', 224 + overview: 'overview', 225 + stillPath: 'stillPath', 226 + createdAt: 'createdAt', 227 + updatedAt: 'updatedAt' 228 + } as const 229 + 230 + export type EpisodeScalarFieldEnum = (typeof EpisodeScalarFieldEnum)[keyof typeof EpisodeScalarFieldEnum] 195 231 196 232 197 233 export const TrackedMovieScalarFieldEnum = {
+2
backend/src/generated/models.ts
··· 15 15 export type * from './models/TraktImportJob.js' 16 16 export type * from './models/Movie.js' 17 17 export type * from './models/Show.js' 18 + export type * from './models/Season.js' 19 + export type * from './models/Episode.js' 18 20 export type * from './models/TrackedMovie.js' 19 21 export type * from './models/TrackedEpisode.js' 20 22 export type * from './models/List.js'
+1648
backend/src/generated/models/Episode.ts
··· 1 + 2 + /* !!! This is code generated by Prisma. Do not edit directly. !!! */ 3 + /* eslint-disable */ 4 + // biome-ignore-all lint: generated file 5 + // @ts-nocheck 6 + /* 7 + * This file exports the `Episode` model and its related types. 8 + * 9 + * 🟢 You can import this file directly. 10 + */ 11 + import type * as runtime from "@prisma/client/runtime/client" 12 + import type * as $Enums from "../enums.js" 13 + import type * as Prisma from "../internal/prismaNamespace.js" 14 + 15 + /** 16 + * Model Episode 17 + * 18 + */ 19 + export type EpisodeModel = runtime.Types.Result.DefaultSelection<Prisma.$EpisodePayload> 20 + 21 + export type AggregateEpisode = { 22 + _count: EpisodeCountAggregateOutputType | null 23 + _avg: EpisodeAvgAggregateOutputType | null 24 + _sum: EpisodeSumAggregateOutputType | null 25 + _min: EpisodeMinAggregateOutputType | null 26 + _max: EpisodeMaxAggregateOutputType | null 27 + } 28 + 29 + export type EpisodeAvgAggregateOutputType = { 30 + tmdbId: number | null 31 + episodeNumber: number | null 32 + seasonNumber: number | null 33 + } 34 + 35 + export type EpisodeSumAggregateOutputType = { 36 + tmdbId: number | null 37 + episodeNumber: number | null 38 + seasonNumber: number | null 39 + } 40 + 41 + export type EpisodeMinAggregateOutputType = { 42 + id: string | null 43 + tmdbId: number | null 44 + seasonId: string | null 45 + showId: string | null 46 + episodeNumber: number | null 47 + seasonNumber: number | null 48 + name: string | null 49 + airDate: Date | null 50 + overview: string | null 51 + stillPath: string | null 52 + createdAt: Date | null 53 + updatedAt: Date | null 54 + } 55 + 56 + export type EpisodeMaxAggregateOutputType = { 57 + id: string | null 58 + tmdbId: number | null 59 + seasonId: string | null 60 + showId: string | null 61 + episodeNumber: number | null 62 + seasonNumber: number | null 63 + name: string | null 64 + airDate: Date | null 65 + overview: string | null 66 + stillPath: string | null 67 + createdAt: Date | null 68 + updatedAt: Date | null 69 + } 70 + 71 + export type EpisodeCountAggregateOutputType = { 72 + id: number 73 + tmdbId: number 74 + seasonId: number 75 + showId: number 76 + episodeNumber: number 77 + seasonNumber: number 78 + name: number 79 + airDate: number 80 + overview: number 81 + stillPath: number 82 + createdAt: number 83 + updatedAt: number 84 + _all: number 85 + } 86 + 87 + 88 + export type EpisodeAvgAggregateInputType = { 89 + tmdbId?: true 90 + episodeNumber?: true 91 + seasonNumber?: true 92 + } 93 + 94 + export type EpisodeSumAggregateInputType = { 95 + tmdbId?: true 96 + episodeNumber?: true 97 + seasonNumber?: true 98 + } 99 + 100 + export type EpisodeMinAggregateInputType = { 101 + id?: true 102 + tmdbId?: true 103 + seasonId?: true 104 + showId?: true 105 + episodeNumber?: true 106 + seasonNumber?: true 107 + name?: true 108 + airDate?: true 109 + overview?: true 110 + stillPath?: true 111 + createdAt?: true 112 + updatedAt?: true 113 + } 114 + 115 + export type EpisodeMaxAggregateInputType = { 116 + id?: true 117 + tmdbId?: true 118 + seasonId?: true 119 + showId?: true 120 + episodeNumber?: true 121 + seasonNumber?: true 122 + name?: true 123 + airDate?: true 124 + overview?: true 125 + stillPath?: true 126 + createdAt?: true 127 + updatedAt?: true 128 + } 129 + 130 + export type EpisodeCountAggregateInputType = { 131 + id?: true 132 + tmdbId?: true 133 + seasonId?: true 134 + showId?: true 135 + episodeNumber?: true 136 + seasonNumber?: true 137 + name?: true 138 + airDate?: true 139 + overview?: true 140 + stillPath?: true 141 + createdAt?: true 142 + updatedAt?: true 143 + _all?: true 144 + } 145 + 146 + export type EpisodeAggregateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 147 + /** 148 + * Filter which Episode to aggregate. 149 + */ 150 + where?: Prisma.EpisodeWhereInput 151 + /** 152 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 153 + * 154 + * Determine the order of Episodes to fetch. 155 + */ 156 + orderBy?: Prisma.EpisodeOrderByWithRelationInput | Prisma.EpisodeOrderByWithRelationInput[] 157 + /** 158 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 159 + * 160 + * Sets the start position 161 + */ 162 + cursor?: Prisma.EpisodeWhereUniqueInput 163 + /** 164 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 165 + * 166 + * Take `±n` Episodes from the position of the cursor. 167 + */ 168 + take?: number 169 + /** 170 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 171 + * 172 + * Skip the first `n` Episodes. 173 + */ 174 + skip?: number 175 + /** 176 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 177 + * 178 + * Count returned Episodes 179 + **/ 180 + _count?: true | EpisodeCountAggregateInputType 181 + /** 182 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 183 + * 184 + * Select which fields to average 185 + **/ 186 + _avg?: EpisodeAvgAggregateInputType 187 + /** 188 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 189 + * 190 + * Select which fields to sum 191 + **/ 192 + _sum?: EpisodeSumAggregateInputType 193 + /** 194 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 195 + * 196 + * Select which fields to find the minimum value 197 + **/ 198 + _min?: EpisodeMinAggregateInputType 199 + /** 200 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 201 + * 202 + * Select which fields to find the maximum value 203 + **/ 204 + _max?: EpisodeMaxAggregateInputType 205 + } 206 + 207 + export type GetEpisodeAggregateType<T extends EpisodeAggregateArgs> = { 208 + [P in keyof T & keyof AggregateEpisode]: P extends '_count' | 'count' 209 + ? T[P] extends true 210 + ? number 211 + : Prisma.GetScalarType<T[P], AggregateEpisode[P]> 212 + : Prisma.GetScalarType<T[P], AggregateEpisode[P]> 213 + } 214 + 215 + 216 + 217 + 218 + export type EpisodeGroupByArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 219 + where?: Prisma.EpisodeWhereInput 220 + orderBy?: Prisma.EpisodeOrderByWithAggregationInput | Prisma.EpisodeOrderByWithAggregationInput[] 221 + by: Prisma.EpisodeScalarFieldEnum[] | Prisma.EpisodeScalarFieldEnum 222 + having?: Prisma.EpisodeScalarWhereWithAggregatesInput 223 + take?: number 224 + skip?: number 225 + _count?: EpisodeCountAggregateInputType | true 226 + _avg?: EpisodeAvgAggregateInputType 227 + _sum?: EpisodeSumAggregateInputType 228 + _min?: EpisodeMinAggregateInputType 229 + _max?: EpisodeMaxAggregateInputType 230 + } 231 + 232 + export type EpisodeGroupByOutputType = { 233 + id: string 234 + tmdbId: number 235 + seasonId: string 236 + showId: string 237 + episodeNumber: number 238 + seasonNumber: number 239 + name: string 240 + airDate: Date | null 241 + overview: string | null 242 + stillPath: string | null 243 + createdAt: Date 244 + updatedAt: Date 245 + _count: EpisodeCountAggregateOutputType | null 246 + _avg: EpisodeAvgAggregateOutputType | null 247 + _sum: EpisodeSumAggregateOutputType | null 248 + _min: EpisodeMinAggregateOutputType | null 249 + _max: EpisodeMaxAggregateOutputType | null 250 + } 251 + 252 + type GetEpisodeGroupByPayload<T extends EpisodeGroupByArgs> = Prisma.PrismaPromise< 253 + Array< 254 + Prisma.PickEnumerable<EpisodeGroupByOutputType, T['by']> & 255 + { 256 + [P in ((keyof T) & (keyof EpisodeGroupByOutputType))]: P extends '_count' 257 + ? T[P] extends boolean 258 + ? number 259 + : Prisma.GetScalarType<T[P], EpisodeGroupByOutputType[P]> 260 + : Prisma.GetScalarType<T[P], EpisodeGroupByOutputType[P]> 261 + } 262 + > 263 + > 264 + 265 + 266 + 267 + export type EpisodeWhereInput = { 268 + AND?: Prisma.EpisodeWhereInput | Prisma.EpisodeWhereInput[] 269 + OR?: Prisma.EpisodeWhereInput[] 270 + NOT?: Prisma.EpisodeWhereInput | Prisma.EpisodeWhereInput[] 271 + id?: Prisma.StringFilter<"Episode"> | string 272 + tmdbId?: Prisma.IntFilter<"Episode"> | number 273 + seasonId?: Prisma.StringFilter<"Episode"> | string 274 + showId?: Prisma.StringFilter<"Episode"> | string 275 + episodeNumber?: Prisma.IntFilter<"Episode"> | number 276 + seasonNumber?: Prisma.IntFilter<"Episode"> | number 277 + name?: Prisma.StringFilter<"Episode"> | string 278 + airDate?: Prisma.DateTimeNullableFilter<"Episode"> | Date | string | null 279 + overview?: Prisma.StringNullableFilter<"Episode"> | string | null 280 + stillPath?: Prisma.StringNullableFilter<"Episode"> | string | null 281 + createdAt?: Prisma.DateTimeFilter<"Episode"> | Date | string 282 + updatedAt?: Prisma.DateTimeFilter<"Episode"> | Date | string 283 + season?: Prisma.XOR<Prisma.SeasonScalarRelationFilter, Prisma.SeasonWhereInput> 284 + } 285 + 286 + export type EpisodeOrderByWithRelationInput = { 287 + id?: Prisma.SortOrder 288 + tmdbId?: Prisma.SortOrder 289 + seasonId?: Prisma.SortOrder 290 + showId?: Prisma.SortOrder 291 + episodeNumber?: Prisma.SortOrder 292 + seasonNumber?: Prisma.SortOrder 293 + name?: Prisma.SortOrder 294 + airDate?: Prisma.SortOrderInput | Prisma.SortOrder 295 + overview?: Prisma.SortOrderInput | Prisma.SortOrder 296 + stillPath?: Prisma.SortOrderInput | Prisma.SortOrder 297 + createdAt?: Prisma.SortOrder 298 + updatedAt?: Prisma.SortOrder 299 + season?: Prisma.SeasonOrderByWithRelationInput 300 + } 301 + 302 + export type EpisodeWhereUniqueInput = Prisma.AtLeast<{ 303 + id?: string 304 + tmdbId?: number 305 + showId_seasonNumber_episodeNumber?: Prisma.EpisodeShowIdSeasonNumberEpisodeNumberCompoundUniqueInput 306 + AND?: Prisma.EpisodeWhereInput | Prisma.EpisodeWhereInput[] 307 + OR?: Prisma.EpisodeWhereInput[] 308 + NOT?: Prisma.EpisodeWhereInput | Prisma.EpisodeWhereInput[] 309 + seasonId?: Prisma.StringFilter<"Episode"> | string 310 + showId?: Prisma.StringFilter<"Episode"> | string 311 + episodeNumber?: Prisma.IntFilter<"Episode"> | number 312 + seasonNumber?: Prisma.IntFilter<"Episode"> | number 313 + name?: Prisma.StringFilter<"Episode"> | string 314 + airDate?: Prisma.DateTimeNullableFilter<"Episode"> | Date | string | null 315 + overview?: Prisma.StringNullableFilter<"Episode"> | string | null 316 + stillPath?: Prisma.StringNullableFilter<"Episode"> | string | null 317 + createdAt?: Prisma.DateTimeFilter<"Episode"> | Date | string 318 + updatedAt?: Prisma.DateTimeFilter<"Episode"> | Date | string 319 + season?: Prisma.XOR<Prisma.SeasonScalarRelationFilter, Prisma.SeasonWhereInput> 320 + }, "id" | "tmdbId" | "showId_seasonNumber_episodeNumber"> 321 + 322 + export type EpisodeOrderByWithAggregationInput = { 323 + id?: Prisma.SortOrder 324 + tmdbId?: Prisma.SortOrder 325 + seasonId?: Prisma.SortOrder 326 + showId?: Prisma.SortOrder 327 + episodeNumber?: Prisma.SortOrder 328 + seasonNumber?: Prisma.SortOrder 329 + name?: Prisma.SortOrder 330 + airDate?: Prisma.SortOrderInput | Prisma.SortOrder 331 + overview?: Prisma.SortOrderInput | Prisma.SortOrder 332 + stillPath?: Prisma.SortOrderInput | Prisma.SortOrder 333 + createdAt?: Prisma.SortOrder 334 + updatedAt?: Prisma.SortOrder 335 + _count?: Prisma.EpisodeCountOrderByAggregateInput 336 + _avg?: Prisma.EpisodeAvgOrderByAggregateInput 337 + _max?: Prisma.EpisodeMaxOrderByAggregateInput 338 + _min?: Prisma.EpisodeMinOrderByAggregateInput 339 + _sum?: Prisma.EpisodeSumOrderByAggregateInput 340 + } 341 + 342 + export type EpisodeScalarWhereWithAggregatesInput = { 343 + AND?: Prisma.EpisodeScalarWhereWithAggregatesInput | Prisma.EpisodeScalarWhereWithAggregatesInput[] 344 + OR?: Prisma.EpisodeScalarWhereWithAggregatesInput[] 345 + NOT?: Prisma.EpisodeScalarWhereWithAggregatesInput | Prisma.EpisodeScalarWhereWithAggregatesInput[] 346 + id?: Prisma.StringWithAggregatesFilter<"Episode"> | string 347 + tmdbId?: Prisma.IntWithAggregatesFilter<"Episode"> | number 348 + seasonId?: Prisma.StringWithAggregatesFilter<"Episode"> | string 349 + showId?: Prisma.StringWithAggregatesFilter<"Episode"> | string 350 + episodeNumber?: Prisma.IntWithAggregatesFilter<"Episode"> | number 351 + seasonNumber?: Prisma.IntWithAggregatesFilter<"Episode"> | number 352 + name?: Prisma.StringWithAggregatesFilter<"Episode"> | string 353 + airDate?: Prisma.DateTimeNullableWithAggregatesFilter<"Episode"> | Date | string | null 354 + overview?: Prisma.StringNullableWithAggregatesFilter<"Episode"> | string | null 355 + stillPath?: Prisma.StringNullableWithAggregatesFilter<"Episode"> | string | null 356 + createdAt?: Prisma.DateTimeWithAggregatesFilter<"Episode"> | Date | string 357 + updatedAt?: Prisma.DateTimeWithAggregatesFilter<"Episode"> | Date | string 358 + } 359 + 360 + export type EpisodeCreateInput = { 361 + id?: string 362 + tmdbId: number 363 + showId: string 364 + episodeNumber: number 365 + seasonNumber: number 366 + name: string 367 + airDate?: Date | string | null 368 + overview?: string | null 369 + stillPath?: string | null 370 + createdAt?: Date | string 371 + updatedAt?: Date | string 372 + season: Prisma.SeasonCreateNestedOneWithoutEpisodesInput 373 + } 374 + 375 + export type EpisodeUncheckedCreateInput = { 376 + id?: string 377 + tmdbId: number 378 + seasonId: string 379 + showId: string 380 + episodeNumber: number 381 + seasonNumber: number 382 + name: string 383 + airDate?: Date | string | null 384 + overview?: string | null 385 + stillPath?: string | null 386 + createdAt?: Date | string 387 + updatedAt?: Date | string 388 + } 389 + 390 + export type EpisodeUpdateInput = { 391 + id?: Prisma.StringFieldUpdateOperationsInput | string 392 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 393 + showId?: Prisma.StringFieldUpdateOperationsInput | string 394 + episodeNumber?: Prisma.IntFieldUpdateOperationsInput | number 395 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 396 + name?: Prisma.StringFieldUpdateOperationsInput | string 397 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 398 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 399 + stillPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 400 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 401 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 402 + season?: Prisma.SeasonUpdateOneRequiredWithoutEpisodesNestedInput 403 + } 404 + 405 + export type EpisodeUncheckedUpdateInput = { 406 + id?: Prisma.StringFieldUpdateOperationsInput | string 407 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 408 + seasonId?: Prisma.StringFieldUpdateOperationsInput | string 409 + showId?: Prisma.StringFieldUpdateOperationsInput | string 410 + episodeNumber?: Prisma.IntFieldUpdateOperationsInput | number 411 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 412 + name?: Prisma.StringFieldUpdateOperationsInput | string 413 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 414 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 415 + stillPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 416 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 417 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 418 + } 419 + 420 + export type EpisodeCreateManyInput = { 421 + id?: string 422 + tmdbId: number 423 + seasonId: string 424 + showId: string 425 + episodeNumber: number 426 + seasonNumber: number 427 + name: string 428 + airDate?: Date | string | null 429 + overview?: string | null 430 + stillPath?: string | null 431 + createdAt?: Date | string 432 + updatedAt?: Date | string 433 + } 434 + 435 + export type EpisodeUpdateManyMutationInput = { 436 + id?: Prisma.StringFieldUpdateOperationsInput | string 437 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 438 + showId?: Prisma.StringFieldUpdateOperationsInput | string 439 + episodeNumber?: Prisma.IntFieldUpdateOperationsInput | number 440 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 441 + name?: Prisma.StringFieldUpdateOperationsInput | string 442 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 443 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 444 + stillPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 445 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 446 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 447 + } 448 + 449 + export type EpisodeUncheckedUpdateManyInput = { 450 + id?: Prisma.StringFieldUpdateOperationsInput | string 451 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 452 + seasonId?: Prisma.StringFieldUpdateOperationsInput | string 453 + showId?: Prisma.StringFieldUpdateOperationsInput | string 454 + episodeNumber?: Prisma.IntFieldUpdateOperationsInput | number 455 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 456 + name?: Prisma.StringFieldUpdateOperationsInput | string 457 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 458 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 459 + stillPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 460 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 461 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 462 + } 463 + 464 + export type EpisodeListRelationFilter = { 465 + every?: Prisma.EpisodeWhereInput 466 + some?: Prisma.EpisodeWhereInput 467 + none?: Prisma.EpisodeWhereInput 468 + } 469 + 470 + export type EpisodeOrderByRelationAggregateInput = { 471 + _count?: Prisma.SortOrder 472 + } 473 + 474 + export type EpisodeShowIdSeasonNumberEpisodeNumberCompoundUniqueInput = { 475 + showId: string 476 + seasonNumber: number 477 + episodeNumber: number 478 + } 479 + 480 + export type EpisodeCountOrderByAggregateInput = { 481 + id?: Prisma.SortOrder 482 + tmdbId?: Prisma.SortOrder 483 + seasonId?: Prisma.SortOrder 484 + showId?: Prisma.SortOrder 485 + episodeNumber?: Prisma.SortOrder 486 + seasonNumber?: Prisma.SortOrder 487 + name?: Prisma.SortOrder 488 + airDate?: Prisma.SortOrder 489 + overview?: Prisma.SortOrder 490 + stillPath?: Prisma.SortOrder 491 + createdAt?: Prisma.SortOrder 492 + updatedAt?: Prisma.SortOrder 493 + } 494 + 495 + export type EpisodeAvgOrderByAggregateInput = { 496 + tmdbId?: Prisma.SortOrder 497 + episodeNumber?: Prisma.SortOrder 498 + seasonNumber?: Prisma.SortOrder 499 + } 500 + 501 + export type EpisodeMaxOrderByAggregateInput = { 502 + id?: Prisma.SortOrder 503 + tmdbId?: Prisma.SortOrder 504 + seasonId?: Prisma.SortOrder 505 + showId?: Prisma.SortOrder 506 + episodeNumber?: Prisma.SortOrder 507 + seasonNumber?: Prisma.SortOrder 508 + name?: Prisma.SortOrder 509 + airDate?: Prisma.SortOrder 510 + overview?: Prisma.SortOrder 511 + stillPath?: Prisma.SortOrder 512 + createdAt?: Prisma.SortOrder 513 + updatedAt?: Prisma.SortOrder 514 + } 515 + 516 + export type EpisodeMinOrderByAggregateInput = { 517 + id?: Prisma.SortOrder 518 + tmdbId?: Prisma.SortOrder 519 + seasonId?: Prisma.SortOrder 520 + showId?: Prisma.SortOrder 521 + episodeNumber?: Prisma.SortOrder 522 + seasonNumber?: Prisma.SortOrder 523 + name?: Prisma.SortOrder 524 + airDate?: Prisma.SortOrder 525 + overview?: Prisma.SortOrder 526 + stillPath?: Prisma.SortOrder 527 + createdAt?: Prisma.SortOrder 528 + updatedAt?: Prisma.SortOrder 529 + } 530 + 531 + export type EpisodeSumOrderByAggregateInput = { 532 + tmdbId?: Prisma.SortOrder 533 + episodeNumber?: Prisma.SortOrder 534 + seasonNumber?: Prisma.SortOrder 535 + } 536 + 537 + export type EpisodeCreateNestedManyWithoutSeasonInput = { 538 + create?: Prisma.XOR<Prisma.EpisodeCreateWithoutSeasonInput, Prisma.EpisodeUncheckedCreateWithoutSeasonInput> | Prisma.EpisodeCreateWithoutSeasonInput[] | Prisma.EpisodeUncheckedCreateWithoutSeasonInput[] 539 + connectOrCreate?: Prisma.EpisodeCreateOrConnectWithoutSeasonInput | Prisma.EpisodeCreateOrConnectWithoutSeasonInput[] 540 + createMany?: Prisma.EpisodeCreateManySeasonInputEnvelope 541 + connect?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 542 + } 543 + 544 + export type EpisodeUncheckedCreateNestedManyWithoutSeasonInput = { 545 + create?: Prisma.XOR<Prisma.EpisodeCreateWithoutSeasonInput, Prisma.EpisodeUncheckedCreateWithoutSeasonInput> | Prisma.EpisodeCreateWithoutSeasonInput[] | Prisma.EpisodeUncheckedCreateWithoutSeasonInput[] 546 + connectOrCreate?: Prisma.EpisodeCreateOrConnectWithoutSeasonInput | Prisma.EpisodeCreateOrConnectWithoutSeasonInput[] 547 + createMany?: Prisma.EpisodeCreateManySeasonInputEnvelope 548 + connect?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 549 + } 550 + 551 + export type EpisodeUpdateManyWithoutSeasonNestedInput = { 552 + create?: Prisma.XOR<Prisma.EpisodeCreateWithoutSeasonInput, Prisma.EpisodeUncheckedCreateWithoutSeasonInput> | Prisma.EpisodeCreateWithoutSeasonInput[] | Prisma.EpisodeUncheckedCreateWithoutSeasonInput[] 553 + connectOrCreate?: Prisma.EpisodeCreateOrConnectWithoutSeasonInput | Prisma.EpisodeCreateOrConnectWithoutSeasonInput[] 554 + upsert?: Prisma.EpisodeUpsertWithWhereUniqueWithoutSeasonInput | Prisma.EpisodeUpsertWithWhereUniqueWithoutSeasonInput[] 555 + createMany?: Prisma.EpisodeCreateManySeasonInputEnvelope 556 + set?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 557 + disconnect?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 558 + delete?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 559 + connect?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 560 + update?: Prisma.EpisodeUpdateWithWhereUniqueWithoutSeasonInput | Prisma.EpisodeUpdateWithWhereUniqueWithoutSeasonInput[] 561 + updateMany?: Prisma.EpisodeUpdateManyWithWhereWithoutSeasonInput | Prisma.EpisodeUpdateManyWithWhereWithoutSeasonInput[] 562 + deleteMany?: Prisma.EpisodeScalarWhereInput | Prisma.EpisodeScalarWhereInput[] 563 + } 564 + 565 + export type EpisodeUncheckedUpdateManyWithoutSeasonNestedInput = { 566 + create?: Prisma.XOR<Prisma.EpisodeCreateWithoutSeasonInput, Prisma.EpisodeUncheckedCreateWithoutSeasonInput> | Prisma.EpisodeCreateWithoutSeasonInput[] | Prisma.EpisodeUncheckedCreateWithoutSeasonInput[] 567 + connectOrCreate?: Prisma.EpisodeCreateOrConnectWithoutSeasonInput | Prisma.EpisodeCreateOrConnectWithoutSeasonInput[] 568 + upsert?: Prisma.EpisodeUpsertWithWhereUniqueWithoutSeasonInput | Prisma.EpisodeUpsertWithWhereUniqueWithoutSeasonInput[] 569 + createMany?: Prisma.EpisodeCreateManySeasonInputEnvelope 570 + set?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 571 + disconnect?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 572 + delete?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 573 + connect?: Prisma.EpisodeWhereUniqueInput | Prisma.EpisodeWhereUniqueInput[] 574 + update?: Prisma.EpisodeUpdateWithWhereUniqueWithoutSeasonInput | Prisma.EpisodeUpdateWithWhereUniqueWithoutSeasonInput[] 575 + updateMany?: Prisma.EpisodeUpdateManyWithWhereWithoutSeasonInput | Prisma.EpisodeUpdateManyWithWhereWithoutSeasonInput[] 576 + deleteMany?: Prisma.EpisodeScalarWhereInput | Prisma.EpisodeScalarWhereInput[] 577 + } 578 + 579 + export type EpisodeCreateWithoutSeasonInput = { 580 + id?: string 581 + tmdbId: number 582 + showId: string 583 + episodeNumber: number 584 + seasonNumber: number 585 + name: string 586 + airDate?: Date | string | null 587 + overview?: string | null 588 + stillPath?: string | null 589 + createdAt?: Date | string 590 + updatedAt?: Date | string 591 + } 592 + 593 + export type EpisodeUncheckedCreateWithoutSeasonInput = { 594 + id?: string 595 + tmdbId: number 596 + showId: string 597 + episodeNumber: number 598 + seasonNumber: number 599 + name: string 600 + airDate?: Date | string | null 601 + overview?: string | null 602 + stillPath?: string | null 603 + createdAt?: Date | string 604 + updatedAt?: Date | string 605 + } 606 + 607 + export type EpisodeCreateOrConnectWithoutSeasonInput = { 608 + where: Prisma.EpisodeWhereUniqueInput 609 + create: Prisma.XOR<Prisma.EpisodeCreateWithoutSeasonInput, Prisma.EpisodeUncheckedCreateWithoutSeasonInput> 610 + } 611 + 612 + export type EpisodeCreateManySeasonInputEnvelope = { 613 + data: Prisma.EpisodeCreateManySeasonInput | Prisma.EpisodeCreateManySeasonInput[] 614 + skipDuplicates?: boolean 615 + } 616 + 617 + export type EpisodeUpsertWithWhereUniqueWithoutSeasonInput = { 618 + where: Prisma.EpisodeWhereUniqueInput 619 + update: Prisma.XOR<Prisma.EpisodeUpdateWithoutSeasonInput, Prisma.EpisodeUncheckedUpdateWithoutSeasonInput> 620 + create: Prisma.XOR<Prisma.EpisodeCreateWithoutSeasonInput, Prisma.EpisodeUncheckedCreateWithoutSeasonInput> 621 + } 622 + 623 + export type EpisodeUpdateWithWhereUniqueWithoutSeasonInput = { 624 + where: Prisma.EpisodeWhereUniqueInput 625 + data: Prisma.XOR<Prisma.EpisodeUpdateWithoutSeasonInput, Prisma.EpisodeUncheckedUpdateWithoutSeasonInput> 626 + } 627 + 628 + export type EpisodeUpdateManyWithWhereWithoutSeasonInput = { 629 + where: Prisma.EpisodeScalarWhereInput 630 + data: Prisma.XOR<Prisma.EpisodeUpdateManyMutationInput, Prisma.EpisodeUncheckedUpdateManyWithoutSeasonInput> 631 + } 632 + 633 + export type EpisodeScalarWhereInput = { 634 + AND?: Prisma.EpisodeScalarWhereInput | Prisma.EpisodeScalarWhereInput[] 635 + OR?: Prisma.EpisodeScalarWhereInput[] 636 + NOT?: Prisma.EpisodeScalarWhereInput | Prisma.EpisodeScalarWhereInput[] 637 + id?: Prisma.StringFilter<"Episode"> | string 638 + tmdbId?: Prisma.IntFilter<"Episode"> | number 639 + seasonId?: Prisma.StringFilter<"Episode"> | string 640 + showId?: Prisma.StringFilter<"Episode"> | string 641 + episodeNumber?: Prisma.IntFilter<"Episode"> | number 642 + seasonNumber?: Prisma.IntFilter<"Episode"> | number 643 + name?: Prisma.StringFilter<"Episode"> | string 644 + airDate?: Prisma.DateTimeNullableFilter<"Episode"> | Date | string | null 645 + overview?: Prisma.StringNullableFilter<"Episode"> | string | null 646 + stillPath?: Prisma.StringNullableFilter<"Episode"> | string | null 647 + createdAt?: Prisma.DateTimeFilter<"Episode"> | Date | string 648 + updatedAt?: Prisma.DateTimeFilter<"Episode"> | Date | string 649 + } 650 + 651 + export type EpisodeCreateManySeasonInput = { 652 + id?: string 653 + tmdbId: number 654 + showId: string 655 + episodeNumber: number 656 + seasonNumber: number 657 + name: string 658 + airDate?: Date | string | null 659 + overview?: string | null 660 + stillPath?: string | null 661 + createdAt?: Date | string 662 + updatedAt?: Date | string 663 + } 664 + 665 + export type EpisodeUpdateWithoutSeasonInput = { 666 + id?: Prisma.StringFieldUpdateOperationsInput | string 667 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 668 + showId?: Prisma.StringFieldUpdateOperationsInput | string 669 + episodeNumber?: Prisma.IntFieldUpdateOperationsInput | number 670 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 671 + name?: Prisma.StringFieldUpdateOperationsInput | string 672 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 673 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 674 + stillPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 675 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 676 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 677 + } 678 + 679 + export type EpisodeUncheckedUpdateWithoutSeasonInput = { 680 + id?: Prisma.StringFieldUpdateOperationsInput | string 681 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 682 + showId?: Prisma.StringFieldUpdateOperationsInput | string 683 + episodeNumber?: Prisma.IntFieldUpdateOperationsInput | number 684 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 685 + name?: Prisma.StringFieldUpdateOperationsInput | string 686 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 687 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 688 + stillPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 689 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 690 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 691 + } 692 + 693 + export type EpisodeUncheckedUpdateManyWithoutSeasonInput = { 694 + id?: Prisma.StringFieldUpdateOperationsInput | string 695 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 696 + showId?: Prisma.StringFieldUpdateOperationsInput | string 697 + episodeNumber?: Prisma.IntFieldUpdateOperationsInput | number 698 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 699 + name?: Prisma.StringFieldUpdateOperationsInput | string 700 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 701 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 702 + stillPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 703 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 704 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 705 + } 706 + 707 + 708 + 709 + export type EpisodeSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ 710 + id?: boolean 711 + tmdbId?: boolean 712 + seasonId?: boolean 713 + showId?: boolean 714 + episodeNumber?: boolean 715 + seasonNumber?: boolean 716 + name?: boolean 717 + airDate?: boolean 718 + overview?: boolean 719 + stillPath?: boolean 720 + createdAt?: boolean 721 + updatedAt?: boolean 722 + season?: boolean | Prisma.SeasonDefaultArgs<ExtArgs> 723 + }, ExtArgs["result"]["episode"]> 724 + 725 + export type EpisodeSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ 726 + id?: boolean 727 + tmdbId?: boolean 728 + seasonId?: boolean 729 + showId?: boolean 730 + episodeNumber?: boolean 731 + seasonNumber?: boolean 732 + name?: boolean 733 + airDate?: boolean 734 + overview?: boolean 735 + stillPath?: boolean 736 + createdAt?: boolean 737 + updatedAt?: boolean 738 + season?: boolean | Prisma.SeasonDefaultArgs<ExtArgs> 739 + }, ExtArgs["result"]["episode"]> 740 + 741 + export type EpisodeSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ 742 + id?: boolean 743 + tmdbId?: boolean 744 + seasonId?: boolean 745 + showId?: boolean 746 + episodeNumber?: boolean 747 + seasonNumber?: boolean 748 + name?: boolean 749 + airDate?: boolean 750 + overview?: boolean 751 + stillPath?: boolean 752 + createdAt?: boolean 753 + updatedAt?: boolean 754 + season?: boolean | Prisma.SeasonDefaultArgs<ExtArgs> 755 + }, ExtArgs["result"]["episode"]> 756 + 757 + export type EpisodeSelectScalar = { 758 + id?: boolean 759 + tmdbId?: boolean 760 + seasonId?: boolean 761 + showId?: boolean 762 + episodeNumber?: boolean 763 + seasonNumber?: boolean 764 + name?: boolean 765 + airDate?: boolean 766 + overview?: boolean 767 + stillPath?: boolean 768 + createdAt?: boolean 769 + updatedAt?: boolean 770 + } 771 + 772 + export type EpisodeOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "tmdbId" | "seasonId" | "showId" | "episodeNumber" | "seasonNumber" | "name" | "airDate" | "overview" | "stillPath" | "createdAt" | "updatedAt", ExtArgs["result"]["episode"]> 773 + export type EpisodeInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 774 + season?: boolean | Prisma.SeasonDefaultArgs<ExtArgs> 775 + } 776 + export type EpisodeIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 777 + season?: boolean | Prisma.SeasonDefaultArgs<ExtArgs> 778 + } 779 + export type EpisodeIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 780 + season?: boolean | Prisma.SeasonDefaultArgs<ExtArgs> 781 + } 782 + 783 + export type $EpisodePayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 784 + name: "Episode" 785 + objects: { 786 + season: Prisma.$SeasonPayload<ExtArgs> 787 + } 788 + scalars: runtime.Types.Extensions.GetPayloadResult<{ 789 + id: string 790 + tmdbId: number 791 + seasonId: string 792 + showId: string 793 + episodeNumber: number 794 + seasonNumber: number 795 + name: string 796 + airDate: Date | null 797 + overview: string | null 798 + stillPath: string | null 799 + createdAt: Date 800 + updatedAt: Date 801 + }, ExtArgs["result"]["episode"]> 802 + composites: {} 803 + } 804 + 805 + export type EpisodeGetPayload<S extends boolean | null | undefined | EpisodeDefaultArgs> = runtime.Types.Result.GetResult<Prisma.$EpisodePayload, S> 806 + 807 + export type EpisodeCountArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = 808 + Omit<EpisodeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & { 809 + select?: EpisodeCountAggregateInputType | true 810 + } 811 + 812 + export interface EpisodeDelegate<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> { 813 + [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Episode'], meta: { name: 'Episode' } } 814 + /** 815 + * Find zero or one Episode that matches the filter. 816 + * @param {EpisodeFindUniqueArgs} args - Arguments to find a Episode 817 + * @example 818 + * // Get one Episode 819 + * const episode = await prisma.episode.findUnique({ 820 + * where: { 821 + * // ... provide filter here 822 + * } 823 + * }) 824 + */ 825 + findUnique<T extends EpisodeFindUniqueArgs>(args: Prisma.SelectSubset<T, EpisodeFindUniqueArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> 826 + 827 + /** 828 + * Find one Episode that matches the filter or throw an error with `error.code='P2025'` 829 + * if no matches were found. 830 + * @param {EpisodeFindUniqueOrThrowArgs} args - Arguments to find a Episode 831 + * @example 832 + * // Get one Episode 833 + * const episode = await prisma.episode.findUniqueOrThrow({ 834 + * where: { 835 + * // ... provide filter here 836 + * } 837 + * }) 838 + */ 839 + findUniqueOrThrow<T extends EpisodeFindUniqueOrThrowArgs>(args: Prisma.SelectSubset<T, EpisodeFindUniqueOrThrowArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 840 + 841 + /** 842 + * Find the first Episode that matches the filter. 843 + * Note, that providing `undefined` is treated as the value not being there. 844 + * Read more here: https://pris.ly/d/null-undefined 845 + * @param {EpisodeFindFirstArgs} args - Arguments to find a Episode 846 + * @example 847 + * // Get one Episode 848 + * const episode = await prisma.episode.findFirst({ 849 + * where: { 850 + * // ... provide filter here 851 + * } 852 + * }) 853 + */ 854 + findFirst<T extends EpisodeFindFirstArgs>(args?: Prisma.SelectSubset<T, EpisodeFindFirstArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> 855 + 856 + /** 857 + * Find the first Episode that matches the filter or 858 + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. 859 + * Note, that providing `undefined` is treated as the value not being there. 860 + * Read more here: https://pris.ly/d/null-undefined 861 + * @param {EpisodeFindFirstOrThrowArgs} args - Arguments to find a Episode 862 + * @example 863 + * // Get one Episode 864 + * const episode = await prisma.episode.findFirstOrThrow({ 865 + * where: { 866 + * // ... provide filter here 867 + * } 868 + * }) 869 + */ 870 + findFirstOrThrow<T extends EpisodeFindFirstOrThrowArgs>(args?: Prisma.SelectSubset<T, EpisodeFindFirstOrThrowArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 871 + 872 + /** 873 + * Find zero or more Episodes that matches the filter. 874 + * Note, that providing `undefined` is treated as the value not being there. 875 + * Read more here: https://pris.ly/d/null-undefined 876 + * @param {EpisodeFindManyArgs} args - Arguments to filter and select certain fields only. 877 + * @example 878 + * // Get all Episodes 879 + * const episodes = await prisma.episode.findMany() 880 + * 881 + * // Get first 10 Episodes 882 + * const episodes = await prisma.episode.findMany({ take: 10 }) 883 + * 884 + * // Only select the `id` 885 + * const episodeWithIdOnly = await prisma.episode.findMany({ select: { id: true } }) 886 + * 887 + */ 888 + findMany<T extends EpisodeFindManyArgs>(args?: Prisma.SelectSubset<T, EpisodeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>> 889 + 890 + /** 891 + * Create a Episode. 892 + * @param {EpisodeCreateArgs} args - Arguments to create a Episode. 893 + * @example 894 + * // Create one Episode 895 + * const Episode = await prisma.episode.create({ 896 + * data: { 897 + * // ... data to create a Episode 898 + * } 899 + * }) 900 + * 901 + */ 902 + create<T extends EpisodeCreateArgs>(args: Prisma.SelectSubset<T, EpisodeCreateArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 903 + 904 + /** 905 + * Create many Episodes. 906 + * @param {EpisodeCreateManyArgs} args - Arguments to create many Episodes. 907 + * @example 908 + * // Create many Episodes 909 + * const episode = await prisma.episode.createMany({ 910 + * data: [ 911 + * // ... provide data here 912 + * ] 913 + * }) 914 + * 915 + */ 916 + createMany<T extends EpisodeCreateManyArgs>(args?: Prisma.SelectSubset<T, EpisodeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload> 917 + 918 + /** 919 + * Create many Episodes and returns the data saved in the database. 920 + * @param {EpisodeCreateManyAndReturnArgs} args - Arguments to create many Episodes. 921 + * @example 922 + * // Create many Episodes 923 + * const episode = await prisma.episode.createManyAndReturn({ 924 + * data: [ 925 + * // ... provide data here 926 + * ] 927 + * }) 928 + * 929 + * // Create many Episodes and only return the `id` 930 + * const episodeWithIdOnly = await prisma.episode.createManyAndReturn({ 931 + * select: { id: true }, 932 + * data: [ 933 + * // ... provide data here 934 + * ] 935 + * }) 936 + * Note, that providing `undefined` is treated as the value not being there. 937 + * Read more here: https://pris.ly/d/null-undefined 938 + * 939 + */ 940 + createManyAndReturn<T extends EpisodeCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, EpisodeCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>> 941 + 942 + /** 943 + * Delete a Episode. 944 + * @param {EpisodeDeleteArgs} args - Arguments to delete one Episode. 945 + * @example 946 + * // Delete one Episode 947 + * const Episode = await prisma.episode.delete({ 948 + * where: { 949 + * // ... filter to delete one Episode 950 + * } 951 + * }) 952 + * 953 + */ 954 + delete<T extends EpisodeDeleteArgs>(args: Prisma.SelectSubset<T, EpisodeDeleteArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 955 + 956 + /** 957 + * Update one Episode. 958 + * @param {EpisodeUpdateArgs} args - Arguments to update one Episode. 959 + * @example 960 + * // Update one Episode 961 + * const episode = await prisma.episode.update({ 962 + * where: { 963 + * // ... provide filter here 964 + * }, 965 + * data: { 966 + * // ... provide data here 967 + * } 968 + * }) 969 + * 970 + */ 971 + update<T extends EpisodeUpdateArgs>(args: Prisma.SelectSubset<T, EpisodeUpdateArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 972 + 973 + /** 974 + * Delete zero or more Episodes. 975 + * @param {EpisodeDeleteManyArgs} args - Arguments to filter Episodes to delete. 976 + * @example 977 + * // Delete a few Episodes 978 + * const { count } = await prisma.episode.deleteMany({ 979 + * where: { 980 + * // ... provide filter here 981 + * } 982 + * }) 983 + * 984 + */ 985 + deleteMany<T extends EpisodeDeleteManyArgs>(args?: Prisma.SelectSubset<T, EpisodeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload> 986 + 987 + /** 988 + * Update zero or more Episodes. 989 + * Note, that providing `undefined` is treated as the value not being there. 990 + * Read more here: https://pris.ly/d/null-undefined 991 + * @param {EpisodeUpdateManyArgs} args - Arguments to update one or more rows. 992 + * @example 993 + * // Update many Episodes 994 + * const episode = await prisma.episode.updateMany({ 995 + * where: { 996 + * // ... provide filter here 997 + * }, 998 + * data: { 999 + * // ... provide data here 1000 + * } 1001 + * }) 1002 + * 1003 + */ 1004 + updateMany<T extends EpisodeUpdateManyArgs>(args: Prisma.SelectSubset<T, EpisodeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload> 1005 + 1006 + /** 1007 + * Update zero or more Episodes and returns the data updated in the database. 1008 + * @param {EpisodeUpdateManyAndReturnArgs} args - Arguments to update many Episodes. 1009 + * @example 1010 + * // Update many Episodes 1011 + * const episode = await prisma.episode.updateManyAndReturn({ 1012 + * where: { 1013 + * // ... provide filter here 1014 + * }, 1015 + * data: [ 1016 + * // ... provide data here 1017 + * ] 1018 + * }) 1019 + * 1020 + * // Update zero or more Episodes and only return the `id` 1021 + * const episodeWithIdOnly = await prisma.episode.updateManyAndReturn({ 1022 + * select: { id: true }, 1023 + * where: { 1024 + * // ... provide filter here 1025 + * }, 1026 + * data: [ 1027 + * // ... provide data here 1028 + * ] 1029 + * }) 1030 + * Note, that providing `undefined` is treated as the value not being there. 1031 + * Read more here: https://pris.ly/d/null-undefined 1032 + * 1033 + */ 1034 + updateManyAndReturn<T extends EpisodeUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, EpisodeUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>> 1035 + 1036 + /** 1037 + * Create or update one Episode. 1038 + * @param {EpisodeUpsertArgs} args - Arguments to update or create a Episode. 1039 + * @example 1040 + * // Update or create a Episode 1041 + * const episode = await prisma.episode.upsert({ 1042 + * create: { 1043 + * // ... data to create a Episode 1044 + * }, 1045 + * update: { 1046 + * // ... in case it already exists, update 1047 + * }, 1048 + * where: { 1049 + * // ... the filter for the Episode we want to update 1050 + * } 1051 + * }) 1052 + */ 1053 + upsert<T extends EpisodeUpsertArgs>(args: Prisma.SelectSubset<T, EpisodeUpsertArgs<ExtArgs>>): Prisma.Prisma__EpisodeClient<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 1054 + 1055 + 1056 + /** 1057 + * Count the number of Episodes. 1058 + * Note, that providing `undefined` is treated as the value not being there. 1059 + * Read more here: https://pris.ly/d/null-undefined 1060 + * @param {EpisodeCountArgs} args - Arguments to filter Episodes to count. 1061 + * @example 1062 + * // Count the number of Episodes 1063 + * const count = await prisma.episode.count({ 1064 + * where: { 1065 + * // ... the filter for the Episodes we want to count 1066 + * } 1067 + * }) 1068 + **/ 1069 + count<T extends EpisodeCountArgs>( 1070 + args?: Prisma.Subset<T, EpisodeCountArgs>, 1071 + ): Prisma.PrismaPromise< 1072 + T extends runtime.Types.Utils.Record<'select', any> 1073 + ? T['select'] extends true 1074 + ? number 1075 + : Prisma.GetScalarType<T['select'], EpisodeCountAggregateOutputType> 1076 + : number 1077 + > 1078 + 1079 + /** 1080 + * Allows you to perform aggregations operations on a Episode. 1081 + * Note, that providing `undefined` is treated as the value not being there. 1082 + * Read more here: https://pris.ly/d/null-undefined 1083 + * @param {EpisodeAggregateArgs} args - Select which aggregations you would like to apply and on what fields. 1084 + * @example 1085 + * // Ordered by age ascending 1086 + * // Where email contains prisma.io 1087 + * // Limited to the 10 users 1088 + * const aggregations = await prisma.user.aggregate({ 1089 + * _avg: { 1090 + * age: true, 1091 + * }, 1092 + * where: { 1093 + * email: { 1094 + * contains: "prisma.io", 1095 + * }, 1096 + * }, 1097 + * orderBy: { 1098 + * age: "asc", 1099 + * }, 1100 + * take: 10, 1101 + * }) 1102 + **/ 1103 + aggregate<T extends EpisodeAggregateArgs>(args: Prisma.Subset<T, EpisodeAggregateArgs>): Prisma.PrismaPromise<GetEpisodeAggregateType<T>> 1104 + 1105 + /** 1106 + * Group by Episode. 1107 + * Note, that providing `undefined` is treated as the value not being there. 1108 + * Read more here: https://pris.ly/d/null-undefined 1109 + * @param {EpisodeGroupByArgs} args - Group by arguments. 1110 + * @example 1111 + * // Group by city, order by createdAt, get count 1112 + * const result = await prisma.user.groupBy({ 1113 + * by: ['city', 'createdAt'], 1114 + * orderBy: { 1115 + * createdAt: true 1116 + * }, 1117 + * _count: { 1118 + * _all: true 1119 + * }, 1120 + * }) 1121 + * 1122 + **/ 1123 + groupBy< 1124 + T extends EpisodeGroupByArgs, 1125 + HasSelectOrTake extends Prisma.Or< 1126 + Prisma.Extends<'skip', Prisma.Keys<T>>, 1127 + Prisma.Extends<'take', Prisma.Keys<T>> 1128 + >, 1129 + OrderByArg extends Prisma.True extends HasSelectOrTake 1130 + ? { orderBy: EpisodeGroupByArgs['orderBy'] } 1131 + : { orderBy?: EpisodeGroupByArgs['orderBy'] }, 1132 + OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>, 1133 + ByFields extends Prisma.MaybeTupleToUnion<T['by']>, 1134 + ByValid extends Prisma.Has<ByFields, OrderFields>, 1135 + HavingFields extends Prisma.GetHavingFields<T['having']>, 1136 + HavingValid extends Prisma.Has<ByFields, HavingFields>, 1137 + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, 1138 + InputErrors extends ByEmpty extends Prisma.True 1139 + ? `Error: "by" must not be empty.` 1140 + : HavingValid extends Prisma.False 1141 + ? { 1142 + [P in HavingFields]: P extends ByFields 1143 + ? never 1144 + : P extends string 1145 + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` 1146 + : [ 1147 + Error, 1148 + 'Field ', 1149 + P, 1150 + ` in "having" needs to be provided in "by"`, 1151 + ] 1152 + }[HavingFields] 1153 + : 'take' extends Prisma.Keys<T> 1154 + ? 'orderBy' extends Prisma.Keys<T> 1155 + ? ByValid extends Prisma.True 1156 + ? {} 1157 + : { 1158 + [P in OrderFields]: P extends ByFields 1159 + ? never 1160 + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` 1161 + }[OrderFields] 1162 + : 'Error: If you provide "take", you also need to provide "orderBy"' 1163 + : 'skip' extends Prisma.Keys<T> 1164 + ? 'orderBy' extends Prisma.Keys<T> 1165 + ? ByValid extends Prisma.True 1166 + ? {} 1167 + : { 1168 + [P in OrderFields]: P extends ByFields 1169 + ? never 1170 + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` 1171 + }[OrderFields] 1172 + : 'Error: If you provide "skip", you also need to provide "orderBy"' 1173 + : ByValid extends Prisma.True 1174 + ? {} 1175 + : { 1176 + [P in OrderFields]: P extends ByFields 1177 + ? never 1178 + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` 1179 + }[OrderFields] 1180 + >(args: Prisma.SubsetIntersection<T, EpisodeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetEpisodeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors> 1181 + /** 1182 + * Fields of the Episode model 1183 + */ 1184 + readonly fields: EpisodeFieldRefs; 1185 + } 1186 + 1187 + /** 1188 + * The delegate class that acts as a "Promise-like" for Episode. 1189 + * Why is this prefixed with `Prisma__`? 1190 + * Because we want to prevent naming conflicts as mentioned in 1191 + * https://github.com/prisma/prisma-client-js/issues/707 1192 + */ 1193 + export interface Prisma__EpisodeClient<T, Null = never, ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> { 1194 + readonly [Symbol.toStringTag]: "PrismaPromise" 1195 + season<T extends Prisma.SeasonDefaultArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.SeasonDefaultArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> 1196 + /** 1197 + * Attaches callbacks for the resolution and/or rejection of the Promise. 1198 + * @param onfulfilled The callback to execute when the Promise is resolved. 1199 + * @param onrejected The callback to execute when the Promise is rejected. 1200 + * @returns A Promise for the completion of which ever callback is executed. 1201 + */ 1202 + then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): runtime.Types.Utils.JsPromise<TResult1 | TResult2> 1203 + /** 1204 + * Attaches a callback for only the rejection of the Promise. 1205 + * @param onrejected The callback to execute when the Promise is rejected. 1206 + * @returns A Promise for the completion of the callback. 1207 + */ 1208 + catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): runtime.Types.Utils.JsPromise<T | TResult> 1209 + /** 1210 + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The 1211 + * resolved value cannot be modified from the callback. 1212 + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). 1213 + * @returns A Promise for the completion of the callback. 1214 + */ 1215 + finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise<T> 1216 + } 1217 + 1218 + 1219 + 1220 + 1221 + /** 1222 + * Fields of the Episode model 1223 + */ 1224 + export interface EpisodeFieldRefs { 1225 + readonly id: Prisma.FieldRef<"Episode", 'String'> 1226 + readonly tmdbId: Prisma.FieldRef<"Episode", 'Int'> 1227 + readonly seasonId: Prisma.FieldRef<"Episode", 'String'> 1228 + readonly showId: Prisma.FieldRef<"Episode", 'String'> 1229 + readonly episodeNumber: Prisma.FieldRef<"Episode", 'Int'> 1230 + readonly seasonNumber: Prisma.FieldRef<"Episode", 'Int'> 1231 + readonly name: Prisma.FieldRef<"Episode", 'String'> 1232 + readonly airDate: Prisma.FieldRef<"Episode", 'DateTime'> 1233 + readonly overview: Prisma.FieldRef<"Episode", 'String'> 1234 + readonly stillPath: Prisma.FieldRef<"Episode", 'String'> 1235 + readonly createdAt: Prisma.FieldRef<"Episode", 'DateTime'> 1236 + readonly updatedAt: Prisma.FieldRef<"Episode", 'DateTime'> 1237 + } 1238 + 1239 + 1240 + // Custom InputTypes 1241 + /** 1242 + * Episode findUnique 1243 + */ 1244 + export type EpisodeFindUniqueArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1245 + /** 1246 + * Select specific fields to fetch from the Episode 1247 + */ 1248 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1249 + /** 1250 + * Omit specific fields from the Episode 1251 + */ 1252 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1253 + /** 1254 + * Choose, which related nodes to fetch as well 1255 + */ 1256 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1257 + /** 1258 + * Filter, which Episode to fetch. 1259 + */ 1260 + where: Prisma.EpisodeWhereUniqueInput 1261 + } 1262 + 1263 + /** 1264 + * Episode findUniqueOrThrow 1265 + */ 1266 + export type EpisodeFindUniqueOrThrowArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1267 + /** 1268 + * Select specific fields to fetch from the Episode 1269 + */ 1270 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1271 + /** 1272 + * Omit specific fields from the Episode 1273 + */ 1274 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1275 + /** 1276 + * Choose, which related nodes to fetch as well 1277 + */ 1278 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1279 + /** 1280 + * Filter, which Episode to fetch. 1281 + */ 1282 + where: Prisma.EpisodeWhereUniqueInput 1283 + } 1284 + 1285 + /** 1286 + * Episode findFirst 1287 + */ 1288 + export type EpisodeFindFirstArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1289 + /** 1290 + * Select specific fields to fetch from the Episode 1291 + */ 1292 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1293 + /** 1294 + * Omit specific fields from the Episode 1295 + */ 1296 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1297 + /** 1298 + * Choose, which related nodes to fetch as well 1299 + */ 1300 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1301 + /** 1302 + * Filter, which Episode to fetch. 1303 + */ 1304 + where?: Prisma.EpisodeWhereInput 1305 + /** 1306 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 1307 + * 1308 + * Determine the order of Episodes to fetch. 1309 + */ 1310 + orderBy?: Prisma.EpisodeOrderByWithRelationInput | Prisma.EpisodeOrderByWithRelationInput[] 1311 + /** 1312 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 1313 + * 1314 + * Sets the position for searching for Episodes. 1315 + */ 1316 + cursor?: Prisma.EpisodeWhereUniqueInput 1317 + /** 1318 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1319 + * 1320 + * Take `±n` Episodes from the position of the cursor. 1321 + */ 1322 + take?: number 1323 + /** 1324 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1325 + * 1326 + * Skip the first `n` Episodes. 1327 + */ 1328 + skip?: number 1329 + /** 1330 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} 1331 + * 1332 + * Filter by unique combinations of Episodes. 1333 + */ 1334 + distinct?: Prisma.EpisodeScalarFieldEnum | Prisma.EpisodeScalarFieldEnum[] 1335 + } 1336 + 1337 + /** 1338 + * Episode findFirstOrThrow 1339 + */ 1340 + export type EpisodeFindFirstOrThrowArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1341 + /** 1342 + * Select specific fields to fetch from the Episode 1343 + */ 1344 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1345 + /** 1346 + * Omit specific fields from the Episode 1347 + */ 1348 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1349 + /** 1350 + * Choose, which related nodes to fetch as well 1351 + */ 1352 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1353 + /** 1354 + * Filter, which Episode to fetch. 1355 + */ 1356 + where?: Prisma.EpisodeWhereInput 1357 + /** 1358 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 1359 + * 1360 + * Determine the order of Episodes to fetch. 1361 + */ 1362 + orderBy?: Prisma.EpisodeOrderByWithRelationInput | Prisma.EpisodeOrderByWithRelationInput[] 1363 + /** 1364 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 1365 + * 1366 + * Sets the position for searching for Episodes. 1367 + */ 1368 + cursor?: Prisma.EpisodeWhereUniqueInput 1369 + /** 1370 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1371 + * 1372 + * Take `±n` Episodes from the position of the cursor. 1373 + */ 1374 + take?: number 1375 + /** 1376 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1377 + * 1378 + * Skip the first `n` Episodes. 1379 + */ 1380 + skip?: number 1381 + /** 1382 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} 1383 + * 1384 + * Filter by unique combinations of Episodes. 1385 + */ 1386 + distinct?: Prisma.EpisodeScalarFieldEnum | Prisma.EpisodeScalarFieldEnum[] 1387 + } 1388 + 1389 + /** 1390 + * Episode findMany 1391 + */ 1392 + export type EpisodeFindManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1393 + /** 1394 + * Select specific fields to fetch from the Episode 1395 + */ 1396 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1397 + /** 1398 + * Omit specific fields from the Episode 1399 + */ 1400 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1401 + /** 1402 + * Choose, which related nodes to fetch as well 1403 + */ 1404 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1405 + /** 1406 + * Filter, which Episodes to fetch. 1407 + */ 1408 + where?: Prisma.EpisodeWhereInput 1409 + /** 1410 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 1411 + * 1412 + * Determine the order of Episodes to fetch. 1413 + */ 1414 + orderBy?: Prisma.EpisodeOrderByWithRelationInput | Prisma.EpisodeOrderByWithRelationInput[] 1415 + /** 1416 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 1417 + * 1418 + * Sets the position for listing Episodes. 1419 + */ 1420 + cursor?: Prisma.EpisodeWhereUniqueInput 1421 + /** 1422 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1423 + * 1424 + * Take `±n` Episodes from the position of the cursor. 1425 + */ 1426 + take?: number 1427 + /** 1428 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1429 + * 1430 + * Skip the first `n` Episodes. 1431 + */ 1432 + skip?: number 1433 + distinct?: Prisma.EpisodeScalarFieldEnum | Prisma.EpisodeScalarFieldEnum[] 1434 + } 1435 + 1436 + /** 1437 + * Episode create 1438 + */ 1439 + export type EpisodeCreateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1440 + /** 1441 + * Select specific fields to fetch from the Episode 1442 + */ 1443 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1444 + /** 1445 + * Omit specific fields from the Episode 1446 + */ 1447 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1448 + /** 1449 + * Choose, which related nodes to fetch as well 1450 + */ 1451 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1452 + /** 1453 + * The data needed to create a Episode. 1454 + */ 1455 + data: Prisma.XOR<Prisma.EpisodeCreateInput, Prisma.EpisodeUncheckedCreateInput> 1456 + } 1457 + 1458 + /** 1459 + * Episode createMany 1460 + */ 1461 + export type EpisodeCreateManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1462 + /** 1463 + * The data used to create many Episodes. 1464 + */ 1465 + data: Prisma.EpisodeCreateManyInput | Prisma.EpisodeCreateManyInput[] 1466 + skipDuplicates?: boolean 1467 + } 1468 + 1469 + /** 1470 + * Episode createManyAndReturn 1471 + */ 1472 + export type EpisodeCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1473 + /** 1474 + * Select specific fields to fetch from the Episode 1475 + */ 1476 + select?: Prisma.EpisodeSelectCreateManyAndReturn<ExtArgs> | null 1477 + /** 1478 + * Omit specific fields from the Episode 1479 + */ 1480 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1481 + /** 1482 + * The data used to create many Episodes. 1483 + */ 1484 + data: Prisma.EpisodeCreateManyInput | Prisma.EpisodeCreateManyInput[] 1485 + skipDuplicates?: boolean 1486 + /** 1487 + * Choose, which related nodes to fetch as well 1488 + */ 1489 + include?: Prisma.EpisodeIncludeCreateManyAndReturn<ExtArgs> | null 1490 + } 1491 + 1492 + /** 1493 + * Episode update 1494 + */ 1495 + export type EpisodeUpdateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1496 + /** 1497 + * Select specific fields to fetch from the Episode 1498 + */ 1499 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1500 + /** 1501 + * Omit specific fields from the Episode 1502 + */ 1503 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1504 + /** 1505 + * Choose, which related nodes to fetch as well 1506 + */ 1507 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1508 + /** 1509 + * The data needed to update a Episode. 1510 + */ 1511 + data: Prisma.XOR<Prisma.EpisodeUpdateInput, Prisma.EpisodeUncheckedUpdateInput> 1512 + /** 1513 + * Choose, which Episode to update. 1514 + */ 1515 + where: Prisma.EpisodeWhereUniqueInput 1516 + } 1517 + 1518 + /** 1519 + * Episode updateMany 1520 + */ 1521 + export type EpisodeUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1522 + /** 1523 + * The data used to update Episodes. 1524 + */ 1525 + data: Prisma.XOR<Prisma.EpisodeUpdateManyMutationInput, Prisma.EpisodeUncheckedUpdateManyInput> 1526 + /** 1527 + * Filter which Episodes to update 1528 + */ 1529 + where?: Prisma.EpisodeWhereInput 1530 + /** 1531 + * Limit how many Episodes to update. 1532 + */ 1533 + limit?: number 1534 + } 1535 + 1536 + /** 1537 + * Episode updateManyAndReturn 1538 + */ 1539 + export type EpisodeUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1540 + /** 1541 + * Select specific fields to fetch from the Episode 1542 + */ 1543 + select?: Prisma.EpisodeSelectUpdateManyAndReturn<ExtArgs> | null 1544 + /** 1545 + * Omit specific fields from the Episode 1546 + */ 1547 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1548 + /** 1549 + * The data used to update Episodes. 1550 + */ 1551 + data: Prisma.XOR<Prisma.EpisodeUpdateManyMutationInput, Prisma.EpisodeUncheckedUpdateManyInput> 1552 + /** 1553 + * Filter which Episodes to update 1554 + */ 1555 + where?: Prisma.EpisodeWhereInput 1556 + /** 1557 + * Limit how many Episodes to update. 1558 + */ 1559 + limit?: number 1560 + /** 1561 + * Choose, which related nodes to fetch as well 1562 + */ 1563 + include?: Prisma.EpisodeIncludeUpdateManyAndReturn<ExtArgs> | null 1564 + } 1565 + 1566 + /** 1567 + * Episode upsert 1568 + */ 1569 + export type EpisodeUpsertArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1570 + /** 1571 + * Select specific fields to fetch from the Episode 1572 + */ 1573 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1574 + /** 1575 + * Omit specific fields from the Episode 1576 + */ 1577 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1578 + /** 1579 + * Choose, which related nodes to fetch as well 1580 + */ 1581 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1582 + /** 1583 + * The filter to search for the Episode to update in case it exists. 1584 + */ 1585 + where: Prisma.EpisodeWhereUniqueInput 1586 + /** 1587 + * In case the Episode found by the `where` argument doesn't exist, create a new Episode with this data. 1588 + */ 1589 + create: Prisma.XOR<Prisma.EpisodeCreateInput, Prisma.EpisodeUncheckedCreateInput> 1590 + /** 1591 + * In case the Episode was found with the provided `where` argument, update it with this data. 1592 + */ 1593 + update: Prisma.XOR<Prisma.EpisodeUpdateInput, Prisma.EpisodeUncheckedUpdateInput> 1594 + } 1595 + 1596 + /** 1597 + * Episode delete 1598 + */ 1599 + export type EpisodeDeleteArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1600 + /** 1601 + * Select specific fields to fetch from the Episode 1602 + */ 1603 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1604 + /** 1605 + * Omit specific fields from the Episode 1606 + */ 1607 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1608 + /** 1609 + * Choose, which related nodes to fetch as well 1610 + */ 1611 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1612 + /** 1613 + * Filter which Episode to delete. 1614 + */ 1615 + where: Prisma.EpisodeWhereUniqueInput 1616 + } 1617 + 1618 + /** 1619 + * Episode deleteMany 1620 + */ 1621 + export type EpisodeDeleteManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1622 + /** 1623 + * Filter which Episodes to delete 1624 + */ 1625 + where?: Prisma.EpisodeWhereInput 1626 + /** 1627 + * Limit how many Episodes to delete. 1628 + */ 1629 + limit?: number 1630 + } 1631 + 1632 + /** 1633 + * Episode without action 1634 + */ 1635 + export type EpisodeDefaultArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1636 + /** 1637 + * Select specific fields to fetch from the Episode 1638 + */ 1639 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1640 + /** 1641 + * Omit specific fields from the Episode 1642 + */ 1643 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1644 + /** 1645 + * Choose, which related nodes to fetch as well 1646 + */ 1647 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1648 + }
+1734
backend/src/generated/models/Season.ts
··· 1 + 2 + /* !!! This is code generated by Prisma. Do not edit directly. !!! */ 3 + /* eslint-disable */ 4 + // biome-ignore-all lint: generated file 5 + // @ts-nocheck 6 + /* 7 + * This file exports the `Season` model and its related types. 8 + * 9 + * 🟢 You can import this file directly. 10 + */ 11 + import type * as runtime from "@prisma/client/runtime/client" 12 + import type * as $Enums from "../enums.js" 13 + import type * as Prisma from "../internal/prismaNamespace.js" 14 + 15 + /** 16 + * Model Season 17 + * 18 + */ 19 + export type SeasonModel = runtime.Types.Result.DefaultSelection<Prisma.$SeasonPayload> 20 + 21 + export type AggregateSeason = { 22 + _count: SeasonCountAggregateOutputType | null 23 + _avg: SeasonAvgAggregateOutputType | null 24 + _sum: SeasonSumAggregateOutputType | null 25 + _min: SeasonMinAggregateOutputType | null 26 + _max: SeasonMaxAggregateOutputType | null 27 + } 28 + 29 + export type SeasonAvgAggregateOutputType = { 30 + tmdbId: number | null 31 + seasonNumber: number | null 32 + episodeCount: number | null 33 + } 34 + 35 + export type SeasonSumAggregateOutputType = { 36 + tmdbId: number | null 37 + seasonNumber: number | null 38 + episodeCount: number | null 39 + } 40 + 41 + export type SeasonMinAggregateOutputType = { 42 + id: string | null 43 + tmdbId: number | null 44 + showId: string | null 45 + seasonNumber: number | null 46 + name: string | null 47 + posterPath: string | null 48 + airDate: Date | null 49 + episodeCount: number | null 50 + createdAt: Date | null 51 + updatedAt: Date | null 52 + } 53 + 54 + export type SeasonMaxAggregateOutputType = { 55 + id: string | null 56 + tmdbId: number | null 57 + showId: string | null 58 + seasonNumber: number | null 59 + name: string | null 60 + posterPath: string | null 61 + airDate: Date | null 62 + episodeCount: number | null 63 + createdAt: Date | null 64 + updatedAt: Date | null 65 + } 66 + 67 + export type SeasonCountAggregateOutputType = { 68 + id: number 69 + tmdbId: number 70 + showId: number 71 + seasonNumber: number 72 + name: number 73 + posterPath: number 74 + airDate: number 75 + episodeCount: number 76 + createdAt: number 77 + updatedAt: number 78 + _all: number 79 + } 80 + 81 + 82 + export type SeasonAvgAggregateInputType = { 83 + tmdbId?: true 84 + seasonNumber?: true 85 + episodeCount?: true 86 + } 87 + 88 + export type SeasonSumAggregateInputType = { 89 + tmdbId?: true 90 + seasonNumber?: true 91 + episodeCount?: true 92 + } 93 + 94 + export type SeasonMinAggregateInputType = { 95 + id?: true 96 + tmdbId?: true 97 + showId?: true 98 + seasonNumber?: true 99 + name?: true 100 + posterPath?: true 101 + airDate?: true 102 + episodeCount?: true 103 + createdAt?: true 104 + updatedAt?: true 105 + } 106 + 107 + export type SeasonMaxAggregateInputType = { 108 + id?: true 109 + tmdbId?: true 110 + showId?: true 111 + seasonNumber?: true 112 + name?: true 113 + posterPath?: true 114 + airDate?: true 115 + episodeCount?: true 116 + createdAt?: true 117 + updatedAt?: true 118 + } 119 + 120 + export type SeasonCountAggregateInputType = { 121 + id?: true 122 + tmdbId?: true 123 + showId?: true 124 + seasonNumber?: true 125 + name?: true 126 + posterPath?: true 127 + airDate?: true 128 + episodeCount?: true 129 + createdAt?: true 130 + updatedAt?: true 131 + _all?: true 132 + } 133 + 134 + export type SeasonAggregateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 135 + /** 136 + * Filter which Season to aggregate. 137 + */ 138 + where?: Prisma.SeasonWhereInput 139 + /** 140 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 141 + * 142 + * Determine the order of Seasons to fetch. 143 + */ 144 + orderBy?: Prisma.SeasonOrderByWithRelationInput | Prisma.SeasonOrderByWithRelationInput[] 145 + /** 146 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 147 + * 148 + * Sets the start position 149 + */ 150 + cursor?: Prisma.SeasonWhereUniqueInput 151 + /** 152 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 153 + * 154 + * Take `±n` Seasons from the position of the cursor. 155 + */ 156 + take?: number 157 + /** 158 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 159 + * 160 + * Skip the first `n` Seasons. 161 + */ 162 + skip?: number 163 + /** 164 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 165 + * 166 + * Count returned Seasons 167 + **/ 168 + _count?: true | SeasonCountAggregateInputType 169 + /** 170 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 171 + * 172 + * Select which fields to average 173 + **/ 174 + _avg?: SeasonAvgAggregateInputType 175 + /** 176 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 177 + * 178 + * Select which fields to sum 179 + **/ 180 + _sum?: SeasonSumAggregateInputType 181 + /** 182 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 183 + * 184 + * Select which fields to find the minimum value 185 + **/ 186 + _min?: SeasonMinAggregateInputType 187 + /** 188 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} 189 + * 190 + * Select which fields to find the maximum value 191 + **/ 192 + _max?: SeasonMaxAggregateInputType 193 + } 194 + 195 + export type GetSeasonAggregateType<T extends SeasonAggregateArgs> = { 196 + [P in keyof T & keyof AggregateSeason]: P extends '_count' | 'count' 197 + ? T[P] extends true 198 + ? number 199 + : Prisma.GetScalarType<T[P], AggregateSeason[P]> 200 + : Prisma.GetScalarType<T[P], AggregateSeason[P]> 201 + } 202 + 203 + 204 + 205 + 206 + export type SeasonGroupByArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 207 + where?: Prisma.SeasonWhereInput 208 + orderBy?: Prisma.SeasonOrderByWithAggregationInput | Prisma.SeasonOrderByWithAggregationInput[] 209 + by: Prisma.SeasonScalarFieldEnum[] | Prisma.SeasonScalarFieldEnum 210 + having?: Prisma.SeasonScalarWhereWithAggregatesInput 211 + take?: number 212 + skip?: number 213 + _count?: SeasonCountAggregateInputType | true 214 + _avg?: SeasonAvgAggregateInputType 215 + _sum?: SeasonSumAggregateInputType 216 + _min?: SeasonMinAggregateInputType 217 + _max?: SeasonMaxAggregateInputType 218 + } 219 + 220 + export type SeasonGroupByOutputType = { 221 + id: string 222 + tmdbId: number 223 + showId: string 224 + seasonNumber: number 225 + name: string 226 + posterPath: string | null 227 + airDate: Date | null 228 + episodeCount: number | null 229 + createdAt: Date 230 + updatedAt: Date 231 + _count: SeasonCountAggregateOutputType | null 232 + _avg: SeasonAvgAggregateOutputType | null 233 + _sum: SeasonSumAggregateOutputType | null 234 + _min: SeasonMinAggregateOutputType | null 235 + _max: SeasonMaxAggregateOutputType | null 236 + } 237 + 238 + type GetSeasonGroupByPayload<T extends SeasonGroupByArgs> = Prisma.PrismaPromise< 239 + Array< 240 + Prisma.PickEnumerable<SeasonGroupByOutputType, T['by']> & 241 + { 242 + [P in ((keyof T) & (keyof SeasonGroupByOutputType))]: P extends '_count' 243 + ? T[P] extends boolean 244 + ? number 245 + : Prisma.GetScalarType<T[P], SeasonGroupByOutputType[P]> 246 + : Prisma.GetScalarType<T[P], SeasonGroupByOutputType[P]> 247 + } 248 + > 249 + > 250 + 251 + 252 + 253 + export type SeasonWhereInput = { 254 + AND?: Prisma.SeasonWhereInput | Prisma.SeasonWhereInput[] 255 + OR?: Prisma.SeasonWhereInput[] 256 + NOT?: Prisma.SeasonWhereInput | Prisma.SeasonWhereInput[] 257 + id?: Prisma.StringFilter<"Season"> | string 258 + tmdbId?: Prisma.IntFilter<"Season"> | number 259 + showId?: Prisma.StringFilter<"Season"> | string 260 + seasonNumber?: Prisma.IntFilter<"Season"> | number 261 + name?: Prisma.StringFilter<"Season"> | string 262 + posterPath?: Prisma.StringNullableFilter<"Season"> | string | null 263 + airDate?: Prisma.DateTimeNullableFilter<"Season"> | Date | string | null 264 + episodeCount?: Prisma.IntNullableFilter<"Season"> | number | null 265 + createdAt?: Prisma.DateTimeFilter<"Season"> | Date | string 266 + updatedAt?: Prisma.DateTimeFilter<"Season"> | Date | string 267 + show?: Prisma.XOR<Prisma.ShowScalarRelationFilter, Prisma.ShowWhereInput> 268 + episodes?: Prisma.EpisodeListRelationFilter 269 + } 270 + 271 + export type SeasonOrderByWithRelationInput = { 272 + id?: Prisma.SortOrder 273 + tmdbId?: Prisma.SortOrder 274 + showId?: Prisma.SortOrder 275 + seasonNumber?: Prisma.SortOrder 276 + name?: Prisma.SortOrder 277 + posterPath?: Prisma.SortOrderInput | Prisma.SortOrder 278 + airDate?: Prisma.SortOrderInput | Prisma.SortOrder 279 + episodeCount?: Prisma.SortOrderInput | Prisma.SortOrder 280 + createdAt?: Prisma.SortOrder 281 + updatedAt?: Prisma.SortOrder 282 + show?: Prisma.ShowOrderByWithRelationInput 283 + episodes?: Prisma.EpisodeOrderByRelationAggregateInput 284 + } 285 + 286 + export type SeasonWhereUniqueInput = Prisma.AtLeast<{ 287 + id?: string 288 + tmdbId?: number 289 + showId_seasonNumber?: Prisma.SeasonShowIdSeasonNumberCompoundUniqueInput 290 + AND?: Prisma.SeasonWhereInput | Prisma.SeasonWhereInput[] 291 + OR?: Prisma.SeasonWhereInput[] 292 + NOT?: Prisma.SeasonWhereInput | Prisma.SeasonWhereInput[] 293 + showId?: Prisma.StringFilter<"Season"> | string 294 + seasonNumber?: Prisma.IntFilter<"Season"> | number 295 + name?: Prisma.StringFilter<"Season"> | string 296 + posterPath?: Prisma.StringNullableFilter<"Season"> | string | null 297 + airDate?: Prisma.DateTimeNullableFilter<"Season"> | Date | string | null 298 + episodeCount?: Prisma.IntNullableFilter<"Season"> | number | null 299 + createdAt?: Prisma.DateTimeFilter<"Season"> | Date | string 300 + updatedAt?: Prisma.DateTimeFilter<"Season"> | Date | string 301 + show?: Prisma.XOR<Prisma.ShowScalarRelationFilter, Prisma.ShowWhereInput> 302 + episodes?: Prisma.EpisodeListRelationFilter 303 + }, "id" | "tmdbId" | "showId_seasonNumber"> 304 + 305 + export type SeasonOrderByWithAggregationInput = { 306 + id?: Prisma.SortOrder 307 + tmdbId?: Prisma.SortOrder 308 + showId?: Prisma.SortOrder 309 + seasonNumber?: Prisma.SortOrder 310 + name?: Prisma.SortOrder 311 + posterPath?: Prisma.SortOrderInput | Prisma.SortOrder 312 + airDate?: Prisma.SortOrderInput | Prisma.SortOrder 313 + episodeCount?: Prisma.SortOrderInput | Prisma.SortOrder 314 + createdAt?: Prisma.SortOrder 315 + updatedAt?: Prisma.SortOrder 316 + _count?: Prisma.SeasonCountOrderByAggregateInput 317 + _avg?: Prisma.SeasonAvgOrderByAggregateInput 318 + _max?: Prisma.SeasonMaxOrderByAggregateInput 319 + _min?: Prisma.SeasonMinOrderByAggregateInput 320 + _sum?: Prisma.SeasonSumOrderByAggregateInput 321 + } 322 + 323 + export type SeasonScalarWhereWithAggregatesInput = { 324 + AND?: Prisma.SeasonScalarWhereWithAggregatesInput | Prisma.SeasonScalarWhereWithAggregatesInput[] 325 + OR?: Prisma.SeasonScalarWhereWithAggregatesInput[] 326 + NOT?: Prisma.SeasonScalarWhereWithAggregatesInput | Prisma.SeasonScalarWhereWithAggregatesInput[] 327 + id?: Prisma.StringWithAggregatesFilter<"Season"> | string 328 + tmdbId?: Prisma.IntWithAggregatesFilter<"Season"> | number 329 + showId?: Prisma.StringWithAggregatesFilter<"Season"> | string 330 + seasonNumber?: Prisma.IntWithAggregatesFilter<"Season"> | number 331 + name?: Prisma.StringWithAggregatesFilter<"Season"> | string 332 + posterPath?: Prisma.StringNullableWithAggregatesFilter<"Season"> | string | null 333 + airDate?: Prisma.DateTimeNullableWithAggregatesFilter<"Season"> | Date | string | null 334 + episodeCount?: Prisma.IntNullableWithAggregatesFilter<"Season"> | number | null 335 + createdAt?: Prisma.DateTimeWithAggregatesFilter<"Season"> | Date | string 336 + updatedAt?: Prisma.DateTimeWithAggregatesFilter<"Season"> | Date | string 337 + } 338 + 339 + export type SeasonCreateInput = { 340 + id?: string 341 + tmdbId: number 342 + seasonNumber: number 343 + name: string 344 + posterPath?: string | null 345 + airDate?: Date | string | null 346 + episodeCount?: number | null 347 + createdAt?: Date | string 348 + updatedAt?: Date | string 349 + show: Prisma.ShowCreateNestedOneWithoutSeasonsInput 350 + episodes?: Prisma.EpisodeCreateNestedManyWithoutSeasonInput 351 + } 352 + 353 + export type SeasonUncheckedCreateInput = { 354 + id?: string 355 + tmdbId: number 356 + showId: string 357 + seasonNumber: number 358 + name: string 359 + posterPath?: string | null 360 + airDate?: Date | string | null 361 + episodeCount?: number | null 362 + createdAt?: Date | string 363 + updatedAt?: Date | string 364 + episodes?: Prisma.EpisodeUncheckedCreateNestedManyWithoutSeasonInput 365 + } 366 + 367 + export type SeasonUpdateInput = { 368 + id?: Prisma.StringFieldUpdateOperationsInput | string 369 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 370 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 371 + name?: Prisma.StringFieldUpdateOperationsInput | string 372 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 373 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 374 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 375 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 376 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 377 + show?: Prisma.ShowUpdateOneRequiredWithoutSeasonsNestedInput 378 + episodes?: Prisma.EpisodeUpdateManyWithoutSeasonNestedInput 379 + } 380 + 381 + export type SeasonUncheckedUpdateInput = { 382 + id?: Prisma.StringFieldUpdateOperationsInput | string 383 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 384 + showId?: Prisma.StringFieldUpdateOperationsInput | string 385 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 386 + name?: Prisma.StringFieldUpdateOperationsInput | string 387 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 388 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 389 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 390 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 391 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 392 + episodes?: Prisma.EpisodeUncheckedUpdateManyWithoutSeasonNestedInput 393 + } 394 + 395 + export type SeasonCreateManyInput = { 396 + id?: string 397 + tmdbId: number 398 + showId: string 399 + seasonNumber: number 400 + name: string 401 + posterPath?: string | null 402 + airDate?: Date | string | null 403 + episodeCount?: number | null 404 + createdAt?: Date | string 405 + updatedAt?: Date | string 406 + } 407 + 408 + export type SeasonUpdateManyMutationInput = { 409 + id?: Prisma.StringFieldUpdateOperationsInput | string 410 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 411 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 412 + name?: Prisma.StringFieldUpdateOperationsInput | string 413 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 414 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 415 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 416 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 417 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 418 + } 419 + 420 + export type SeasonUncheckedUpdateManyInput = { 421 + id?: Prisma.StringFieldUpdateOperationsInput | string 422 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 423 + showId?: Prisma.StringFieldUpdateOperationsInput | string 424 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 425 + name?: Prisma.StringFieldUpdateOperationsInput | string 426 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 427 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 428 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 429 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 430 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 431 + } 432 + 433 + export type SeasonListRelationFilter = { 434 + every?: Prisma.SeasonWhereInput 435 + some?: Prisma.SeasonWhereInput 436 + none?: Prisma.SeasonWhereInput 437 + } 438 + 439 + export type SeasonOrderByRelationAggregateInput = { 440 + _count?: Prisma.SortOrder 441 + } 442 + 443 + export type SeasonShowIdSeasonNumberCompoundUniqueInput = { 444 + showId: string 445 + seasonNumber: number 446 + } 447 + 448 + export type SeasonCountOrderByAggregateInput = { 449 + id?: Prisma.SortOrder 450 + tmdbId?: Prisma.SortOrder 451 + showId?: Prisma.SortOrder 452 + seasonNumber?: Prisma.SortOrder 453 + name?: Prisma.SortOrder 454 + posterPath?: Prisma.SortOrder 455 + airDate?: Prisma.SortOrder 456 + episodeCount?: Prisma.SortOrder 457 + createdAt?: Prisma.SortOrder 458 + updatedAt?: Prisma.SortOrder 459 + } 460 + 461 + export type SeasonAvgOrderByAggregateInput = { 462 + tmdbId?: Prisma.SortOrder 463 + seasonNumber?: Prisma.SortOrder 464 + episodeCount?: Prisma.SortOrder 465 + } 466 + 467 + export type SeasonMaxOrderByAggregateInput = { 468 + id?: Prisma.SortOrder 469 + tmdbId?: Prisma.SortOrder 470 + showId?: Prisma.SortOrder 471 + seasonNumber?: Prisma.SortOrder 472 + name?: Prisma.SortOrder 473 + posterPath?: Prisma.SortOrder 474 + airDate?: Prisma.SortOrder 475 + episodeCount?: Prisma.SortOrder 476 + createdAt?: Prisma.SortOrder 477 + updatedAt?: Prisma.SortOrder 478 + } 479 + 480 + export type SeasonMinOrderByAggregateInput = { 481 + id?: Prisma.SortOrder 482 + tmdbId?: Prisma.SortOrder 483 + showId?: Prisma.SortOrder 484 + seasonNumber?: Prisma.SortOrder 485 + name?: Prisma.SortOrder 486 + posterPath?: Prisma.SortOrder 487 + airDate?: Prisma.SortOrder 488 + episodeCount?: Prisma.SortOrder 489 + createdAt?: Prisma.SortOrder 490 + updatedAt?: Prisma.SortOrder 491 + } 492 + 493 + export type SeasonSumOrderByAggregateInput = { 494 + tmdbId?: Prisma.SortOrder 495 + seasonNumber?: Prisma.SortOrder 496 + episodeCount?: Prisma.SortOrder 497 + } 498 + 499 + export type SeasonScalarRelationFilter = { 500 + is?: Prisma.SeasonWhereInput 501 + isNot?: Prisma.SeasonWhereInput 502 + } 503 + 504 + export type SeasonCreateNestedManyWithoutShowInput = { 505 + create?: Prisma.XOR<Prisma.SeasonCreateWithoutShowInput, Prisma.SeasonUncheckedCreateWithoutShowInput> | Prisma.SeasonCreateWithoutShowInput[] | Prisma.SeasonUncheckedCreateWithoutShowInput[] 506 + connectOrCreate?: Prisma.SeasonCreateOrConnectWithoutShowInput | Prisma.SeasonCreateOrConnectWithoutShowInput[] 507 + createMany?: Prisma.SeasonCreateManyShowInputEnvelope 508 + connect?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 509 + } 510 + 511 + export type SeasonUncheckedCreateNestedManyWithoutShowInput = { 512 + create?: Prisma.XOR<Prisma.SeasonCreateWithoutShowInput, Prisma.SeasonUncheckedCreateWithoutShowInput> | Prisma.SeasonCreateWithoutShowInput[] | Prisma.SeasonUncheckedCreateWithoutShowInput[] 513 + connectOrCreate?: Prisma.SeasonCreateOrConnectWithoutShowInput | Prisma.SeasonCreateOrConnectWithoutShowInput[] 514 + createMany?: Prisma.SeasonCreateManyShowInputEnvelope 515 + connect?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 516 + } 517 + 518 + export type SeasonUpdateManyWithoutShowNestedInput = { 519 + create?: Prisma.XOR<Prisma.SeasonCreateWithoutShowInput, Prisma.SeasonUncheckedCreateWithoutShowInput> | Prisma.SeasonCreateWithoutShowInput[] | Prisma.SeasonUncheckedCreateWithoutShowInput[] 520 + connectOrCreate?: Prisma.SeasonCreateOrConnectWithoutShowInput | Prisma.SeasonCreateOrConnectWithoutShowInput[] 521 + upsert?: Prisma.SeasonUpsertWithWhereUniqueWithoutShowInput | Prisma.SeasonUpsertWithWhereUniqueWithoutShowInput[] 522 + createMany?: Prisma.SeasonCreateManyShowInputEnvelope 523 + set?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 524 + disconnect?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 525 + delete?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 526 + connect?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 527 + update?: Prisma.SeasonUpdateWithWhereUniqueWithoutShowInput | Prisma.SeasonUpdateWithWhereUniqueWithoutShowInput[] 528 + updateMany?: Prisma.SeasonUpdateManyWithWhereWithoutShowInput | Prisma.SeasonUpdateManyWithWhereWithoutShowInput[] 529 + deleteMany?: Prisma.SeasonScalarWhereInput | Prisma.SeasonScalarWhereInput[] 530 + } 531 + 532 + export type SeasonUncheckedUpdateManyWithoutShowNestedInput = { 533 + create?: Prisma.XOR<Prisma.SeasonCreateWithoutShowInput, Prisma.SeasonUncheckedCreateWithoutShowInput> | Prisma.SeasonCreateWithoutShowInput[] | Prisma.SeasonUncheckedCreateWithoutShowInput[] 534 + connectOrCreate?: Prisma.SeasonCreateOrConnectWithoutShowInput | Prisma.SeasonCreateOrConnectWithoutShowInput[] 535 + upsert?: Prisma.SeasonUpsertWithWhereUniqueWithoutShowInput | Prisma.SeasonUpsertWithWhereUniqueWithoutShowInput[] 536 + createMany?: Prisma.SeasonCreateManyShowInputEnvelope 537 + set?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 538 + disconnect?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 539 + delete?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 540 + connect?: Prisma.SeasonWhereUniqueInput | Prisma.SeasonWhereUniqueInput[] 541 + update?: Prisma.SeasonUpdateWithWhereUniqueWithoutShowInput | Prisma.SeasonUpdateWithWhereUniqueWithoutShowInput[] 542 + updateMany?: Prisma.SeasonUpdateManyWithWhereWithoutShowInput | Prisma.SeasonUpdateManyWithWhereWithoutShowInput[] 543 + deleteMany?: Prisma.SeasonScalarWhereInput | Prisma.SeasonScalarWhereInput[] 544 + } 545 + 546 + export type SeasonCreateNestedOneWithoutEpisodesInput = { 547 + create?: Prisma.XOR<Prisma.SeasonCreateWithoutEpisodesInput, Prisma.SeasonUncheckedCreateWithoutEpisodesInput> 548 + connectOrCreate?: Prisma.SeasonCreateOrConnectWithoutEpisodesInput 549 + connect?: Prisma.SeasonWhereUniqueInput 550 + } 551 + 552 + export type SeasonUpdateOneRequiredWithoutEpisodesNestedInput = { 553 + create?: Prisma.XOR<Prisma.SeasonCreateWithoutEpisodesInput, Prisma.SeasonUncheckedCreateWithoutEpisodesInput> 554 + connectOrCreate?: Prisma.SeasonCreateOrConnectWithoutEpisodesInput 555 + upsert?: Prisma.SeasonUpsertWithoutEpisodesInput 556 + connect?: Prisma.SeasonWhereUniqueInput 557 + update?: Prisma.XOR<Prisma.XOR<Prisma.SeasonUpdateToOneWithWhereWithoutEpisodesInput, Prisma.SeasonUpdateWithoutEpisodesInput>, Prisma.SeasonUncheckedUpdateWithoutEpisodesInput> 558 + } 559 + 560 + export type SeasonCreateWithoutShowInput = { 561 + id?: string 562 + tmdbId: number 563 + seasonNumber: number 564 + name: string 565 + posterPath?: string | null 566 + airDate?: Date | string | null 567 + episodeCount?: number | null 568 + createdAt?: Date | string 569 + updatedAt?: Date | string 570 + episodes?: Prisma.EpisodeCreateNestedManyWithoutSeasonInput 571 + } 572 + 573 + export type SeasonUncheckedCreateWithoutShowInput = { 574 + id?: string 575 + tmdbId: number 576 + seasonNumber: number 577 + name: string 578 + posterPath?: string | null 579 + airDate?: Date | string | null 580 + episodeCount?: number | null 581 + createdAt?: Date | string 582 + updatedAt?: Date | string 583 + episodes?: Prisma.EpisodeUncheckedCreateNestedManyWithoutSeasonInput 584 + } 585 + 586 + export type SeasonCreateOrConnectWithoutShowInput = { 587 + where: Prisma.SeasonWhereUniqueInput 588 + create: Prisma.XOR<Prisma.SeasonCreateWithoutShowInput, Prisma.SeasonUncheckedCreateWithoutShowInput> 589 + } 590 + 591 + export type SeasonCreateManyShowInputEnvelope = { 592 + data: Prisma.SeasonCreateManyShowInput | Prisma.SeasonCreateManyShowInput[] 593 + skipDuplicates?: boolean 594 + } 595 + 596 + export type SeasonUpsertWithWhereUniqueWithoutShowInput = { 597 + where: Prisma.SeasonWhereUniqueInput 598 + update: Prisma.XOR<Prisma.SeasonUpdateWithoutShowInput, Prisma.SeasonUncheckedUpdateWithoutShowInput> 599 + create: Prisma.XOR<Prisma.SeasonCreateWithoutShowInput, Prisma.SeasonUncheckedCreateWithoutShowInput> 600 + } 601 + 602 + export type SeasonUpdateWithWhereUniqueWithoutShowInput = { 603 + where: Prisma.SeasonWhereUniqueInput 604 + data: Prisma.XOR<Prisma.SeasonUpdateWithoutShowInput, Prisma.SeasonUncheckedUpdateWithoutShowInput> 605 + } 606 + 607 + export type SeasonUpdateManyWithWhereWithoutShowInput = { 608 + where: Prisma.SeasonScalarWhereInput 609 + data: Prisma.XOR<Prisma.SeasonUpdateManyMutationInput, Prisma.SeasonUncheckedUpdateManyWithoutShowInput> 610 + } 611 + 612 + export type SeasonScalarWhereInput = { 613 + AND?: Prisma.SeasonScalarWhereInput | Prisma.SeasonScalarWhereInput[] 614 + OR?: Prisma.SeasonScalarWhereInput[] 615 + NOT?: Prisma.SeasonScalarWhereInput | Prisma.SeasonScalarWhereInput[] 616 + id?: Prisma.StringFilter<"Season"> | string 617 + tmdbId?: Prisma.IntFilter<"Season"> | number 618 + showId?: Prisma.StringFilter<"Season"> | string 619 + seasonNumber?: Prisma.IntFilter<"Season"> | number 620 + name?: Prisma.StringFilter<"Season"> | string 621 + posterPath?: Prisma.StringNullableFilter<"Season"> | string | null 622 + airDate?: Prisma.DateTimeNullableFilter<"Season"> | Date | string | null 623 + episodeCount?: Prisma.IntNullableFilter<"Season"> | number | null 624 + createdAt?: Prisma.DateTimeFilter<"Season"> | Date | string 625 + updatedAt?: Prisma.DateTimeFilter<"Season"> | Date | string 626 + } 627 + 628 + export type SeasonCreateWithoutEpisodesInput = { 629 + id?: string 630 + tmdbId: number 631 + seasonNumber: number 632 + name: string 633 + posterPath?: string | null 634 + airDate?: Date | string | null 635 + episodeCount?: number | null 636 + createdAt?: Date | string 637 + updatedAt?: Date | string 638 + show: Prisma.ShowCreateNestedOneWithoutSeasonsInput 639 + } 640 + 641 + export type SeasonUncheckedCreateWithoutEpisodesInput = { 642 + id?: string 643 + tmdbId: number 644 + showId: string 645 + seasonNumber: number 646 + name: string 647 + posterPath?: string | null 648 + airDate?: Date | string | null 649 + episodeCount?: number | null 650 + createdAt?: Date | string 651 + updatedAt?: Date | string 652 + } 653 + 654 + export type SeasonCreateOrConnectWithoutEpisodesInput = { 655 + where: Prisma.SeasonWhereUniqueInput 656 + create: Prisma.XOR<Prisma.SeasonCreateWithoutEpisodesInput, Prisma.SeasonUncheckedCreateWithoutEpisodesInput> 657 + } 658 + 659 + export type SeasonUpsertWithoutEpisodesInput = { 660 + update: Prisma.XOR<Prisma.SeasonUpdateWithoutEpisodesInput, Prisma.SeasonUncheckedUpdateWithoutEpisodesInput> 661 + create: Prisma.XOR<Prisma.SeasonCreateWithoutEpisodesInput, Prisma.SeasonUncheckedCreateWithoutEpisodesInput> 662 + where?: Prisma.SeasonWhereInput 663 + } 664 + 665 + export type SeasonUpdateToOneWithWhereWithoutEpisodesInput = { 666 + where?: Prisma.SeasonWhereInput 667 + data: Prisma.XOR<Prisma.SeasonUpdateWithoutEpisodesInput, Prisma.SeasonUncheckedUpdateWithoutEpisodesInput> 668 + } 669 + 670 + export type SeasonUpdateWithoutEpisodesInput = { 671 + id?: Prisma.StringFieldUpdateOperationsInput | string 672 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 673 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 674 + name?: Prisma.StringFieldUpdateOperationsInput | string 675 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 676 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 677 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 678 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 679 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 680 + show?: Prisma.ShowUpdateOneRequiredWithoutSeasonsNestedInput 681 + } 682 + 683 + export type SeasonUncheckedUpdateWithoutEpisodesInput = { 684 + id?: Prisma.StringFieldUpdateOperationsInput | string 685 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 686 + showId?: Prisma.StringFieldUpdateOperationsInput | string 687 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 688 + name?: Prisma.StringFieldUpdateOperationsInput | string 689 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 690 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 691 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 692 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 693 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 694 + } 695 + 696 + export type SeasonCreateManyShowInput = { 697 + id?: string 698 + tmdbId: number 699 + seasonNumber: number 700 + name: string 701 + posterPath?: string | null 702 + airDate?: Date | string | null 703 + episodeCount?: number | null 704 + createdAt?: Date | string 705 + updatedAt?: Date | string 706 + } 707 + 708 + export type SeasonUpdateWithoutShowInput = { 709 + id?: Prisma.StringFieldUpdateOperationsInput | string 710 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 711 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 712 + name?: Prisma.StringFieldUpdateOperationsInput | string 713 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 714 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 715 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 716 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 717 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 718 + episodes?: Prisma.EpisodeUpdateManyWithoutSeasonNestedInput 719 + } 720 + 721 + export type SeasonUncheckedUpdateWithoutShowInput = { 722 + id?: Prisma.StringFieldUpdateOperationsInput | string 723 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 724 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 725 + name?: Prisma.StringFieldUpdateOperationsInput | string 726 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 727 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 728 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 729 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 730 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 731 + episodes?: Prisma.EpisodeUncheckedUpdateManyWithoutSeasonNestedInput 732 + } 733 + 734 + export type SeasonUncheckedUpdateManyWithoutShowInput = { 735 + id?: Prisma.StringFieldUpdateOperationsInput | string 736 + tmdbId?: Prisma.IntFieldUpdateOperationsInput | number 737 + seasonNumber?: Prisma.IntFieldUpdateOperationsInput | number 738 + name?: Prisma.StringFieldUpdateOperationsInput | string 739 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 740 + airDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 741 + episodeCount?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 742 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 743 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 744 + } 745 + 746 + 747 + /** 748 + * Count Type SeasonCountOutputType 749 + */ 750 + 751 + export type SeasonCountOutputType = { 752 + episodes: number 753 + } 754 + 755 + export type SeasonCountOutputTypeSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 756 + episodes?: boolean | SeasonCountOutputTypeCountEpisodesArgs 757 + } 758 + 759 + /** 760 + * SeasonCountOutputType without action 761 + */ 762 + export type SeasonCountOutputTypeDefaultArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 763 + /** 764 + * Select specific fields to fetch from the SeasonCountOutputType 765 + */ 766 + select?: Prisma.SeasonCountOutputTypeSelect<ExtArgs> | null 767 + } 768 + 769 + /** 770 + * SeasonCountOutputType without action 771 + */ 772 + export type SeasonCountOutputTypeCountEpisodesArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 773 + where?: Prisma.EpisodeWhereInput 774 + } 775 + 776 + 777 + export type SeasonSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ 778 + id?: boolean 779 + tmdbId?: boolean 780 + showId?: boolean 781 + seasonNumber?: boolean 782 + name?: boolean 783 + posterPath?: boolean 784 + airDate?: boolean 785 + episodeCount?: boolean 786 + createdAt?: boolean 787 + updatedAt?: boolean 788 + show?: boolean | Prisma.ShowDefaultArgs<ExtArgs> 789 + episodes?: boolean | Prisma.Season$episodesArgs<ExtArgs> 790 + _count?: boolean | Prisma.SeasonCountOutputTypeDefaultArgs<ExtArgs> 791 + }, ExtArgs["result"]["season"]> 792 + 793 + export type SeasonSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ 794 + id?: boolean 795 + tmdbId?: boolean 796 + showId?: boolean 797 + seasonNumber?: boolean 798 + name?: boolean 799 + posterPath?: boolean 800 + airDate?: boolean 801 + episodeCount?: boolean 802 + createdAt?: boolean 803 + updatedAt?: boolean 804 + show?: boolean | Prisma.ShowDefaultArgs<ExtArgs> 805 + }, ExtArgs["result"]["season"]> 806 + 807 + export type SeasonSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ 808 + id?: boolean 809 + tmdbId?: boolean 810 + showId?: boolean 811 + seasonNumber?: boolean 812 + name?: boolean 813 + posterPath?: boolean 814 + airDate?: boolean 815 + episodeCount?: boolean 816 + createdAt?: boolean 817 + updatedAt?: boolean 818 + show?: boolean | Prisma.ShowDefaultArgs<ExtArgs> 819 + }, ExtArgs["result"]["season"]> 820 + 821 + export type SeasonSelectScalar = { 822 + id?: boolean 823 + tmdbId?: boolean 824 + showId?: boolean 825 + seasonNumber?: boolean 826 + name?: boolean 827 + posterPath?: boolean 828 + airDate?: boolean 829 + episodeCount?: boolean 830 + createdAt?: boolean 831 + updatedAt?: boolean 832 + } 833 + 834 + export type SeasonOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "tmdbId" | "showId" | "seasonNumber" | "name" | "posterPath" | "airDate" | "episodeCount" | "createdAt" | "updatedAt", ExtArgs["result"]["season"]> 835 + export type SeasonInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 836 + show?: boolean | Prisma.ShowDefaultArgs<ExtArgs> 837 + episodes?: boolean | Prisma.Season$episodesArgs<ExtArgs> 838 + _count?: boolean | Prisma.SeasonCountOutputTypeDefaultArgs<ExtArgs> 839 + } 840 + export type SeasonIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 841 + show?: boolean | Prisma.ShowDefaultArgs<ExtArgs> 842 + } 843 + export type SeasonIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 844 + show?: boolean | Prisma.ShowDefaultArgs<ExtArgs> 845 + } 846 + 847 + export type $SeasonPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 848 + name: "Season" 849 + objects: { 850 + show: Prisma.$ShowPayload<ExtArgs> 851 + episodes: Prisma.$EpisodePayload<ExtArgs>[] 852 + } 853 + scalars: runtime.Types.Extensions.GetPayloadResult<{ 854 + id: string 855 + tmdbId: number 856 + showId: string 857 + seasonNumber: number 858 + name: string 859 + posterPath: string | null 860 + airDate: Date | null 861 + episodeCount: number | null 862 + createdAt: Date 863 + updatedAt: Date 864 + }, ExtArgs["result"]["season"]> 865 + composites: {} 866 + } 867 + 868 + export type SeasonGetPayload<S extends boolean | null | undefined | SeasonDefaultArgs> = runtime.Types.Result.GetResult<Prisma.$SeasonPayload, S> 869 + 870 + export type SeasonCountArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = 871 + Omit<SeasonFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & { 872 + select?: SeasonCountAggregateInputType | true 873 + } 874 + 875 + export interface SeasonDelegate<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> { 876 + [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Season'], meta: { name: 'Season' } } 877 + /** 878 + * Find zero or one Season that matches the filter. 879 + * @param {SeasonFindUniqueArgs} args - Arguments to find a Season 880 + * @example 881 + * // Get one Season 882 + * const season = await prisma.season.findUnique({ 883 + * where: { 884 + * // ... provide filter here 885 + * } 886 + * }) 887 + */ 888 + findUnique<T extends SeasonFindUniqueArgs>(args: Prisma.SelectSubset<T, SeasonFindUniqueArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> 889 + 890 + /** 891 + * Find one Season that matches the filter or throw an error with `error.code='P2025'` 892 + * if no matches were found. 893 + * @param {SeasonFindUniqueOrThrowArgs} args - Arguments to find a Season 894 + * @example 895 + * // Get one Season 896 + * const season = await prisma.season.findUniqueOrThrow({ 897 + * where: { 898 + * // ... provide filter here 899 + * } 900 + * }) 901 + */ 902 + findUniqueOrThrow<T extends SeasonFindUniqueOrThrowArgs>(args: Prisma.SelectSubset<T, SeasonFindUniqueOrThrowArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 903 + 904 + /** 905 + * Find the first Season that matches the filter. 906 + * Note, that providing `undefined` is treated as the value not being there. 907 + * Read more here: https://pris.ly/d/null-undefined 908 + * @param {SeasonFindFirstArgs} args - Arguments to find a Season 909 + * @example 910 + * // Get one Season 911 + * const season = await prisma.season.findFirst({ 912 + * where: { 913 + * // ... provide filter here 914 + * } 915 + * }) 916 + */ 917 + findFirst<T extends SeasonFindFirstArgs>(args?: Prisma.SelectSubset<T, SeasonFindFirstArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> 918 + 919 + /** 920 + * Find the first Season that matches the filter or 921 + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. 922 + * Note, that providing `undefined` is treated as the value not being there. 923 + * Read more here: https://pris.ly/d/null-undefined 924 + * @param {SeasonFindFirstOrThrowArgs} args - Arguments to find a Season 925 + * @example 926 + * // Get one Season 927 + * const season = await prisma.season.findFirstOrThrow({ 928 + * where: { 929 + * // ... provide filter here 930 + * } 931 + * }) 932 + */ 933 + findFirstOrThrow<T extends SeasonFindFirstOrThrowArgs>(args?: Prisma.SelectSubset<T, SeasonFindFirstOrThrowArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 934 + 935 + /** 936 + * Find zero or more Seasons that matches the filter. 937 + * Note, that providing `undefined` is treated as the value not being there. 938 + * Read more here: https://pris.ly/d/null-undefined 939 + * @param {SeasonFindManyArgs} args - Arguments to filter and select certain fields only. 940 + * @example 941 + * // Get all Seasons 942 + * const seasons = await prisma.season.findMany() 943 + * 944 + * // Get first 10 Seasons 945 + * const seasons = await prisma.season.findMany({ take: 10 }) 946 + * 947 + * // Only select the `id` 948 + * const seasonWithIdOnly = await prisma.season.findMany({ select: { id: true } }) 949 + * 950 + */ 951 + findMany<T extends SeasonFindManyArgs>(args?: Prisma.SelectSubset<T, SeasonFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>> 952 + 953 + /** 954 + * Create a Season. 955 + * @param {SeasonCreateArgs} args - Arguments to create a Season. 956 + * @example 957 + * // Create one Season 958 + * const Season = await prisma.season.create({ 959 + * data: { 960 + * // ... data to create a Season 961 + * } 962 + * }) 963 + * 964 + */ 965 + create<T extends SeasonCreateArgs>(args: Prisma.SelectSubset<T, SeasonCreateArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 966 + 967 + /** 968 + * Create many Seasons. 969 + * @param {SeasonCreateManyArgs} args - Arguments to create many Seasons. 970 + * @example 971 + * // Create many Seasons 972 + * const season = await prisma.season.createMany({ 973 + * data: [ 974 + * // ... provide data here 975 + * ] 976 + * }) 977 + * 978 + */ 979 + createMany<T extends SeasonCreateManyArgs>(args?: Prisma.SelectSubset<T, SeasonCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload> 980 + 981 + /** 982 + * Create many Seasons and returns the data saved in the database. 983 + * @param {SeasonCreateManyAndReturnArgs} args - Arguments to create many Seasons. 984 + * @example 985 + * // Create many Seasons 986 + * const season = await prisma.season.createManyAndReturn({ 987 + * data: [ 988 + * // ... provide data here 989 + * ] 990 + * }) 991 + * 992 + * // Create many Seasons and only return the `id` 993 + * const seasonWithIdOnly = await prisma.season.createManyAndReturn({ 994 + * select: { id: true }, 995 + * data: [ 996 + * // ... provide data here 997 + * ] 998 + * }) 999 + * Note, that providing `undefined` is treated as the value not being there. 1000 + * Read more here: https://pris.ly/d/null-undefined 1001 + * 1002 + */ 1003 + createManyAndReturn<T extends SeasonCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, SeasonCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>> 1004 + 1005 + /** 1006 + * Delete a Season. 1007 + * @param {SeasonDeleteArgs} args - Arguments to delete one Season. 1008 + * @example 1009 + * // Delete one Season 1010 + * const Season = await prisma.season.delete({ 1011 + * where: { 1012 + * // ... filter to delete one Season 1013 + * } 1014 + * }) 1015 + * 1016 + */ 1017 + delete<T extends SeasonDeleteArgs>(args: Prisma.SelectSubset<T, SeasonDeleteArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 1018 + 1019 + /** 1020 + * Update one Season. 1021 + * @param {SeasonUpdateArgs} args - Arguments to update one Season. 1022 + * @example 1023 + * // Update one Season 1024 + * const season = await prisma.season.update({ 1025 + * where: { 1026 + * // ... provide filter here 1027 + * }, 1028 + * data: { 1029 + * // ... provide data here 1030 + * } 1031 + * }) 1032 + * 1033 + */ 1034 + update<T extends SeasonUpdateArgs>(args: Prisma.SelectSubset<T, SeasonUpdateArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 1035 + 1036 + /** 1037 + * Delete zero or more Seasons. 1038 + * @param {SeasonDeleteManyArgs} args - Arguments to filter Seasons to delete. 1039 + * @example 1040 + * // Delete a few Seasons 1041 + * const { count } = await prisma.season.deleteMany({ 1042 + * where: { 1043 + * // ... provide filter here 1044 + * } 1045 + * }) 1046 + * 1047 + */ 1048 + deleteMany<T extends SeasonDeleteManyArgs>(args?: Prisma.SelectSubset<T, SeasonDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload> 1049 + 1050 + /** 1051 + * Update zero or more Seasons. 1052 + * Note, that providing `undefined` is treated as the value not being there. 1053 + * Read more here: https://pris.ly/d/null-undefined 1054 + * @param {SeasonUpdateManyArgs} args - Arguments to update one or more rows. 1055 + * @example 1056 + * // Update many Seasons 1057 + * const season = await prisma.season.updateMany({ 1058 + * where: { 1059 + * // ... provide filter here 1060 + * }, 1061 + * data: { 1062 + * // ... provide data here 1063 + * } 1064 + * }) 1065 + * 1066 + */ 1067 + updateMany<T extends SeasonUpdateManyArgs>(args: Prisma.SelectSubset<T, SeasonUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload> 1068 + 1069 + /** 1070 + * Update zero or more Seasons and returns the data updated in the database. 1071 + * @param {SeasonUpdateManyAndReturnArgs} args - Arguments to update many Seasons. 1072 + * @example 1073 + * // Update many Seasons 1074 + * const season = await prisma.season.updateManyAndReturn({ 1075 + * where: { 1076 + * // ... provide filter here 1077 + * }, 1078 + * data: [ 1079 + * // ... provide data here 1080 + * ] 1081 + * }) 1082 + * 1083 + * // Update zero or more Seasons and only return the `id` 1084 + * const seasonWithIdOnly = await prisma.season.updateManyAndReturn({ 1085 + * select: { id: true }, 1086 + * where: { 1087 + * // ... provide filter here 1088 + * }, 1089 + * data: [ 1090 + * // ... provide data here 1091 + * ] 1092 + * }) 1093 + * Note, that providing `undefined` is treated as the value not being there. 1094 + * Read more here: https://pris.ly/d/null-undefined 1095 + * 1096 + */ 1097 + updateManyAndReturn<T extends SeasonUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, SeasonUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>> 1098 + 1099 + /** 1100 + * Create or update one Season. 1101 + * @param {SeasonUpsertArgs} args - Arguments to update or create a Season. 1102 + * @example 1103 + * // Update or create a Season 1104 + * const season = await prisma.season.upsert({ 1105 + * create: { 1106 + * // ... data to create a Season 1107 + * }, 1108 + * update: { 1109 + * // ... in case it already exists, update 1110 + * }, 1111 + * where: { 1112 + * // ... the filter for the Season we want to update 1113 + * } 1114 + * }) 1115 + */ 1116 + upsert<T extends SeasonUpsertArgs>(args: Prisma.SelectSubset<T, SeasonUpsertArgs<ExtArgs>>): Prisma.Prisma__SeasonClient<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> 1117 + 1118 + 1119 + /** 1120 + * Count the number of Seasons. 1121 + * Note, that providing `undefined` is treated as the value not being there. 1122 + * Read more here: https://pris.ly/d/null-undefined 1123 + * @param {SeasonCountArgs} args - Arguments to filter Seasons to count. 1124 + * @example 1125 + * // Count the number of Seasons 1126 + * const count = await prisma.season.count({ 1127 + * where: { 1128 + * // ... the filter for the Seasons we want to count 1129 + * } 1130 + * }) 1131 + **/ 1132 + count<T extends SeasonCountArgs>( 1133 + args?: Prisma.Subset<T, SeasonCountArgs>, 1134 + ): Prisma.PrismaPromise< 1135 + T extends runtime.Types.Utils.Record<'select', any> 1136 + ? T['select'] extends true 1137 + ? number 1138 + : Prisma.GetScalarType<T['select'], SeasonCountAggregateOutputType> 1139 + : number 1140 + > 1141 + 1142 + /** 1143 + * Allows you to perform aggregations operations on a Season. 1144 + * Note, that providing `undefined` is treated as the value not being there. 1145 + * Read more here: https://pris.ly/d/null-undefined 1146 + * @param {SeasonAggregateArgs} args - Select which aggregations you would like to apply and on what fields. 1147 + * @example 1148 + * // Ordered by age ascending 1149 + * // Where email contains prisma.io 1150 + * // Limited to the 10 users 1151 + * const aggregations = await prisma.user.aggregate({ 1152 + * _avg: { 1153 + * age: true, 1154 + * }, 1155 + * where: { 1156 + * email: { 1157 + * contains: "prisma.io", 1158 + * }, 1159 + * }, 1160 + * orderBy: { 1161 + * age: "asc", 1162 + * }, 1163 + * take: 10, 1164 + * }) 1165 + **/ 1166 + aggregate<T extends SeasonAggregateArgs>(args: Prisma.Subset<T, SeasonAggregateArgs>): Prisma.PrismaPromise<GetSeasonAggregateType<T>> 1167 + 1168 + /** 1169 + * Group by Season. 1170 + * Note, that providing `undefined` is treated as the value not being there. 1171 + * Read more here: https://pris.ly/d/null-undefined 1172 + * @param {SeasonGroupByArgs} args - Group by arguments. 1173 + * @example 1174 + * // Group by city, order by createdAt, get count 1175 + * const result = await prisma.user.groupBy({ 1176 + * by: ['city', 'createdAt'], 1177 + * orderBy: { 1178 + * createdAt: true 1179 + * }, 1180 + * _count: { 1181 + * _all: true 1182 + * }, 1183 + * }) 1184 + * 1185 + **/ 1186 + groupBy< 1187 + T extends SeasonGroupByArgs, 1188 + HasSelectOrTake extends Prisma.Or< 1189 + Prisma.Extends<'skip', Prisma.Keys<T>>, 1190 + Prisma.Extends<'take', Prisma.Keys<T>> 1191 + >, 1192 + OrderByArg extends Prisma.True extends HasSelectOrTake 1193 + ? { orderBy: SeasonGroupByArgs['orderBy'] } 1194 + : { orderBy?: SeasonGroupByArgs['orderBy'] }, 1195 + OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>, 1196 + ByFields extends Prisma.MaybeTupleToUnion<T['by']>, 1197 + ByValid extends Prisma.Has<ByFields, OrderFields>, 1198 + HavingFields extends Prisma.GetHavingFields<T['having']>, 1199 + HavingValid extends Prisma.Has<ByFields, HavingFields>, 1200 + ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False, 1201 + InputErrors extends ByEmpty extends Prisma.True 1202 + ? `Error: "by" must not be empty.` 1203 + : HavingValid extends Prisma.False 1204 + ? { 1205 + [P in HavingFields]: P extends ByFields 1206 + ? never 1207 + : P extends string 1208 + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` 1209 + : [ 1210 + Error, 1211 + 'Field ', 1212 + P, 1213 + ` in "having" needs to be provided in "by"`, 1214 + ] 1215 + }[HavingFields] 1216 + : 'take' extends Prisma.Keys<T> 1217 + ? 'orderBy' extends Prisma.Keys<T> 1218 + ? ByValid extends Prisma.True 1219 + ? {} 1220 + : { 1221 + [P in OrderFields]: P extends ByFields 1222 + ? never 1223 + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` 1224 + }[OrderFields] 1225 + : 'Error: If you provide "take", you also need to provide "orderBy"' 1226 + : 'skip' extends Prisma.Keys<T> 1227 + ? 'orderBy' extends Prisma.Keys<T> 1228 + ? ByValid extends Prisma.True 1229 + ? {} 1230 + : { 1231 + [P in OrderFields]: P extends ByFields 1232 + ? never 1233 + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` 1234 + }[OrderFields] 1235 + : 'Error: If you provide "skip", you also need to provide "orderBy"' 1236 + : ByValid extends Prisma.True 1237 + ? {} 1238 + : { 1239 + [P in OrderFields]: P extends ByFields 1240 + ? never 1241 + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` 1242 + }[OrderFields] 1243 + >(args: Prisma.SubsetIntersection<T, SeasonGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSeasonGroupByPayload<T> : Prisma.PrismaPromise<InputErrors> 1244 + /** 1245 + * Fields of the Season model 1246 + */ 1247 + readonly fields: SeasonFieldRefs; 1248 + } 1249 + 1250 + /** 1251 + * The delegate class that acts as a "Promise-like" for Season. 1252 + * Why is this prefixed with `Prisma__`? 1253 + * Because we want to prevent naming conflicts as mentioned in 1254 + * https://github.com/prisma/prisma-client-js/issues/707 1255 + */ 1256 + export interface Prisma__SeasonClient<T, Null = never, ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> { 1257 + readonly [Symbol.toStringTag]: "PrismaPromise" 1258 + show<T extends Prisma.ShowDefaultArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.ShowDefaultArgs<ExtArgs>>): Prisma.Prisma__ShowClient<runtime.Types.Result.GetResult<Prisma.$ShowPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> 1259 + episodes<T extends Prisma.Season$episodesArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.Season$episodesArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$EpisodePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null> 1260 + /** 1261 + * Attaches callbacks for the resolution and/or rejection of the Promise. 1262 + * @param onfulfilled The callback to execute when the Promise is resolved. 1263 + * @param onrejected The callback to execute when the Promise is rejected. 1264 + * @returns A Promise for the completion of which ever callback is executed. 1265 + */ 1266 + then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): runtime.Types.Utils.JsPromise<TResult1 | TResult2> 1267 + /** 1268 + * Attaches a callback for only the rejection of the Promise. 1269 + * @param onrejected The callback to execute when the Promise is rejected. 1270 + * @returns A Promise for the completion of the callback. 1271 + */ 1272 + catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): runtime.Types.Utils.JsPromise<T | TResult> 1273 + /** 1274 + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The 1275 + * resolved value cannot be modified from the callback. 1276 + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). 1277 + * @returns A Promise for the completion of the callback. 1278 + */ 1279 + finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise<T> 1280 + } 1281 + 1282 + 1283 + 1284 + 1285 + /** 1286 + * Fields of the Season model 1287 + */ 1288 + export interface SeasonFieldRefs { 1289 + readonly id: Prisma.FieldRef<"Season", 'String'> 1290 + readonly tmdbId: Prisma.FieldRef<"Season", 'Int'> 1291 + readonly showId: Prisma.FieldRef<"Season", 'String'> 1292 + readonly seasonNumber: Prisma.FieldRef<"Season", 'Int'> 1293 + readonly name: Prisma.FieldRef<"Season", 'String'> 1294 + readonly posterPath: Prisma.FieldRef<"Season", 'String'> 1295 + readonly airDate: Prisma.FieldRef<"Season", 'DateTime'> 1296 + readonly episodeCount: Prisma.FieldRef<"Season", 'Int'> 1297 + readonly createdAt: Prisma.FieldRef<"Season", 'DateTime'> 1298 + readonly updatedAt: Prisma.FieldRef<"Season", 'DateTime'> 1299 + } 1300 + 1301 + 1302 + // Custom InputTypes 1303 + /** 1304 + * Season findUnique 1305 + */ 1306 + export type SeasonFindUniqueArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1307 + /** 1308 + * Select specific fields to fetch from the Season 1309 + */ 1310 + select?: Prisma.SeasonSelect<ExtArgs> | null 1311 + /** 1312 + * Omit specific fields from the Season 1313 + */ 1314 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1315 + /** 1316 + * Choose, which related nodes to fetch as well 1317 + */ 1318 + include?: Prisma.SeasonInclude<ExtArgs> | null 1319 + /** 1320 + * Filter, which Season to fetch. 1321 + */ 1322 + where: Prisma.SeasonWhereUniqueInput 1323 + } 1324 + 1325 + /** 1326 + * Season findUniqueOrThrow 1327 + */ 1328 + export type SeasonFindUniqueOrThrowArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1329 + /** 1330 + * Select specific fields to fetch from the Season 1331 + */ 1332 + select?: Prisma.SeasonSelect<ExtArgs> | null 1333 + /** 1334 + * Omit specific fields from the Season 1335 + */ 1336 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1337 + /** 1338 + * Choose, which related nodes to fetch as well 1339 + */ 1340 + include?: Prisma.SeasonInclude<ExtArgs> | null 1341 + /** 1342 + * Filter, which Season to fetch. 1343 + */ 1344 + where: Prisma.SeasonWhereUniqueInput 1345 + } 1346 + 1347 + /** 1348 + * Season findFirst 1349 + */ 1350 + export type SeasonFindFirstArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1351 + /** 1352 + * Select specific fields to fetch from the Season 1353 + */ 1354 + select?: Prisma.SeasonSelect<ExtArgs> | null 1355 + /** 1356 + * Omit specific fields from the Season 1357 + */ 1358 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1359 + /** 1360 + * Choose, which related nodes to fetch as well 1361 + */ 1362 + include?: Prisma.SeasonInclude<ExtArgs> | null 1363 + /** 1364 + * Filter, which Season to fetch. 1365 + */ 1366 + where?: Prisma.SeasonWhereInput 1367 + /** 1368 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 1369 + * 1370 + * Determine the order of Seasons to fetch. 1371 + */ 1372 + orderBy?: Prisma.SeasonOrderByWithRelationInput | Prisma.SeasonOrderByWithRelationInput[] 1373 + /** 1374 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 1375 + * 1376 + * Sets the position for searching for Seasons. 1377 + */ 1378 + cursor?: Prisma.SeasonWhereUniqueInput 1379 + /** 1380 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1381 + * 1382 + * Take `±n` Seasons from the position of the cursor. 1383 + */ 1384 + take?: number 1385 + /** 1386 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1387 + * 1388 + * Skip the first `n` Seasons. 1389 + */ 1390 + skip?: number 1391 + /** 1392 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} 1393 + * 1394 + * Filter by unique combinations of Seasons. 1395 + */ 1396 + distinct?: Prisma.SeasonScalarFieldEnum | Prisma.SeasonScalarFieldEnum[] 1397 + } 1398 + 1399 + /** 1400 + * Season findFirstOrThrow 1401 + */ 1402 + export type SeasonFindFirstOrThrowArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1403 + /** 1404 + * Select specific fields to fetch from the Season 1405 + */ 1406 + select?: Prisma.SeasonSelect<ExtArgs> | null 1407 + /** 1408 + * Omit specific fields from the Season 1409 + */ 1410 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1411 + /** 1412 + * Choose, which related nodes to fetch as well 1413 + */ 1414 + include?: Prisma.SeasonInclude<ExtArgs> | null 1415 + /** 1416 + * Filter, which Season to fetch. 1417 + */ 1418 + where?: Prisma.SeasonWhereInput 1419 + /** 1420 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 1421 + * 1422 + * Determine the order of Seasons to fetch. 1423 + */ 1424 + orderBy?: Prisma.SeasonOrderByWithRelationInput | Prisma.SeasonOrderByWithRelationInput[] 1425 + /** 1426 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 1427 + * 1428 + * Sets the position for searching for Seasons. 1429 + */ 1430 + cursor?: Prisma.SeasonWhereUniqueInput 1431 + /** 1432 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1433 + * 1434 + * Take `±n` Seasons from the position of the cursor. 1435 + */ 1436 + take?: number 1437 + /** 1438 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1439 + * 1440 + * Skip the first `n` Seasons. 1441 + */ 1442 + skip?: number 1443 + /** 1444 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} 1445 + * 1446 + * Filter by unique combinations of Seasons. 1447 + */ 1448 + distinct?: Prisma.SeasonScalarFieldEnum | Prisma.SeasonScalarFieldEnum[] 1449 + } 1450 + 1451 + /** 1452 + * Season findMany 1453 + */ 1454 + export type SeasonFindManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1455 + /** 1456 + * Select specific fields to fetch from the Season 1457 + */ 1458 + select?: Prisma.SeasonSelect<ExtArgs> | null 1459 + /** 1460 + * Omit specific fields from the Season 1461 + */ 1462 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1463 + /** 1464 + * Choose, which related nodes to fetch as well 1465 + */ 1466 + include?: Prisma.SeasonInclude<ExtArgs> | null 1467 + /** 1468 + * Filter, which Seasons to fetch. 1469 + */ 1470 + where?: Prisma.SeasonWhereInput 1471 + /** 1472 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} 1473 + * 1474 + * Determine the order of Seasons to fetch. 1475 + */ 1476 + orderBy?: Prisma.SeasonOrderByWithRelationInput | Prisma.SeasonOrderByWithRelationInput[] 1477 + /** 1478 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} 1479 + * 1480 + * Sets the position for listing Seasons. 1481 + */ 1482 + cursor?: Prisma.SeasonWhereUniqueInput 1483 + /** 1484 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1485 + * 1486 + * Take `±n` Seasons from the position of the cursor. 1487 + */ 1488 + take?: number 1489 + /** 1490 + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} 1491 + * 1492 + * Skip the first `n` Seasons. 1493 + */ 1494 + skip?: number 1495 + distinct?: Prisma.SeasonScalarFieldEnum | Prisma.SeasonScalarFieldEnum[] 1496 + } 1497 + 1498 + /** 1499 + * Season create 1500 + */ 1501 + export type SeasonCreateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1502 + /** 1503 + * Select specific fields to fetch from the Season 1504 + */ 1505 + select?: Prisma.SeasonSelect<ExtArgs> | null 1506 + /** 1507 + * Omit specific fields from the Season 1508 + */ 1509 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1510 + /** 1511 + * Choose, which related nodes to fetch as well 1512 + */ 1513 + include?: Prisma.SeasonInclude<ExtArgs> | null 1514 + /** 1515 + * The data needed to create a Season. 1516 + */ 1517 + data: Prisma.XOR<Prisma.SeasonCreateInput, Prisma.SeasonUncheckedCreateInput> 1518 + } 1519 + 1520 + /** 1521 + * Season createMany 1522 + */ 1523 + export type SeasonCreateManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1524 + /** 1525 + * The data used to create many Seasons. 1526 + */ 1527 + data: Prisma.SeasonCreateManyInput | Prisma.SeasonCreateManyInput[] 1528 + skipDuplicates?: boolean 1529 + } 1530 + 1531 + /** 1532 + * Season createManyAndReturn 1533 + */ 1534 + export type SeasonCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1535 + /** 1536 + * Select specific fields to fetch from the Season 1537 + */ 1538 + select?: Prisma.SeasonSelectCreateManyAndReturn<ExtArgs> | null 1539 + /** 1540 + * Omit specific fields from the Season 1541 + */ 1542 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1543 + /** 1544 + * The data used to create many Seasons. 1545 + */ 1546 + data: Prisma.SeasonCreateManyInput | Prisma.SeasonCreateManyInput[] 1547 + skipDuplicates?: boolean 1548 + /** 1549 + * Choose, which related nodes to fetch as well 1550 + */ 1551 + include?: Prisma.SeasonIncludeCreateManyAndReturn<ExtArgs> | null 1552 + } 1553 + 1554 + /** 1555 + * Season update 1556 + */ 1557 + export type SeasonUpdateArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1558 + /** 1559 + * Select specific fields to fetch from the Season 1560 + */ 1561 + select?: Prisma.SeasonSelect<ExtArgs> | null 1562 + /** 1563 + * Omit specific fields from the Season 1564 + */ 1565 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1566 + /** 1567 + * Choose, which related nodes to fetch as well 1568 + */ 1569 + include?: Prisma.SeasonInclude<ExtArgs> | null 1570 + /** 1571 + * The data needed to update a Season. 1572 + */ 1573 + data: Prisma.XOR<Prisma.SeasonUpdateInput, Prisma.SeasonUncheckedUpdateInput> 1574 + /** 1575 + * Choose, which Season to update. 1576 + */ 1577 + where: Prisma.SeasonWhereUniqueInput 1578 + } 1579 + 1580 + /** 1581 + * Season updateMany 1582 + */ 1583 + export type SeasonUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1584 + /** 1585 + * The data used to update Seasons. 1586 + */ 1587 + data: Prisma.XOR<Prisma.SeasonUpdateManyMutationInput, Prisma.SeasonUncheckedUpdateManyInput> 1588 + /** 1589 + * Filter which Seasons to update 1590 + */ 1591 + where?: Prisma.SeasonWhereInput 1592 + /** 1593 + * Limit how many Seasons to update. 1594 + */ 1595 + limit?: number 1596 + } 1597 + 1598 + /** 1599 + * Season updateManyAndReturn 1600 + */ 1601 + export type SeasonUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1602 + /** 1603 + * Select specific fields to fetch from the Season 1604 + */ 1605 + select?: Prisma.SeasonSelectUpdateManyAndReturn<ExtArgs> | null 1606 + /** 1607 + * Omit specific fields from the Season 1608 + */ 1609 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1610 + /** 1611 + * The data used to update Seasons. 1612 + */ 1613 + data: Prisma.XOR<Prisma.SeasonUpdateManyMutationInput, Prisma.SeasonUncheckedUpdateManyInput> 1614 + /** 1615 + * Filter which Seasons to update 1616 + */ 1617 + where?: Prisma.SeasonWhereInput 1618 + /** 1619 + * Limit how many Seasons to update. 1620 + */ 1621 + limit?: number 1622 + /** 1623 + * Choose, which related nodes to fetch as well 1624 + */ 1625 + include?: Prisma.SeasonIncludeUpdateManyAndReturn<ExtArgs> | null 1626 + } 1627 + 1628 + /** 1629 + * Season upsert 1630 + */ 1631 + export type SeasonUpsertArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1632 + /** 1633 + * Select specific fields to fetch from the Season 1634 + */ 1635 + select?: Prisma.SeasonSelect<ExtArgs> | null 1636 + /** 1637 + * Omit specific fields from the Season 1638 + */ 1639 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1640 + /** 1641 + * Choose, which related nodes to fetch as well 1642 + */ 1643 + include?: Prisma.SeasonInclude<ExtArgs> | null 1644 + /** 1645 + * The filter to search for the Season to update in case it exists. 1646 + */ 1647 + where: Prisma.SeasonWhereUniqueInput 1648 + /** 1649 + * In case the Season found by the `where` argument doesn't exist, create a new Season with this data. 1650 + */ 1651 + create: Prisma.XOR<Prisma.SeasonCreateInput, Prisma.SeasonUncheckedCreateInput> 1652 + /** 1653 + * In case the Season was found with the provided `where` argument, update it with this data. 1654 + */ 1655 + update: Prisma.XOR<Prisma.SeasonUpdateInput, Prisma.SeasonUncheckedUpdateInput> 1656 + } 1657 + 1658 + /** 1659 + * Season delete 1660 + */ 1661 + export type SeasonDeleteArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1662 + /** 1663 + * Select specific fields to fetch from the Season 1664 + */ 1665 + select?: Prisma.SeasonSelect<ExtArgs> | null 1666 + /** 1667 + * Omit specific fields from the Season 1668 + */ 1669 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1670 + /** 1671 + * Choose, which related nodes to fetch as well 1672 + */ 1673 + include?: Prisma.SeasonInclude<ExtArgs> | null 1674 + /** 1675 + * Filter which Season to delete. 1676 + */ 1677 + where: Prisma.SeasonWhereUniqueInput 1678 + } 1679 + 1680 + /** 1681 + * Season deleteMany 1682 + */ 1683 + export type SeasonDeleteManyArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1684 + /** 1685 + * Filter which Seasons to delete 1686 + */ 1687 + where?: Prisma.SeasonWhereInput 1688 + /** 1689 + * Limit how many Seasons to delete. 1690 + */ 1691 + limit?: number 1692 + } 1693 + 1694 + /** 1695 + * Season.episodes 1696 + */ 1697 + export type Season$episodesArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1698 + /** 1699 + * Select specific fields to fetch from the Episode 1700 + */ 1701 + select?: Prisma.EpisodeSelect<ExtArgs> | null 1702 + /** 1703 + * Omit specific fields from the Episode 1704 + */ 1705 + omit?: Prisma.EpisodeOmit<ExtArgs> | null 1706 + /** 1707 + * Choose, which related nodes to fetch as well 1708 + */ 1709 + include?: Prisma.EpisodeInclude<ExtArgs> | null 1710 + where?: Prisma.EpisodeWhereInput 1711 + orderBy?: Prisma.EpisodeOrderByWithRelationInput | Prisma.EpisodeOrderByWithRelationInput[] 1712 + cursor?: Prisma.EpisodeWhereUniqueInput 1713 + take?: number 1714 + skip?: number 1715 + distinct?: Prisma.EpisodeScalarFieldEnum | Prisma.EpisodeScalarFieldEnum[] 1716 + } 1717 + 1718 + /** 1719 + * Season without action 1720 + */ 1721 + export type SeasonDefaultArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1722 + /** 1723 + * Select specific fields to fetch from the Season 1724 + */ 1725 + select?: Prisma.SeasonSelect<ExtArgs> | null 1726 + /** 1727 + * Omit specific fields from the Season 1728 + */ 1729 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1730 + /** 1731 + * Choose, which related nodes to fetch as well 1732 + */ 1733 + include?: Prisma.SeasonInclude<ExtArgs> | null 1734 + }
+142
backend/src/generated/models/Show.ts
··· 254 254 updatedAt?: Prisma.DateTimeFilter<"Show"> | Date | string 255 255 trackedBy?: Prisma.TrackedEpisodeListRelationFilter 256 256 listItems?: Prisma.ListItemListRelationFilter 257 + seasons?: Prisma.SeasonListRelationFilter 257 258 } 258 259 259 260 export type ShowOrderByWithRelationInput = { ··· 269 270 updatedAt?: Prisma.SortOrder 270 271 trackedBy?: Prisma.TrackedEpisodeOrderByRelationAggregateInput 271 272 listItems?: Prisma.ListItemOrderByRelationAggregateInput 273 + seasons?: Prisma.SeasonOrderByRelationAggregateInput 272 274 } 273 275 274 276 export type ShowWhereUniqueInput = Prisma.AtLeast<{ ··· 287 289 updatedAt?: Prisma.DateTimeFilter<"Show"> | Date | string 288 290 trackedBy?: Prisma.TrackedEpisodeListRelationFilter 289 291 listItems?: Prisma.ListItemListRelationFilter 292 + seasons?: Prisma.SeasonListRelationFilter 290 293 }, "showId"> 291 294 292 295 export type ShowOrderByWithAggregationInput = { ··· 336 339 updatedAt?: Date | string 337 340 trackedBy?: Prisma.TrackedEpisodeCreateNestedManyWithoutShowInput 338 341 listItems?: Prisma.ListItemCreateNestedManyWithoutShowInput 342 + seasons?: Prisma.SeasonCreateNestedManyWithoutShowInput 339 343 } 340 344 341 345 export type ShowUncheckedCreateInput = { ··· 351 355 updatedAt?: Date | string 352 356 trackedBy?: Prisma.TrackedEpisodeUncheckedCreateNestedManyWithoutShowInput 353 357 listItems?: Prisma.ListItemUncheckedCreateNestedManyWithoutShowInput 358 + seasons?: Prisma.SeasonUncheckedCreateNestedManyWithoutShowInput 354 359 } 355 360 356 361 export type ShowUpdateInput = { ··· 366 371 updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 367 372 trackedBy?: Prisma.TrackedEpisodeUpdateManyWithoutShowNestedInput 368 373 listItems?: Prisma.ListItemUpdateManyWithoutShowNestedInput 374 + seasons?: Prisma.SeasonUpdateManyWithoutShowNestedInput 369 375 } 370 376 371 377 export type ShowUncheckedUpdateInput = { ··· 381 387 updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 382 388 trackedBy?: Prisma.TrackedEpisodeUncheckedUpdateManyWithoutShowNestedInput 383 389 listItems?: Prisma.ListItemUncheckedUpdateManyWithoutShowNestedInput 390 + seasons?: Prisma.SeasonUncheckedUpdateManyWithoutShowNestedInput 384 391 } 385 392 386 393 export type ShowCreateManyInput = { ··· 477 484 isNot?: Prisma.ShowWhereInput | null 478 485 } 479 486 487 + export type ShowCreateNestedOneWithoutSeasonsInput = { 488 + create?: Prisma.XOR<Prisma.ShowCreateWithoutSeasonsInput, Prisma.ShowUncheckedCreateWithoutSeasonsInput> 489 + connectOrCreate?: Prisma.ShowCreateOrConnectWithoutSeasonsInput 490 + connect?: Prisma.ShowWhereUniqueInput 491 + } 492 + 493 + export type ShowUpdateOneRequiredWithoutSeasonsNestedInput = { 494 + create?: Prisma.XOR<Prisma.ShowCreateWithoutSeasonsInput, Prisma.ShowUncheckedCreateWithoutSeasonsInput> 495 + connectOrCreate?: Prisma.ShowCreateOrConnectWithoutSeasonsInput 496 + upsert?: Prisma.ShowUpsertWithoutSeasonsInput 497 + connect?: Prisma.ShowWhereUniqueInput 498 + update?: Prisma.XOR<Prisma.XOR<Prisma.ShowUpdateToOneWithWhereWithoutSeasonsInput, Prisma.ShowUpdateWithoutSeasonsInput>, Prisma.ShowUncheckedUpdateWithoutSeasonsInput> 499 + } 500 + 480 501 export type ShowCreateNestedOneWithoutTrackedByInput = { 481 502 create?: Prisma.XOR<Prisma.ShowCreateWithoutTrackedByInput, Prisma.ShowUncheckedCreateWithoutTrackedByInput> 482 503 connectOrCreate?: Prisma.ShowCreateOrConnectWithoutTrackedByInput ··· 507 528 update?: Prisma.XOR<Prisma.XOR<Prisma.ShowUpdateToOneWithWhereWithoutListItemsInput, Prisma.ShowUpdateWithoutListItemsInput>, Prisma.ShowUncheckedUpdateWithoutListItemsInput> 508 529 } 509 530 531 + export type ShowCreateWithoutSeasonsInput = { 532 + showId: string 533 + title: string 534 + posterPath?: string | null 535 + backdropPath?: string | null 536 + firstAirYear?: number | null 537 + firstAirDate?: Date | string | null 538 + overview?: string | null 539 + colors?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue 540 + createdAt?: Date | string 541 + updatedAt?: Date | string 542 + trackedBy?: Prisma.TrackedEpisodeCreateNestedManyWithoutShowInput 543 + listItems?: Prisma.ListItemCreateNestedManyWithoutShowInput 544 + } 545 + 546 + export type ShowUncheckedCreateWithoutSeasonsInput = { 547 + showId: string 548 + title: string 549 + posterPath?: string | null 550 + backdropPath?: string | null 551 + firstAirYear?: number | null 552 + firstAirDate?: Date | string | null 553 + overview?: string | null 554 + colors?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue 555 + createdAt?: Date | string 556 + updatedAt?: Date | string 557 + trackedBy?: Prisma.TrackedEpisodeUncheckedCreateNestedManyWithoutShowInput 558 + listItems?: Prisma.ListItemUncheckedCreateNestedManyWithoutShowInput 559 + } 560 + 561 + export type ShowCreateOrConnectWithoutSeasonsInput = { 562 + where: Prisma.ShowWhereUniqueInput 563 + create: Prisma.XOR<Prisma.ShowCreateWithoutSeasonsInput, Prisma.ShowUncheckedCreateWithoutSeasonsInput> 564 + } 565 + 566 + export type ShowUpsertWithoutSeasonsInput = { 567 + update: Prisma.XOR<Prisma.ShowUpdateWithoutSeasonsInput, Prisma.ShowUncheckedUpdateWithoutSeasonsInput> 568 + create: Prisma.XOR<Prisma.ShowCreateWithoutSeasonsInput, Prisma.ShowUncheckedCreateWithoutSeasonsInput> 569 + where?: Prisma.ShowWhereInput 570 + } 571 + 572 + export type ShowUpdateToOneWithWhereWithoutSeasonsInput = { 573 + where?: Prisma.ShowWhereInput 574 + data: Prisma.XOR<Prisma.ShowUpdateWithoutSeasonsInput, Prisma.ShowUncheckedUpdateWithoutSeasonsInput> 575 + } 576 + 577 + export type ShowUpdateWithoutSeasonsInput = { 578 + showId?: Prisma.StringFieldUpdateOperationsInput | string 579 + title?: Prisma.StringFieldUpdateOperationsInput | string 580 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 581 + backdropPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 582 + firstAirYear?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 583 + firstAirDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 584 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 585 + colors?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue 586 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 587 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 588 + trackedBy?: Prisma.TrackedEpisodeUpdateManyWithoutShowNestedInput 589 + listItems?: Prisma.ListItemUpdateManyWithoutShowNestedInput 590 + } 591 + 592 + export type ShowUncheckedUpdateWithoutSeasonsInput = { 593 + showId?: Prisma.StringFieldUpdateOperationsInput | string 594 + title?: Prisma.StringFieldUpdateOperationsInput | string 595 + posterPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 596 + backdropPath?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 597 + firstAirYear?: Prisma.NullableIntFieldUpdateOperationsInput | number | null 598 + firstAirDate?: Prisma.NullableDateTimeFieldUpdateOperationsInput | Date | string | null 599 + overview?: Prisma.NullableStringFieldUpdateOperationsInput | string | null 600 + colors?: Prisma.NullableJsonNullValueInput | runtime.InputJsonValue 601 + createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 602 + updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 603 + trackedBy?: Prisma.TrackedEpisodeUncheckedUpdateManyWithoutShowNestedInput 604 + listItems?: Prisma.ListItemUncheckedUpdateManyWithoutShowNestedInput 605 + } 606 + 510 607 export type ShowCreateWithoutTrackedByInput = { 511 608 showId: string 512 609 title: string ··· 519 616 createdAt?: Date | string 520 617 updatedAt?: Date | string 521 618 listItems?: Prisma.ListItemCreateNestedManyWithoutShowInput 619 + seasons?: Prisma.SeasonCreateNestedManyWithoutShowInput 522 620 } 523 621 524 622 export type ShowUncheckedCreateWithoutTrackedByInput = { ··· 533 631 createdAt?: Date | string 534 632 updatedAt?: Date | string 535 633 listItems?: Prisma.ListItemUncheckedCreateNestedManyWithoutShowInput 634 + seasons?: Prisma.SeasonUncheckedCreateNestedManyWithoutShowInput 536 635 } 537 636 538 637 export type ShowCreateOrConnectWithoutTrackedByInput = { ··· 563 662 createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 564 663 updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 565 664 listItems?: Prisma.ListItemUpdateManyWithoutShowNestedInput 665 + seasons?: Prisma.SeasonUpdateManyWithoutShowNestedInput 566 666 } 567 667 568 668 export type ShowUncheckedUpdateWithoutTrackedByInput = { ··· 577 677 createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 578 678 updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 579 679 listItems?: Prisma.ListItemUncheckedUpdateManyWithoutShowNestedInput 680 + seasons?: Prisma.SeasonUncheckedUpdateManyWithoutShowNestedInput 580 681 } 581 682 582 683 export type ShowCreateWithoutListItemsInput = { ··· 591 692 createdAt?: Date | string 592 693 updatedAt?: Date | string 593 694 trackedBy?: Prisma.TrackedEpisodeCreateNestedManyWithoutShowInput 695 + seasons?: Prisma.SeasonCreateNestedManyWithoutShowInput 594 696 } 595 697 596 698 export type ShowUncheckedCreateWithoutListItemsInput = { ··· 605 707 createdAt?: Date | string 606 708 updatedAt?: Date | string 607 709 trackedBy?: Prisma.TrackedEpisodeUncheckedCreateNestedManyWithoutShowInput 710 + seasons?: Prisma.SeasonUncheckedCreateNestedManyWithoutShowInput 608 711 } 609 712 610 713 export type ShowCreateOrConnectWithoutListItemsInput = { ··· 635 738 createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 636 739 updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 637 740 trackedBy?: Prisma.TrackedEpisodeUpdateManyWithoutShowNestedInput 741 + seasons?: Prisma.SeasonUpdateManyWithoutShowNestedInput 638 742 } 639 743 640 744 export type ShowUncheckedUpdateWithoutListItemsInput = { ··· 649 753 createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 650 754 updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string 651 755 trackedBy?: Prisma.TrackedEpisodeUncheckedUpdateManyWithoutShowNestedInput 756 + seasons?: Prisma.SeasonUncheckedUpdateManyWithoutShowNestedInput 652 757 } 653 758 654 759 ··· 659 764 export type ShowCountOutputType = { 660 765 trackedBy: number 661 766 listItems: number 767 + seasons: number 662 768 } 663 769 664 770 export type ShowCountOutputTypeSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 665 771 trackedBy?: boolean | ShowCountOutputTypeCountTrackedByArgs 666 772 listItems?: boolean | ShowCountOutputTypeCountListItemsArgs 773 + seasons?: boolean | ShowCountOutputTypeCountSeasonsArgs 667 774 } 668 775 669 776 /** ··· 690 797 where?: Prisma.ListItemWhereInput 691 798 } 692 799 800 + /** 801 + * ShowCountOutputType without action 802 + */ 803 + export type ShowCountOutputTypeCountSeasonsArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 804 + where?: Prisma.SeasonWhereInput 805 + } 806 + 693 807 694 808 export type ShowSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{ 695 809 showId?: boolean ··· 704 818 updatedAt?: boolean 705 819 trackedBy?: boolean | Prisma.Show$trackedByArgs<ExtArgs> 706 820 listItems?: boolean | Prisma.Show$listItemsArgs<ExtArgs> 821 + seasons?: boolean | Prisma.Show$seasonsArgs<ExtArgs> 707 822 _count?: boolean | Prisma.ShowCountOutputTypeDefaultArgs<ExtArgs> 708 823 }, ExtArgs["result"]["show"]> 709 824 ··· 750 865 export type ShowInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 751 866 trackedBy?: boolean | Prisma.Show$trackedByArgs<ExtArgs> 752 867 listItems?: boolean | Prisma.Show$listItemsArgs<ExtArgs> 868 + seasons?: boolean | Prisma.Show$seasonsArgs<ExtArgs> 753 869 _count?: boolean | Prisma.ShowCountOutputTypeDefaultArgs<ExtArgs> 754 870 } 755 871 export type ShowIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {} ··· 760 876 objects: { 761 877 trackedBy: Prisma.$TrackedEpisodePayload<ExtArgs>[] 762 878 listItems: Prisma.$ListItemPayload<ExtArgs>[] 879 + seasons: Prisma.$SeasonPayload<ExtArgs>[] 763 880 } 764 881 scalars: runtime.Types.Extensions.GetPayloadResult<{ 765 882 showId: string ··· 1168 1285 readonly [Symbol.toStringTag]: "PrismaPromise" 1169 1286 trackedBy<T extends Prisma.Show$trackedByArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.Show$trackedByArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$TrackedEpisodePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null> 1170 1287 listItems<T extends Prisma.Show$listItemsArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.Show$listItemsArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ListItemPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null> 1288 + seasons<T extends Prisma.Show$seasonsArgs<ExtArgs> = {}>(args?: Prisma.Subset<T, Prisma.Show$seasonsArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$SeasonPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null> 1171 1289 /** 1172 1290 * Attaches callbacks for the resolution and/or rejection of the Promise. 1173 1291 * @param onfulfilled The callback to execute when the Promise is resolved. ··· 1640 1758 take?: number 1641 1759 skip?: number 1642 1760 distinct?: Prisma.ListItemScalarFieldEnum | Prisma.ListItemScalarFieldEnum[] 1761 + } 1762 + 1763 + /** 1764 + * Show.seasons 1765 + */ 1766 + export type Show$seasonsArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = { 1767 + /** 1768 + * Select specific fields to fetch from the Season 1769 + */ 1770 + select?: Prisma.SeasonSelect<ExtArgs> | null 1771 + /** 1772 + * Omit specific fields from the Season 1773 + */ 1774 + omit?: Prisma.SeasonOmit<ExtArgs> | null 1775 + /** 1776 + * Choose, which related nodes to fetch as well 1777 + */ 1778 + include?: Prisma.SeasonInclude<ExtArgs> | null 1779 + where?: Prisma.SeasonWhereInput 1780 + orderBy?: Prisma.SeasonOrderByWithRelationInput | Prisma.SeasonOrderByWithRelationInput[] 1781 + cursor?: Prisma.SeasonWhereUniqueInput 1782 + take?: number 1783 + skip?: number 1784 + distinct?: Prisma.SeasonScalarFieldEnum | Prisma.SeasonScalarFieldEnum[] 1643 1785 } 1644 1786 1645 1787 /**
+2
backend/src/ingester/ingester.service.spec.ts
··· 69 69 getShowByTMDBId: jest.Mock; 70 70 getShowDetails: jest.Mock; 71 71 upsertShow: jest.Mock; 72 + syncShowMetadata: jest.Mock; 72 73 }; 73 74 let mockListsService: { 74 75 indexListRecord: jest.Mock; ··· 120 121 getShowByTMDBId: jest.fn(), 121 122 getShowDetails: jest.fn(), 122 123 upsertShow: jest.fn(), 124 + syncShowMetadata: jest.fn().mockResolvedValue(undefined), 123 125 }; 124 126 125 127 mockListsService = {
+7
backend/src/ingester/ingester.service.ts
··· 429 429 return; 430 430 } 431 431 } 432 + await this.showsService 433 + .syncShowMetadata(episodeRecord.showId) 434 + .catch((err) => 435 + this.logger.warn( 436 + `Failed to sync metadata for show ${episodeRecord.showId}: ${err instanceof Error ? err.message : String(err)}`, 437 + ), 438 + ); 432 439 433 440 await this.prisma.trackedEpisode.upsert({ 434 441 where: { rkey: evt.rkey },
+63
backend/src/shows/dto/show.dto.ts
··· 208 208 @ApiProperty() 209 209 watchCount: number; 210 210 211 + @ApiProperty({ description: "Total aired non-special episodes for the show" }) 212 + totalEpisodes: number; 213 + 214 + @ApiProperty({ 215 + description: "Distinct episodes the user has watched (non-special)", 216 + }) 217 + episodesWatched: number; 218 + 211 219 @ApiProperty() 212 220 latestWatchedDate: string; 213 221 ··· 469 477 @Min(1) 470 478 @Max(50) 471 479 pageSize?: number; 480 + 481 + @ApiPropertyOptional({ 482 + description: "Sort field", 483 + enum: ["lastWatched", "title", "progress"], 484 + default: "lastWatched", 485 + }) 486 + @IsOptional() 487 + @IsString() 488 + sortBy?: "lastWatched" | "title" | "progress"; 489 + 490 + @ApiPropertyOptional({ 491 + description: "Sort direction", 492 + enum: ["asc", "desc"], 493 + default: "desc", 494 + }) 495 + @IsOptional() 496 + @IsString() 497 + sortOrder?: "asc" | "desc"; 472 498 } 473 499 474 500 export class PaginatedUpNextResponseDto { ··· 494 520 495 521 @ApiProperty({ description: "Whether a next page exists" }) 496 522 hasNextPage: boolean; 523 + } 524 + 525 + export class LocalSeasonDto { 526 + @ApiProperty() 527 + seasonNumber: number; 528 + 529 + @ApiProperty() 530 + name: string; 531 + 532 + @ApiPropertyOptional() 533 + posterPath?: string | null; 534 + 535 + @ApiPropertyOptional() 536 + airDate?: string | null; 537 + 538 + @ApiProperty({ description: "Number of episodes stored locally" }) 539 + episodeCount: number; 540 + } 541 + 542 + export class LocalEpisodeDto { 543 + @ApiProperty() 544 + episodeNumber: number; 545 + 546 + @ApiProperty() 547 + seasonNumber: number; 548 + 549 + @ApiProperty() 550 + name: string; 551 + 552 + @ApiPropertyOptional() 553 + airDate?: string | null; 554 + 555 + @ApiPropertyOptional() 556 + overview?: string | null; 557 + 558 + @ApiPropertyOptional() 559 + stillPath?: string | null; 497 560 } 498 561 499 562 export class ReleaseCalendarItemDto {
+13 -1
backend/src/shows/shows-tmdb.service.ts
··· 6 6 type TMDBVideo, 7 7 } from "../tmdb/tmdb-trailer.util"; 8 8 9 + export interface TMDBSeasonSummary { 10 + id: number; 11 + name: string; 12 + season_number: number; 13 + episode_count?: number; 14 + poster_path?: string; 15 + air_date?: string; 16 + overview?: string; 17 + vote_average?: number; 18 + } 19 + 9 20 export interface TMDBShow { 10 21 id: number; 11 22 name: string; ··· 16 27 genres?: Array<{ id: number; name: string }>; 17 28 number_of_seasons?: number; 18 29 number_of_episodes?: number; 30 + seasons?: TMDBSeasonSummary[]; 19 31 popularity: number; 20 32 vote_average: number; 21 33 vote_count: number; ··· 321 333 } 322 334 323 335 if (!episode.air_date) { 324 - return true; 336 + return false; 325 337 } 326 338 327 339 return new Date(episode.air_date).getTime() <= Date.now();
+6
backend/src/shows/shows.controller.spec.ts
··· 35 35 getShowByTMDBId: jest.fn(), 36 36 getEpisodeWatchHistory: jest.fn(), 37 37 removeTrackedEpisodeById: jest.fn(), 38 + syncShowMetadata: jest.fn().mockResolvedValue(undefined), 39 + getLocalSeasons: jest.fn().mockResolvedValue([]), 40 + getLocalEpisodes: jest.fn().mockResolvedValue([]), 41 + getEpisodeContext: jest.fn(), 38 42 }; 39 43 40 44 const mockAuthService = { ··· 251 255 "did:plc:abc123", 252 256 2, 253 257 8, 258 + undefined, 259 + undefined, 254 260 ); 255 261 }); 256 262
+49 -2
backend/src/shows/shows.controller.ts
··· 25 25 import { 26 26 type DiscoverShowsDto, 27 27 EpisodeHistoryItemDto, 28 + LocalEpisodeDto, 29 + LocalSeasonDto, 28 30 MarkedEpisodesResponseDto, 29 31 MarkEpisodeWatchedDto, 30 32 MarkSeasonWatchedDto, ··· 75 77 @ApiResponse({ status: 200, type: TMDBShowDetailDto }) 76 78 async getShowDetails(@Param("showId") showId: string) { 77 79 const showData = await this.showsService.getShowDetails(showId); 78 - const show = await this.showsService.upsertShow(showData); 80 + const [show] = await Promise.all([ 81 + this.showsService.upsertShow(showData), 82 + this.showsService 83 + .syncShowMetadata(showId) 84 + .catch((err) => 85 + this.logger.warn( 86 + `Background sync failed for show ${showId}: ${err instanceof Error ? err.message : String(err)}`, 87 + ), 88 + ), 89 + ]); 79 90 const credits = await this.showsService.getShowCredits(showId); 80 91 81 92 return { ··· 95 106 return this.showsService.getSeasonDetails(showId, Number(seasonNumber)); 96 107 } 97 108 109 + @Get("tmdb/:showId/local-seasons") 110 + @ApiOperation({ 111 + summary: 112 + "Get seasons from local database (populated via sync on first interaction)", 113 + }) 114 + @ApiResponse({ status: 200, type: [LocalSeasonDto] }) 115 + async getLocalSeasons(@Param("showId") showId: string) { 116 + const seasons = await this.showsService.getLocalSeasons(showId); 117 + return seasons.map((s) => ({ 118 + seasonNumber: s.seasonNumber, 119 + name: s.name, 120 + posterPath: s.posterPath, 121 + airDate: s.airDate?.toISOString() ?? null, 122 + episodeCount: s._count.episodes, 123 + })); 124 + } 125 + 126 + @Get("tmdb/:showId/season/:seasonNumber/local-episodes") 127 + @ApiOperation({ 128 + summary: 129 + "Get episodes from local database (populated via sync on first interaction)", 130 + }) 131 + @ApiResponse({ status: 200, type: [LocalEpisodeDto] }) 132 + async getLocalEpisodes( 133 + @Param("showId") showId: string, 134 + @Param("seasonNumber") seasonNumber: string, 135 + ) { 136 + return this.showsService.getLocalEpisodes(showId, Number(seasonNumber)); 137 + } 138 + 98 139 @Get("tmdb/:showId/season/:seasonNumber/episode/:episodeNumber") 99 140 @ApiOperation({ summary: "Get episode details from TMDB" }) 100 141 @ApiResponse({ status: 200, type: TMDBEpisodeDto }) ··· 151 192 @Param("userDid") userDid: string, 152 193 @Query() query: PaginatedUpNextQueryDto, 153 194 ) { 154 - return this.showsService.getUserUpNext(userDid, query.page, query.pageSize); 195 + return this.showsService.getUserUpNext( 196 + userDid, 197 + query.page, 198 + query.pageSize, 199 + query.sortBy, 200 + query.sortOrder, 201 + ); 155 202 } 156 203 157 204 @Get("user/:userDid/release-calendar")
+54 -103
backend/src/shows/shows.service.spec.ts
··· 49 49 create: jest.fn(), 50 50 delete: jest.fn(), 51 51 deleteMany: jest.fn(), 52 + groupBy: jest.fn(), 52 53 }, 53 54 show: { 54 55 findUnique: jest.fn(), 55 56 upsert: jest.fn(), 56 57 update: jest.fn(), 57 58 }, 59 + season: { 60 + findFirst: jest.fn(), 61 + findMany: jest.fn(), 62 + upsert: jest.fn(), 63 + }, 64 + episode: { 65 + findFirst: jest.fn(), 66 + findMany: jest.fn(), 67 + upsert: jest.fn(), 68 + count: jest.fn(), 69 + groupBy: jest.fn(), 70 + }, 58 71 list: { 59 72 findFirst: jest.fn(), 60 73 }, 74 + $queryRaw: jest.fn(), 61 75 }; 62 76 63 77 const mockConfigService = { ··· 249 263 250 264 describe("getEpisodeContext", () => { 251 265 it("should move to the next aired episode across seasons", async () => { 266 + mockPrismaService.episode.count.mockResolvedValue(0); 267 + 252 268 mockFetch 253 269 .mockResolvedValueOnce({ 254 270 ok: true, ··· 306 322 307 323 describe("getUserUpNext", () => { 308 324 it("should return next episodes and omit caught-up shows", async () => { 309 - const showsTmdb = ( 310 - service as unknown as { 311 - showsTmdb: { 312 - getEpisodeContext: ( 313 - showId: string, 314 - seasonNumber: number, 315 - episodeNumber: number, 316 - ) => Promise<unknown>; 317 - getEpisodeDetails: ( 318 - showId: string, 319 - seasonNumber: number, 320 - episodeNumber: number, 321 - ) => Promise<unknown>; 322 - }; 323 - } 324 - ).showsTmdb; 325 - const getEpisodeContextSpy = jest.spyOn(showsTmdb, "getEpisodeContext"); 326 - const getEpisodeDetailsSpy = jest.spyOn(showsTmdb, "getEpisodeDetails"); 327 - 325 + // Query 1: anchors via distinct 328 326 mockPrismaService.trackedEpisode.findMany.mockResolvedValue([ 329 327 { 330 328 id: "tracked-1", ··· 344 342 colors: { primary: "#111111" }, 345 343 }, 346 344 }, 345 + ]); 346 + 347 + // Query 2: next episodes via raw SQL 348 + mockPrismaService.$queryRaw = jest.fn().mockResolvedValue([ 347 349 { 348 - id: "tracked-2", 349 350 showId: "show-1", 350 351 seasonNumber: 1, 351 - episodeNumber: 1, 352 - watchedDate: new Date("2024-01-09T00:00:00.000Z"), 353 - createdAt: new Date("2024-01-09T00:00:00.000Z"), 354 - show: { 355 - showId: "show-1", 356 - title: "Show One", 357 - posterPath: "/show-one.jpg", 358 - backdropPath: null, 359 - firstAirYear: 2024, 360 - firstAirDate: new Date("2024-01-01T00:00:00.000Z"), 361 - overview: "Overview 1", 362 - colors: { primary: "#111111" }, 363 - }, 352 + episodeNumber: 3, 353 + name: "Episode 3", 354 + airDate: new Date("2024-01-11T00:00:00.000Z"), 355 + overview: "Next up", 356 + stillPath: "/still-3.jpg", 364 357 }, 365 - { 366 - id: "tracked-3", 367 - showId: "show-2", 368 - seasonNumber: 2, 369 - episodeNumber: 8, 370 - watchedDate: new Date("2024-01-08T00:00:00.000Z"), 371 - createdAt: new Date("2024-01-08T00:00:00.000Z"), 372 - show: { 373 - showId: "show-2", 374 - title: "Show Two", 375 - posterPath: "/show-two.jpg", 376 - backdropPath: null, 377 - firstAirYear: 2023, 378 - firstAirDate: new Date("2023-01-01T00:00:00.000Z"), 379 - overview: "Overview 2", 380 - colors: { primary: "#222222" }, 381 - }, 382 - }, 358 + ]); 359 + 360 + // Query 3: total aired episodes 361 + mockPrismaService.episode = { 362 + ...mockPrismaService.episode, 363 + groupBy: jest 364 + .fn() 365 + .mockResolvedValue([{ showId: "show-1", _count: 10 }]), 366 + }; 367 + 368 + // Query 4: watched episodes groupBy 369 + mockPrismaService.trackedEpisode.groupBy = jest.fn().mockResolvedValue([ 370 + { showId: "show-1", seasonNumber: 1, episodeNumber: 1 }, 371 + { showId: "show-1", seasonNumber: 1, episodeNumber: 2 }, 383 372 ]); 384 373 385 374 mockPrismaService.show.findUnique.mockResolvedValue({ ··· 387 376 colors: { primary: "#111111" }, 388 377 }); 389 378 390 - getEpisodeContextSpy 391 - .mockResolvedValueOnce({ 392 - next: { seasonNumber: 1, episodeNumber: 3 }, 393 - previous: { seasonNumber: 1, episodeNumber: 1 }, 394 - }) 395 - .mockResolvedValueOnce({ 396 - next: null, 397 - previous: { seasonNumber: 2, episodeNumber: 7 }, 398 - }); 399 - 400 - getEpisodeDetailsSpy.mockResolvedValue({ 401 - episode_number: 3, 402 - season_number: 1, 403 - name: "Episode 3", 404 - air_date: "2024-01-11", 405 - overview: "Next up", 406 - still_path: "/still-3.jpg", 407 - }); 408 - 409 379 const result = await service.getUserUpNext("did:plc:abc123"); 410 380 411 - expect(result).toEqual({ 412 - items: [ 413 - { 414 - showId: "show-1", 415 - watchCount: 2, 416 - latestWatchedDate: "2024-01-10T00:00:00.000Z", 417 - lastWatched: { seasonNumber: 1, episodeNumber: 2 }, 418 - nextEpisode: { 419 - seasonNumber: 1, 420 - episodeNumber: 3, 421 - name: "Episode 3", 422 - airDate: "2024-01-11", 423 - overview: "Next up", 424 - stillPath: "/still-3.jpg", 425 - }, 426 - show: { 427 - showId: "show-1", 428 - title: "Show One", 429 - posterPath: "/show-one.jpg", 430 - backdropPath: undefined, 431 - firstAirYear: 2024, 432 - firstAirDate: "2024-01-01T00:00:00.000Z", 433 - overview: "Overview 1", 434 - colors: { primary: "#111111" }, 435 - }, 436 - }, 437 - ], 438 - total: 1, 439 - page: 1, 440 - pageSize: 8, 441 - totalPages: 1, 442 - hasPreviousPage: false, 443 - hasNextPage: false, 381 + expect(result.items).toHaveLength(1); 382 + expect(result.items[0]).toMatchObject({ 383 + showId: "show-1", 384 + totalEpisodes: 10, 385 + episodesWatched: 2, 386 + lastWatched: { seasonNumber: 1, episodeNumber: 2 }, 387 + nextEpisode: { 388 + seasonNumber: 1, 389 + episodeNumber: 3, 390 + name: "Episode 3", 391 + }, 444 392 }); 393 + expect(result.total).toBe(1); 394 + expect(result.page).toBe(1); 395 + expect(result.pageSize).toBe(8); 445 396 }); 446 397 }); 447 398
+370 -85
backend/src/shows/shows.service.ts
··· 9 9 import type { Main as EpisodeRecord } from "../lexicons/xyz/opnshelf/episode.defs"; 10 10 import { ColorExtractionService } from "../movies/color-extraction.service"; 11 11 import { PrismaService } from "../prisma/prisma.service"; 12 + import { Prisma } from "../generated/client"; 12 13 import { 13 14 ShowsTmdbService, 14 15 type TMDBCredits, ··· 148 149 previous: { seasonNumber: number; episodeNumber: number } | null; 149 150 next: { seasonNumber: number; episodeNumber: number } | null; 150 151 }> { 151 - return this.showsTmdb.getEpisodeContext( 152 - showId, 153 - seasonNumber, 154 - episodeNumber, 155 - ); 152 + return this.getEpisodeContextLocal(showId, seasonNumber, episodeNumber); 156 153 } 157 154 158 155 async getShowByTMDBId(showId: string) { ··· 198 195 }); 199 196 } 200 197 198 + async syncShowMetadata(showId: string): Promise<void> { 199 + const STALE_MS = 24 * 60 * 60 * 1000; 200 + const existingSeason = await this.prisma.season.findFirst({ 201 + where: { showId }, 202 + select: { updatedAt: true }, 203 + orderBy: { updatedAt: "desc" }, 204 + }); 205 + if ( 206 + existingSeason && 207 + Date.now() - existingSeason.updatedAt.getTime() < STALE_MS 208 + ) { 209 + return; 210 + } 211 + 212 + const show = await this.showsTmdb.getShowDetails(showId); 213 + const tmdbSeasons = (show.seasons ?? []).filter( 214 + (s) => s.season_number !== 0, 215 + ); 216 + 217 + for (const tmdbSeason of tmdbSeasons) { 218 + let seasonDetail: TMDBSeason; 219 + try { 220 + seasonDetail = await this.showsTmdb.getSeasonDetails( 221 + showId, 222 + tmdbSeason.season_number, 223 + ); 224 + } catch { 225 + this.logger.warn( 226 + `Failed to fetch season ${tmdbSeason.season_number} for show ${showId}`, 227 + ); 228 + continue; 229 + } 230 + 231 + const season = await this.prisma.season.upsert({ 232 + where: { 233 + showId_seasonNumber: { 234 + showId, 235 + seasonNumber: tmdbSeason.season_number, 236 + }, 237 + }, 238 + create: { 239 + tmdbId: tmdbSeason.id, 240 + showId, 241 + seasonNumber: tmdbSeason.season_number, 242 + name: tmdbSeason.name, 243 + posterPath: tmdbSeason.poster_path ?? null, 244 + airDate: tmdbSeason.air_date ? new Date(tmdbSeason.air_date) : null, 245 + episodeCount: tmdbSeason.episode_count ?? null, 246 + }, 247 + update: { 248 + tmdbId: tmdbSeason.id, 249 + name: tmdbSeason.name, 250 + posterPath: tmdbSeason.poster_path ?? null, 251 + airDate: tmdbSeason.air_date ? new Date(tmdbSeason.air_date) : null, 252 + episodeCount: tmdbSeason.episode_count ?? null, 253 + }, 254 + }); 255 + 256 + const episodes = seasonDetail.episodes ?? []; 257 + for (const ep of episodes) { 258 + await this.prisma.episode.upsert({ 259 + where: { 260 + showId_seasonNumber_episodeNumber: { 261 + showId, 262 + seasonNumber: tmdbSeason.season_number, 263 + episodeNumber: ep.episode_number, 264 + }, 265 + }, 266 + create: { 267 + tmdbId: ep.id, 268 + seasonId: season.id, 269 + showId, 270 + seasonNumber: tmdbSeason.season_number, 271 + episodeNumber: ep.episode_number, 272 + name: ep.name, 273 + airDate: ep.air_date ? new Date(ep.air_date) : null, 274 + overview: ep.overview ?? null, 275 + stillPath: ep.still_path ?? null, 276 + }, 277 + update: { 278 + tmdbId: ep.id, 279 + name: ep.name, 280 + airDate: ep.air_date ? new Date(ep.air_date) : null, 281 + overview: ep.overview ?? null, 282 + stillPath: ep.still_path ?? null, 283 + }, 284 + }); 285 + } 286 + } 287 + } 288 + 289 + async getEpisodeContextLocal( 290 + showId: string, 291 + seasonNumber: number, 292 + episodeNumber: number, 293 + ): Promise<{ 294 + previous: { seasonNumber: number; episodeNumber: number } | null; 295 + next: { seasonNumber: number; episodeNumber: number } | null; 296 + }> { 297 + const hasLocalData = await this.prisma.episode.count({ 298 + where: { showId }, 299 + }); 300 + if (hasLocalData === 0) { 301 + return this.showsTmdb.getEpisodeContext( 302 + showId, 303 + seasonNumber, 304 + episodeNumber, 305 + ); 306 + } 307 + 308 + const [previous, next] = await Promise.all([ 309 + this.prisma.episode.findFirst({ 310 + where: { 311 + showId, 312 + seasonNumber: { not: 0 }, 313 + OR: [ 314 + { 315 + seasonNumber, 316 + episodeNumber: { lt: episodeNumber }, 317 + }, 318 + { seasonNumber: { lt: seasonNumber, gt: 0 } }, 319 + ], 320 + }, 321 + orderBy: [{ seasonNumber: "desc" }, { episodeNumber: "desc" }], 322 + select: { seasonNumber: true, episodeNumber: true }, 323 + }), 324 + this.prisma.episode.findFirst({ 325 + where: { 326 + showId, 327 + seasonNumber: { not: 0 }, 328 + airDate: { not: null, lte: new Date() }, 329 + OR: [ 330 + { 331 + seasonNumber, 332 + episodeNumber: { gt: episodeNumber }, 333 + }, 334 + { seasonNumber: { gt: seasonNumber } }, 335 + ], 336 + }, 337 + orderBy: [{ seasonNumber: "asc" }, { episodeNumber: "asc" }], 338 + select: { seasonNumber: true, episodeNumber: true }, 339 + }), 340 + ]); 341 + 342 + return { previous, next }; 343 + } 344 + 345 + async getLocalSeasons(showId: string) { 346 + return this.prisma.season.findMany({ 347 + where: { showId, seasonNumber: { not: 0 } }, 348 + orderBy: { seasonNumber: "asc" }, 349 + include: { _count: { select: { episodes: true } } }, 350 + }); 351 + } 352 + 353 + async getLocalEpisodes(showId: string, seasonNumber: number) { 354 + return this.prisma.episode.findMany({ 355 + where: { showId, seasonNumber }, 356 + orderBy: { episodeNumber: "asc" }, 357 + }); 358 + } 359 + 201 360 async ensureShowHasColors(showId: string): Promise<{ 202 361 primary?: string; 203 362 secondary?: string; ··· 265 424 return Array.from(showMap.values()); 266 425 } 267 426 268 - async getUserUpNext(userDid: string, page: number = 1, pageSize: number = 8) { 269 - const trackedEpisodes = (await this.prisma.trackedEpisode.findMany({ 270 - where: { userDid }, 427 + async getUserUpNext( 428 + userDid: string, 429 + page: number = 1, 430 + pageSize: number = 8, 431 + sortBy: "lastWatched" | "title" | "progress" = "lastWatched", 432 + sortOrder: "asc" | "desc" = "desc", 433 + ) { 434 + // Query 1: one anchor per show via Prisma distinct (S0 excluded, tie-broken) 435 + const anchors = (await this.prisma.trackedEpisode.findMany({ 436 + where: { userDid, seasonNumber: { not: 0 } }, 437 + orderBy: [ 438 + { watchedDate: "desc" }, 439 + { createdAt: "desc" }, 440 + { seasonNumber: "desc" }, 441 + { episodeNumber: "desc" }, 442 + ], 443 + distinct: ["showId"], 271 444 include: { show: true }, 272 - orderBy: [{ watchedDate: "desc" }, { createdAt: "desc" }], 273 445 })) as TrackedEpisodeWithShow[]; 274 446 275 - const showMap = new Map< 276 - string, 277 - { 278 - latest: TrackedEpisodeWithShow; 279 - watchCount: number; 280 - latestWatchedDate: Date; 281 - } 282 - >(); 447 + if (anchors.length === 0) { 448 + return { 449 + items: [], 450 + total: 0, 451 + page: 1, 452 + pageSize: Math.min(Math.max(pageSize, 1), 50), 453 + totalPages: 0, 454 + hasPreviousPage: false, 455 + hasNextPage: false, 456 + }; 457 + } 458 + 459 + const showIds = anchors.map((a) => a.showId); 460 + const _anchorMap = new Map(anchors.map((a) => [a.showId, a])); 461 + const now = new Date(); 462 + 463 + // Build VALUES clause for the raw SQL query 464 + const anchorValues = anchors 465 + .map( 466 + (a) => 467 + `('${a.showId.replace(/'/g, "''")}', ${a.seasonNumber}, ${a.episodeNumber})`, 468 + ) 469 + .join(", "); 470 + 471 + // Queries 2-4 run in parallel 472 + const [nextEpisodeRows, totalsByShow, watchedRaw] = await Promise.all([ 473 + // Query 2: next episode for all anchors (raw SQL DISTINCT ON) 474 + this.prisma.$queryRaw< 475 + Array<{ 476 + showId: string; 477 + seasonNumber: number; 478 + episodeNumber: number; 479 + name: string; 480 + airDate: Date | null; 481 + overview: string | null; 482 + stillPath: string | null; 483 + }> 484 + >(Prisma.sql` 485 + SELECT DISTINCT ON (e."showId") 486 + e."showId", 487 + e."seasonNumber", 488 + e."episodeNumber", 489 + e."name", 490 + e."airDate", 491 + e."overview", 492 + e."stillPath" 493 + FROM "Episode" e 494 + JOIN (VALUES ${Prisma.raw(anchorValues)}) AS anchors("showId", "seasonNumber", "episodeNumber") 495 + ON e."showId" = anchors."showId" 496 + WHERE e."seasonNumber" != 0 497 + AND e."airDate" IS NOT NULL 498 + AND e."airDate" <= ${now} 499 + AND ( 500 + (e."seasonNumber" = anchors."seasonNumber" AND e."episodeNumber" > anchors."episodeNumber") 501 + OR e."seasonNumber" > anchors."seasonNumber" 502 + ) 503 + ORDER BY e."showId", e."seasonNumber" ASC, e."episodeNumber" ASC 504 + `), 283 505 284 - for (const tracked of trackedEpisodes) { 285 - const latestWatchedDate = tracked.watchedDate ?? tracked.createdAt; 286 - const existing = showMap.get(tracked.showId); 506 + // Query 3: total aired episodes per show 507 + this.prisma.episode.groupBy({ 508 + by: ["showId"], 509 + where: { 510 + showId: { in: showIds }, 511 + seasonNumber: { not: 0 }, 512 + airDate: { not: null, lte: now }, 513 + }, 514 + _count: true, 515 + }), 287 516 288 - if (!existing) { 289 - showMap.set(tracked.showId, { 290 - latest: tracked, 291 - watchCount: 1, 292 - latestWatchedDate, 293 - }); 294 - continue; 295 - } 517 + // Query 4: distinct watched episodes per show 518 + this.prisma.trackedEpisode.groupBy({ 519 + by: ["showId", "seasonNumber", "episodeNumber"], 520 + where: { 521 + userDid, 522 + showId: { in: showIds }, 523 + seasonNumber: { not: 0 }, 524 + }, 525 + }), 526 + ]); 296 527 297 - existing.watchCount += 1; 528 + // Build lookup maps 529 + const nextEpMap = new Map(nextEpisodeRows.map((r) => [r.showId, r])); 530 + const totalsMap = new Map(totalsByShow.map((r) => [r.showId, r._count])); 531 + const watchedCountMap = new Map<string, number>(); 532 + for (const row of watchedRaw) { 533 + watchedCountMap.set( 534 + row.showId, 535 + (watchedCountMap.get(row.showId) ?? 0) + 1, 536 + ); 298 537 } 299 538 300 - const allItems = await Promise.all( 301 - Array.from(showMap.values()).map( 302 - async ({ latest, watchCount, latestWatchedDate }) => { 303 - try { 304 - const context = await this.showsTmdb.getEpisodeContext( 305 - latest.showId, 306 - latest.seasonNumber, 307 - latest.episodeNumber, 308 - ); 539 + // Assembly: join, filter, sort 540 + const items: Array<{ 541 + showId: string; 542 + watchCount: number; 543 + totalEpisodes: number; 544 + episodesWatched: number; 545 + latestWatchedDate: string; 546 + lastWatched: { seasonNumber: number; episodeNumber: number }; 547 + nextEpisode: { 548 + seasonNumber: number; 549 + episodeNumber: number; 550 + name: string; 551 + airDate?: string; 552 + overview?: string; 553 + stillPath?: string; 554 + }; 555 + show: { 556 + showId: string; 557 + title: string; 558 + posterPath?: string; 559 + backdropPath?: string; 560 + firstAirYear?: number; 561 + firstAirDate?: string; 562 + overview?: string; 563 + colors?: unknown; 564 + }; 565 + }> = []; 309 566 310 - if (!context.next) { 311 - return null; 312 - } 567 + for (const anchor of anchors) { 568 + const nextEp = nextEpMap.get(anchor.showId); 569 + if (!nextEp) continue; 570 + 571 + const totalEpisodes = totalsMap.get(anchor.showId) ?? 0; 572 + const episodesWatched = watchedCountMap.get(anchor.showId) ?? 0; 573 + 574 + if (totalEpisodes > 0 && episodesWatched >= totalEpisodes) continue; 313 575 314 - const nextEpisode = await this.showsTmdb.getEpisodeDetails( 315 - latest.showId, 316 - context.next.seasonNumber, 317 - context.next.episodeNumber, 318 - ); 319 - const colors = await this.ensureShowHasColors(latest.showId); 576 + const colors = await this.ensureShowHasColors(anchor.showId); 577 + const latestWatchedDate = anchor.watchedDate ?? anchor.createdAt; 320 578 321 - return { 322 - showId: latest.showId, 323 - watchCount, 324 - latestWatchedDate: latestWatchedDate.toISOString(), 325 - lastWatched: { 326 - seasonNumber: latest.seasonNumber, 327 - episodeNumber: latest.episodeNumber, 328 - }, 329 - nextEpisode: { 330 - seasonNumber: nextEpisode.season_number, 331 - episodeNumber: nextEpisode.episode_number, 332 - name: nextEpisode.name, 333 - airDate: nextEpisode.air_date, 334 - overview: nextEpisode.overview, 335 - stillPath: nextEpisode.still_path, 336 - }, 337 - show: { 338 - showId: latest.show.showId, 339 - title: latest.show.title, 340 - posterPath: latest.show.posterPath ?? undefined, 341 - backdropPath: latest.show.backdropPath ?? undefined, 342 - firstAirYear: latest.show.firstAirYear ?? undefined, 343 - firstAirDate: latest.show.firstAirDate?.toISOString(), 344 - overview: latest.show.overview ?? undefined, 345 - colors: colors ?? undefined, 346 - }, 347 - }; 348 - } catch (error) { 349 - this.logger.warn( 350 - `Failed to compute up next for show ${latest.showId}: ${error instanceof Error ? error.message : String(error)}`, 351 - ); 352 - return null; 353 - } 579 + items.push({ 580 + showId: anchor.showId, 581 + watchCount: episodesWatched, 582 + totalEpisodes, 583 + episodesWatched, 584 + latestWatchedDate: latestWatchedDate.toISOString(), 585 + lastWatched: { 586 + seasonNumber: anchor.seasonNumber, 587 + episodeNumber: anchor.episodeNumber, 588 + }, 589 + nextEpisode: { 590 + seasonNumber: nextEp.seasonNumber, 591 + episodeNumber: nextEp.episodeNumber, 592 + name: nextEp.name, 593 + airDate: nextEp.airDate?.toISOString(), 594 + overview: nextEp.overview ?? undefined, 595 + stillPath: nextEp.stillPath ?? undefined, 596 + }, 597 + show: { 598 + showId: anchor.show.showId, 599 + title: anchor.show.title, 600 + posterPath: anchor.show.posterPath ?? undefined, 601 + backdropPath: anchor.show.backdropPath ?? undefined, 602 + firstAirYear: anchor.show.firstAirYear ?? undefined, 603 + firstAirDate: anchor.show.firstAirDate?.toISOString(), 604 + overview: anchor.show.overview ?? undefined, 605 + colors: colors ?? undefined, 354 606 }, 355 - ), 356 - ); 607 + }); 608 + } 357 609 358 - const items = allItems.filter( 359 - (item): item is NonNullable<typeof item> => item !== null, 360 - ); 610 + const dir = sortOrder === "asc" ? 1 : -1; 611 + items.sort((a, b) => { 612 + switch (sortBy) { 613 + case "title": 614 + return dir * a.show.title.localeCompare(b.show.title); 615 + case "progress": { 616 + const pA = 617 + a.totalEpisodes > 0 ? a.episodesWatched / a.totalEpisodes : 0; 618 + const pB = 619 + b.totalEpisodes > 0 ? b.episodesWatched / b.totalEpisodes : 0; 620 + return dir * (pA - pB); 621 + } 622 + default: 623 + return ( 624 + dir * 625 + (new Date(a.latestWatchedDate).getTime() - 626 + new Date(b.latestWatchedDate).getTime()) 627 + ); 628 + } 629 + }); 630 + 361 631 const safePageSize = Math.min(Math.max(pageSize, 1), 50); 362 632 const total = items.length; 363 633 const totalPages = total > 0 ? Math.ceil(total / safePageSize) : 0; ··· 652 922 ) { 653 923 const showData = await this.getShowDetails(showId); 654 924 await this.upsertShow(showData); 925 + await this.syncShowMetadata(showId).catch((err) => 926 + this.logger.warn( 927 + `Failed to sync metadata for show ${showId}: ${err instanceof Error ? err.message : String(err)}`, 928 + ), 929 + ); 655 930 656 931 return this.prisma.trackedEpisode.create({ 657 932 data: { ··· 866 1141 867 1142 const showData = await this.getShowDetails(showId); 868 1143 await this.upsertShow(showData); 1144 + await this.syncShowMetadata(showId).catch((err) => 1145 + this.logger.warn( 1146 + `Failed to sync metadata for show ${showId}: ${err instanceof Error ? err.message : String(err)}`, 1147 + ), 1148 + ); 869 1149 870 1150 const trackedEpisodes: Array<{ 871 1151 id: string; ··· 985 1265 986 1266 const showData = await this.getShowDetails(showId); 987 1267 await this.upsertShow(showData); 1268 + await this.syncShowMetadata(showId).catch((err) => 1269 + this.logger.warn( 1270 + `Failed to sync metadata for show ${showId}: ${err instanceof Error ? err.message : String(err)}`, 1271 + ), 1272 + ); 988 1273 989 1274 const trackedEpisodes: Array<{ 990 1275 id: string;
+1243 -2405
packages/api/src/generated/@tanstack/react-query.gen.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 - import { 4 - type DefaultError, 5 - type InfiniteData, 6 - infiniteQueryOptions, 7 - queryOptions, 8 - type UseMutationOptions, 9 - } from "@tanstack/react-query"; 3 + import { type DefaultError, type InfiniteData, infiniteQueryOptions, queryOptions, type UseMutationOptions } from '@tanstack/react-query'; 10 4 11 - import { client } from "../client.gen"; 12 - import { 13 - authControllerBlueskyProfileStatus, 14 - authControllerCallback, 15 - authControllerGetClientMetadata, 16 - authControllerLogin, 17 - authControllerLogout, 18 - authControllerMe, 19 - authControllerSignup, 20 - authControllerSuggestions, 21 - listsControllerAddItemToList, 22 - listsControllerCreateList, 23 - listsControllerDeleteList, 24 - listsControllerGetList, 25 - listsControllerGetListsForItem, 26 - listsControllerGetPublicUserList, 27 - listsControllerGetPublicUserLists, 28 - listsControllerGetUserLists, 29 - listsControllerRemoveItemFromList, 30 - listsControllerUpdateList, 31 - moviesControllerDeleteWatchHistoryEntry, 32 - moviesControllerDiscoverMovies, 33 - moviesControllerGetMovie, 34 - moviesControllerGetMovieDetails, 35 - moviesControllerGetMovieWatchHistory, 36 - moviesControllerGetUserMovies, 37 - moviesControllerGetUserMoviesPaginated, 38 - moviesControllerMarkWatched, 39 - moviesControllerSearchMovies, 40 - moviesControllerUnmarkWatched, 41 - type Options, 42 - searchControllerDiscoverAll, 43 - searchControllerSearchAll, 44 - shelfControllerGetUserActivitySummary, 45 - shelfControllerGetUserShelf, 46 - showsControllerDeleteEpisodeWatchHistoryEntry, 47 - showsControllerDiscoverShows, 48 - showsControllerGetEpisodeDetails, 49 - showsControllerGetSeasonDetails, 50 - showsControllerGetShow, 51 - showsControllerGetShowDetails, 52 - showsControllerGetShowWatchHistory, 53 - showsControllerGetUserEpisodesPaginated, 54 - showsControllerGetUserReleaseCalendar, 55 - showsControllerGetUserShows, 56 - showsControllerGetUserUpNext, 57 - showsControllerMarkSeasonWatched, 58 - showsControllerMarkShowWatched, 59 - showsControllerMarkWatched, 60 - showsControllerSearchShows, 61 - showsControllerUnmarkWatched, 62 - socialControllerFollow, 63 - socialControllerGetFeed, 64 - socialControllerGetFollowers, 65 - socialControllerGetFollowing, 66 - socialControllerGetRelationship, 67 - socialControllerGetWatchers, 68 - socialControllerSearchPeople, 69 - socialControllerUnfollow, 70 - usersControllerCompleteOnboarding, 71 - usersControllerDeleteMyAccount, 72 - usersControllerDeleteMyAvatar, 73 - usersControllerFetchMyTraktPublicHistory, 74 - usersControllerGetAvatar, 75 - usersControllerGetMyCurrentTraktImport, 76 - usersControllerGetMySettings, 77 - usersControllerGetPublicProfile, 78 - usersControllerImportMyBlueskyFollows, 79 - usersControllerImportMyHistory, 80 - usersControllerStartMyTraktImport, 81 - usersControllerUpdateMyProfile, 82 - usersControllerUpdateMySettings, 83 - usersControllerUploadMyAvatar, 84 - } from "../sdk.gen"; 85 - import type { 86 - AuthControllerBlueskyProfileStatusData, 87 - AuthControllerBlueskyProfileStatusResponse, 88 - AuthControllerCallbackData, 89 - AuthControllerGetClientMetadataData, 90 - AuthControllerLoginData, 91 - AuthControllerLogoutData, 92 - AuthControllerMeData, 93 - AuthControllerMeResponse, 94 - AuthControllerSignupData, 95 - AuthControllerSuggestionsData, 96 - ListsControllerAddItemToListData, 97 - ListsControllerCreateListData, 98 - ListsControllerCreateListResponse, 99 - ListsControllerDeleteListData, 100 - ListsControllerGetListData, 101 - ListsControllerGetListResponse, 102 - ListsControllerGetListsForItemData, 103 - ListsControllerGetListsForItemResponse, 104 - ListsControllerGetPublicUserListData, 105 - ListsControllerGetPublicUserListResponse, 106 - ListsControllerGetPublicUserListsData, 107 - ListsControllerGetPublicUserListsResponse, 108 - ListsControllerGetUserListsData, 109 - ListsControllerGetUserListsResponse, 110 - ListsControllerRemoveItemFromListData, 111 - ListsControllerUpdateListData, 112 - ListsControllerUpdateListResponse, 113 - MoviesControllerDeleteWatchHistoryEntryData, 114 - MoviesControllerDeleteWatchHistoryEntryResponse, 115 - MoviesControllerDiscoverMoviesData, 116 - MoviesControllerDiscoverMoviesResponse, 117 - MoviesControllerGetMovieData, 118 - MoviesControllerGetMovieDetailsData, 119 - MoviesControllerGetMovieDetailsResponse, 120 - MoviesControllerGetMovieResponse, 121 - MoviesControllerGetMovieWatchHistoryData, 122 - MoviesControllerGetMovieWatchHistoryResponse, 123 - MoviesControllerGetUserMoviesData, 124 - MoviesControllerGetUserMoviesPaginatedData, 125 - MoviesControllerGetUserMoviesPaginatedResponse, 126 - MoviesControllerGetUserMoviesResponse, 127 - MoviesControllerMarkWatchedData, 128 - MoviesControllerMarkWatchedResponse, 129 - MoviesControllerSearchMoviesData, 130 - MoviesControllerSearchMoviesResponse, 131 - MoviesControllerUnmarkWatchedData, 132 - MoviesControllerUnmarkWatchedResponse, 133 - SearchControllerDiscoverAllData, 134 - SearchControllerDiscoverAllResponse, 135 - SearchControllerSearchAllData, 136 - SearchControllerSearchAllResponse, 137 - ShelfControllerGetUserActivitySummaryData, 138 - ShelfControllerGetUserActivitySummaryResponse, 139 - ShelfControllerGetUserShelfData, 140 - ShelfControllerGetUserShelfResponse, 141 - ShowsControllerDeleteEpisodeWatchHistoryEntryData, 142 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, 143 - ShowsControllerDiscoverShowsData, 144 - ShowsControllerDiscoverShowsResponse, 145 - ShowsControllerGetEpisodeDetailsData, 146 - ShowsControllerGetEpisodeDetailsResponse, 147 - ShowsControllerGetSeasonDetailsData, 148 - ShowsControllerGetSeasonDetailsResponse, 149 - ShowsControllerGetShowData, 150 - ShowsControllerGetShowDetailsData, 151 - ShowsControllerGetShowDetailsResponse, 152 - ShowsControllerGetShowResponse, 153 - ShowsControllerGetShowWatchHistoryData, 154 - ShowsControllerGetShowWatchHistoryResponse, 155 - ShowsControllerGetUserEpisodesPaginatedData, 156 - ShowsControllerGetUserEpisodesPaginatedResponse, 157 - ShowsControllerGetUserReleaseCalendarData, 158 - ShowsControllerGetUserReleaseCalendarResponse, 159 - ShowsControllerGetUserShowsData, 160 - ShowsControllerGetUserShowsResponse, 161 - ShowsControllerGetUserUpNextData, 162 - ShowsControllerGetUserUpNextResponse, 163 - ShowsControllerMarkSeasonWatchedData, 164 - ShowsControllerMarkSeasonWatchedResponse, 165 - ShowsControllerMarkShowWatchedData, 166 - ShowsControllerMarkShowWatchedResponse, 167 - ShowsControllerMarkWatchedData, 168 - ShowsControllerMarkWatchedResponse, 169 - ShowsControllerSearchShowsData, 170 - ShowsControllerSearchShowsResponse, 171 - ShowsControllerUnmarkWatchedData, 172 - ShowsControllerUnmarkWatchedResponse, 173 - SocialControllerFollowData, 174 - SocialControllerFollowResponse, 175 - SocialControllerGetFeedData, 176 - SocialControllerGetFeedResponse, 177 - SocialControllerGetFollowersData, 178 - SocialControllerGetFollowersResponse, 179 - SocialControllerGetFollowingData, 180 - SocialControllerGetFollowingResponse, 181 - SocialControllerGetRelationshipData, 182 - SocialControllerGetRelationshipResponse, 183 - SocialControllerGetWatchersData, 184 - SocialControllerGetWatchersResponse, 185 - SocialControllerSearchPeopleData, 186 - SocialControllerSearchPeopleResponse, 187 - SocialControllerUnfollowData, 188 - SocialControllerUnfollowResponse, 189 - UsersControllerCompleteOnboardingData, 190 - UsersControllerCompleteOnboardingResponse, 191 - UsersControllerDeleteMyAccountData, 192 - UsersControllerDeleteMyAccountResponse, 193 - UsersControllerDeleteMyAvatarData, 194 - UsersControllerDeleteMyAvatarResponse, 195 - UsersControllerFetchMyTraktPublicHistoryData, 196 - UsersControllerFetchMyTraktPublicHistoryResponse, 197 - UsersControllerGetAvatarData, 198 - UsersControllerGetMyCurrentTraktImportData, 199 - UsersControllerGetMyCurrentTraktImportResponse, 200 - UsersControllerGetMySettingsData, 201 - UsersControllerGetMySettingsResponse, 202 - UsersControllerGetPublicProfileData, 203 - UsersControllerGetPublicProfileResponse, 204 - UsersControllerImportMyBlueskyFollowsData, 205 - UsersControllerImportMyBlueskyFollowsResponse, 206 - UsersControllerImportMyHistoryData, 207 - UsersControllerImportMyHistoryResponse, 208 - UsersControllerStartMyTraktImportData, 209 - UsersControllerStartMyTraktImportResponse, 210 - UsersControllerUpdateMyProfileData, 211 - UsersControllerUpdateMyProfileResponse, 212 - UsersControllerUpdateMySettingsData, 213 - UsersControllerUpdateMySettingsResponse, 214 - UsersControllerUploadMyAvatarData, 215 - UsersControllerUploadMyAvatarResponse, 216 - } from "../types.gen"; 5 + import { client } from '../client.gen'; 6 + import { authControllerBlueskyProfileStatus, authControllerCallback, authControllerGetClientMetadata, authControllerLogin, authControllerLogout, authControllerMe, authControllerSignup, authControllerSuggestions, listsControllerAddItemToList, listsControllerCreateList, listsControllerDeleteList, listsControllerGetList, listsControllerGetListsForItem, listsControllerGetPublicUserList, listsControllerGetPublicUserLists, listsControllerGetUserLists, listsControllerRemoveItemFromList, listsControllerUpdateList, moviesControllerDeleteWatchHistoryEntry, moviesControllerDiscoverMovies, moviesControllerGetMovie, moviesControllerGetMovieDetails, moviesControllerGetMovieWatchHistory, moviesControllerGetUserMovies, moviesControllerGetUserMoviesPaginated, moviesControllerMarkWatched, moviesControllerSearchMovies, moviesControllerUnmarkWatched, type Options, searchControllerDiscoverAll, searchControllerSearchAll, shelfControllerGetUserActivitySummary, shelfControllerGetUserShelf, showsControllerDeleteEpisodeWatchHistoryEntry, showsControllerDiscoverShows, showsControllerGetEpisodeDetails, showsControllerGetLocalEpisodes, showsControllerGetLocalSeasons, showsControllerGetSeasonDetails, showsControllerGetShow, showsControllerGetShowDetails, showsControllerGetShowWatchHistory, showsControllerGetUserEpisodesPaginated, showsControllerGetUserReleaseCalendar, showsControllerGetUserShows, showsControllerGetUserUpNext, showsControllerMarkSeasonWatched, showsControllerMarkShowWatched, showsControllerMarkWatched, showsControllerSearchShows, showsControllerUnmarkWatched, socialControllerFollow, socialControllerGetFeed, socialControllerGetFollowers, socialControllerGetFollowing, socialControllerGetRelationship, socialControllerGetWatchers, socialControllerSearchPeople, socialControllerUnfollow, usersControllerCompleteOnboarding, usersControllerDeleteMyAccount, usersControllerDeleteMyAvatar, usersControllerFetchMyTraktPublicHistory, usersControllerGetAvatar, usersControllerGetMyCurrentTraktImport, usersControllerGetMySettings, usersControllerGetPublicProfile, usersControllerImportMyBlueskyFollows, usersControllerImportMyHistory, usersControllerStartMyTraktImport, usersControllerUpdateMyProfile, usersControllerUpdateMySettings, usersControllerUploadMyAvatar } from '../sdk.gen'; 7 + import type { AuthControllerBlueskyProfileStatusData, AuthControllerBlueskyProfileStatusResponse, AuthControllerCallbackData, AuthControllerGetClientMetadataData, AuthControllerLoginData, AuthControllerLogoutData, AuthControllerMeData, AuthControllerMeResponse, AuthControllerSignupData, AuthControllerSuggestionsData, ListsControllerAddItemToListData, ListsControllerCreateListData, ListsControllerCreateListResponse, ListsControllerDeleteListData, ListsControllerGetListData, ListsControllerGetListResponse, ListsControllerGetListsForItemData, ListsControllerGetListsForItemResponse, ListsControllerGetPublicUserListData, ListsControllerGetPublicUserListResponse, ListsControllerGetPublicUserListsData, ListsControllerGetPublicUserListsResponse, ListsControllerGetUserListsData, ListsControllerGetUserListsResponse, ListsControllerRemoveItemFromListData, ListsControllerUpdateListData, ListsControllerUpdateListResponse, MoviesControllerDeleteWatchHistoryEntryData, MoviesControllerDeleteWatchHistoryEntryResponse, MoviesControllerDiscoverMoviesData, MoviesControllerDiscoverMoviesResponse, MoviesControllerGetMovieData, MoviesControllerGetMovieDetailsData, MoviesControllerGetMovieDetailsResponse, MoviesControllerGetMovieResponse, MoviesControllerGetMovieWatchHistoryData, MoviesControllerGetMovieWatchHistoryResponse, MoviesControllerGetUserMoviesData, MoviesControllerGetUserMoviesPaginatedData, MoviesControllerGetUserMoviesPaginatedResponse, MoviesControllerGetUserMoviesResponse, MoviesControllerMarkWatchedData, MoviesControllerMarkWatchedResponse, MoviesControllerSearchMoviesData, MoviesControllerSearchMoviesResponse, MoviesControllerUnmarkWatchedData, MoviesControllerUnmarkWatchedResponse, SearchControllerDiscoverAllData, SearchControllerDiscoverAllResponse, SearchControllerSearchAllData, SearchControllerSearchAllResponse, ShelfControllerGetUserActivitySummaryData, ShelfControllerGetUserActivitySummaryResponse, ShelfControllerGetUserShelfData, ShelfControllerGetUserShelfResponse, ShowsControllerDeleteEpisodeWatchHistoryEntryData, ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, ShowsControllerDiscoverShowsData, ShowsControllerDiscoverShowsResponse, ShowsControllerGetEpisodeDetailsData, ShowsControllerGetEpisodeDetailsResponse, ShowsControllerGetLocalEpisodesData, ShowsControllerGetLocalEpisodesResponse, ShowsControllerGetLocalSeasonsData, ShowsControllerGetLocalSeasonsResponse, ShowsControllerGetSeasonDetailsData, ShowsControllerGetSeasonDetailsResponse, ShowsControllerGetShowData, ShowsControllerGetShowDetailsData, ShowsControllerGetShowDetailsResponse, ShowsControllerGetShowResponse, ShowsControllerGetShowWatchHistoryData, ShowsControllerGetShowWatchHistoryResponse, ShowsControllerGetUserEpisodesPaginatedData, ShowsControllerGetUserEpisodesPaginatedResponse, ShowsControllerGetUserReleaseCalendarData, ShowsControllerGetUserReleaseCalendarResponse, ShowsControllerGetUserShowsData, ShowsControllerGetUserShowsResponse, ShowsControllerGetUserUpNextData, ShowsControllerGetUserUpNextResponse, ShowsControllerMarkSeasonWatchedData, ShowsControllerMarkSeasonWatchedResponse, ShowsControllerMarkShowWatchedData, ShowsControllerMarkShowWatchedResponse, ShowsControllerMarkWatchedData, ShowsControllerMarkWatchedResponse, ShowsControllerSearchShowsData, ShowsControllerSearchShowsResponse, ShowsControllerUnmarkWatchedData, ShowsControllerUnmarkWatchedResponse, SocialControllerFollowData, SocialControllerFollowResponse, SocialControllerGetFeedData, SocialControllerGetFeedResponse, SocialControllerGetFollowersData, SocialControllerGetFollowersResponse, SocialControllerGetFollowingData, SocialControllerGetFollowingResponse, SocialControllerGetRelationshipData, SocialControllerGetRelationshipResponse, SocialControllerGetWatchersData, SocialControllerGetWatchersResponse, SocialControllerSearchPeopleData, SocialControllerSearchPeopleResponse, SocialControllerUnfollowData, SocialControllerUnfollowResponse, UsersControllerCompleteOnboardingData, UsersControllerCompleteOnboardingResponse, UsersControllerDeleteMyAccountData, UsersControllerDeleteMyAccountResponse, UsersControllerDeleteMyAvatarData, UsersControllerDeleteMyAvatarResponse, UsersControllerFetchMyTraktPublicHistoryData, UsersControllerFetchMyTraktPublicHistoryResponse, UsersControllerGetAvatarData, UsersControllerGetMyCurrentTraktImportData, UsersControllerGetMyCurrentTraktImportResponse, UsersControllerGetMySettingsData, UsersControllerGetMySettingsResponse, UsersControllerGetPublicProfileData, UsersControllerGetPublicProfileResponse, UsersControllerImportMyBlueskyFollowsData, UsersControllerImportMyBlueskyFollowsResponse, UsersControllerImportMyHistoryData, UsersControllerImportMyHistoryResponse, UsersControllerStartMyTraktImportData, UsersControllerStartMyTraktImportResponse, UsersControllerUpdateMyProfileData, UsersControllerUpdateMyProfileResponse, UsersControllerUpdateMySettingsData, UsersControllerUpdateMySettingsResponse, UsersControllerUploadMyAvatarData, UsersControllerUploadMyAvatarResponse } from '../types.gen'; 217 8 218 9 export type QueryKey<TOptions extends Options> = [ 219 - Pick<TOptions, "baseUrl" | "body" | "headers" | "path" | "query"> & { 220 - _id: string; 221 - _infinite?: boolean; 222 - tags?: ReadonlyArray<string>; 223 - }, 10 + Pick<TOptions, 'baseUrl' | 'body' | 'headers' | 'path' | 'query'> & { 11 + _id: string; 12 + _infinite?: boolean; 13 + tags?: ReadonlyArray<string>; 14 + } 224 15 ]; 225 16 226 - const createQueryKey = <TOptions extends Options>( 227 - id: string, 228 - options?: TOptions, 229 - infinite?: boolean, 230 - tags?: ReadonlyArray<string>, 231 - ): [QueryKey<TOptions>[0]] => { 232 - const params: QueryKey<TOptions>[0] = { 233 - _id: id, 234 - baseUrl: 235 - options?.baseUrl || (options?.client ?? client).getConfig().baseUrl, 236 - } as QueryKey<TOptions>[0]; 237 - if (infinite) { 238 - params._infinite = infinite; 239 - } 240 - if (tags) { 241 - params.tags = tags; 242 - } 243 - if (options?.body) { 244 - params.body = options.body; 245 - } 246 - if (options?.headers) { 247 - params.headers = options.headers; 248 - } 249 - if (options?.path) { 250 - params.path = options.path; 251 - } 252 - if (options?.query) { 253 - params.query = options.query; 254 - } 255 - return [params]; 17 + const createQueryKey = <TOptions extends Options>(id: string, options?: TOptions, infinite?: boolean, tags?: ReadonlyArray<string>): [ 18 + QueryKey<TOptions>[0] 19 + ] => { 20 + const params: QueryKey<TOptions>[0] = { _id: id, baseUrl: options?.baseUrl || (options?.client ?? client).getConfig().baseUrl } as QueryKey<TOptions>[0]; 21 + if (infinite) { 22 + params._infinite = infinite; 23 + } 24 + if (tags) { 25 + params.tags = tags; 26 + } 27 + if (options?.body) { 28 + params.body = options.body; 29 + } 30 + if (options?.headers) { 31 + params.headers = options.headers; 32 + } 33 + if (options?.path) { 34 + params.path = options.path; 35 + } 36 + if (options?.query) { 37 + params.query = options.query; 38 + } 39 + return [params]; 256 40 }; 257 41 258 - export const moviesControllerSearchMoviesQueryKey = ( 259 - options: Options<MoviesControllerSearchMoviesData>, 260 - ) => createQueryKey("moviesControllerSearchMovies", options); 42 + export const moviesControllerSearchMoviesQueryKey = (options: Options<MoviesControllerSearchMoviesData>) => createQueryKey('moviesControllerSearchMovies', options); 261 43 262 44 /** 263 45 * Search movies from TMDB 264 46 */ 265 - export const moviesControllerSearchMoviesOptions = ( 266 - options: Options<MoviesControllerSearchMoviesData>, 267 - ) => 268 - queryOptions< 269 - MoviesControllerSearchMoviesResponse, 270 - DefaultError, 271 - MoviesControllerSearchMoviesResponse, 272 - ReturnType<typeof moviesControllerSearchMoviesQueryKey> 273 - >({ 274 - queryFn: async ({ queryKey, signal }) => { 275 - const { data } = await moviesControllerSearchMovies({ 276 - ...options, 277 - ...queryKey[0], 278 - signal, 279 - throwOnError: true, 280 - }); 281 - return data; 282 - }, 283 - queryKey: moviesControllerSearchMoviesQueryKey(options), 284 - }); 47 + export const moviesControllerSearchMoviesOptions = (options: Options<MoviesControllerSearchMoviesData>) => queryOptions<MoviesControllerSearchMoviesResponse, DefaultError, MoviesControllerSearchMoviesResponse, ReturnType<typeof moviesControllerSearchMoviesQueryKey>>({ 48 + queryFn: async ({ queryKey, signal }) => { 49 + const { data } = await moviesControllerSearchMovies({ 50 + ...options, 51 + ...queryKey[0], 52 + signal, 53 + throwOnError: true 54 + }); 55 + return data; 56 + }, 57 + queryKey: moviesControllerSearchMoviesQueryKey(options) 58 + }); 285 59 286 - export const moviesControllerDiscoverMoviesQueryKey = ( 287 - options?: Options<MoviesControllerDiscoverMoviesData>, 288 - ) => createQueryKey("moviesControllerDiscoverMovies", options); 60 + export const moviesControllerDiscoverMoviesQueryKey = (options?: Options<MoviesControllerDiscoverMoviesData>) => createQueryKey('moviesControllerDiscoverMovies', options); 289 61 290 62 /** 291 63 * Discover popular movies from TMDB 292 64 */ 293 - export const moviesControllerDiscoverMoviesOptions = ( 294 - options?: Options<MoviesControllerDiscoverMoviesData>, 295 - ) => 296 - queryOptions< 297 - MoviesControllerDiscoverMoviesResponse, 298 - DefaultError, 299 - MoviesControllerDiscoverMoviesResponse, 300 - ReturnType<typeof moviesControllerDiscoverMoviesQueryKey> 301 - >({ 302 - queryFn: async ({ queryKey, signal }) => { 303 - const { data } = await moviesControllerDiscoverMovies({ 304 - ...options, 305 - ...queryKey[0], 306 - signal, 307 - throwOnError: true, 308 - }); 309 - return data; 310 - }, 311 - queryKey: moviesControllerDiscoverMoviesQueryKey(options), 312 - }); 65 + export const moviesControllerDiscoverMoviesOptions = (options?: Options<MoviesControllerDiscoverMoviesData>) => queryOptions<MoviesControllerDiscoverMoviesResponse, DefaultError, MoviesControllerDiscoverMoviesResponse, ReturnType<typeof moviesControllerDiscoverMoviesQueryKey>>({ 66 + queryFn: async ({ queryKey, signal }) => { 67 + const { data } = await moviesControllerDiscoverMovies({ 68 + ...options, 69 + ...queryKey[0], 70 + signal, 71 + throwOnError: true 72 + }); 73 + return data; 74 + }, 75 + queryKey: moviesControllerDiscoverMoviesQueryKey(options) 76 + }); 313 77 314 - export const moviesControllerGetMovieDetailsQueryKey = ( 315 - options: Options<MoviesControllerGetMovieDetailsData>, 316 - ) => createQueryKey("moviesControllerGetMovieDetails", options); 78 + export const moviesControllerGetMovieDetailsQueryKey = (options: Options<MoviesControllerGetMovieDetailsData>) => createQueryKey('moviesControllerGetMovieDetails', options); 317 79 318 80 /** 319 81 * Get movie details from TMDB 320 82 */ 321 - export const moviesControllerGetMovieDetailsOptions = ( 322 - options: Options<MoviesControllerGetMovieDetailsData>, 323 - ) => 324 - queryOptions< 325 - MoviesControllerGetMovieDetailsResponse, 326 - DefaultError, 327 - MoviesControllerGetMovieDetailsResponse, 328 - ReturnType<typeof moviesControllerGetMovieDetailsQueryKey> 329 - >({ 330 - queryFn: async ({ queryKey, signal }) => { 331 - const { data } = await moviesControllerGetMovieDetails({ 332 - ...options, 333 - ...queryKey[0], 334 - signal, 335 - throwOnError: true, 336 - }); 337 - return data; 338 - }, 339 - queryKey: moviesControllerGetMovieDetailsQueryKey(options), 340 - }); 83 + export const moviesControllerGetMovieDetailsOptions = (options: Options<MoviesControllerGetMovieDetailsData>) => queryOptions<MoviesControllerGetMovieDetailsResponse, DefaultError, MoviesControllerGetMovieDetailsResponse, ReturnType<typeof moviesControllerGetMovieDetailsQueryKey>>({ 84 + queryFn: async ({ queryKey, signal }) => { 85 + const { data } = await moviesControllerGetMovieDetails({ 86 + ...options, 87 + ...queryKey[0], 88 + signal, 89 + throwOnError: true 90 + }); 91 + return data; 92 + }, 93 + queryKey: moviesControllerGetMovieDetailsQueryKey(options) 94 + }); 341 95 342 - export const moviesControllerGetUserMoviesQueryKey = ( 343 - options: Options<MoviesControllerGetUserMoviesData>, 344 - ) => createQueryKey("moviesControllerGetUserMovies", options); 96 + export const moviesControllerGetUserMoviesQueryKey = (options: Options<MoviesControllerGetUserMoviesData>) => createQueryKey('moviesControllerGetUserMovies', options); 345 97 346 98 /** 347 99 * Get tracked movies for a user 348 100 */ 349 - export const moviesControllerGetUserMoviesOptions = ( 350 - options: Options<MoviesControllerGetUserMoviesData>, 351 - ) => 352 - queryOptions< 353 - MoviesControllerGetUserMoviesResponse, 354 - DefaultError, 355 - MoviesControllerGetUserMoviesResponse, 356 - ReturnType<typeof moviesControllerGetUserMoviesQueryKey> 357 - >({ 358 - queryFn: async ({ queryKey, signal }) => { 359 - const { data } = await moviesControllerGetUserMovies({ 360 - ...options, 361 - ...queryKey[0], 362 - signal, 363 - throwOnError: true, 364 - }); 365 - return data; 366 - }, 367 - queryKey: moviesControllerGetUserMoviesQueryKey(options), 368 - }); 101 + export const moviesControllerGetUserMoviesOptions = (options: Options<MoviesControllerGetUserMoviesData>) => queryOptions<MoviesControllerGetUserMoviesResponse, DefaultError, MoviesControllerGetUserMoviesResponse, ReturnType<typeof moviesControllerGetUserMoviesQueryKey>>({ 102 + queryFn: async ({ queryKey, signal }) => { 103 + const { data } = await moviesControllerGetUserMovies({ 104 + ...options, 105 + ...queryKey[0], 106 + signal, 107 + throwOnError: true 108 + }); 109 + return data; 110 + }, 111 + queryKey: moviesControllerGetUserMoviesQueryKey(options) 112 + }); 369 113 370 - export const moviesControllerGetUserMoviesPaginatedQueryKey = ( 371 - options: Options<MoviesControllerGetUserMoviesPaginatedData>, 372 - ) => createQueryKey("moviesControllerGetUserMoviesPaginated", options); 114 + export const moviesControllerGetUserMoviesPaginatedQueryKey = (options: Options<MoviesControllerGetUserMoviesPaginatedData>) => createQueryKey('moviesControllerGetUserMoviesPaginated', options); 373 115 374 116 /** 375 117 * Get paginated tracked movies for a user 376 118 */ 377 - export const moviesControllerGetUserMoviesPaginatedOptions = ( 378 - options: Options<MoviesControllerGetUserMoviesPaginatedData>, 379 - ) => 380 - queryOptions< 381 - MoviesControllerGetUserMoviesPaginatedResponse, 382 - DefaultError, 383 - MoviesControllerGetUserMoviesPaginatedResponse, 384 - ReturnType<typeof moviesControllerGetUserMoviesPaginatedQueryKey> 385 - >({ 386 - queryFn: async ({ queryKey, signal }) => { 387 - const { data } = await moviesControllerGetUserMoviesPaginated({ 388 - ...options, 389 - ...queryKey[0], 390 - signal, 391 - throwOnError: true, 392 - }); 393 - return data; 394 - }, 395 - queryKey: moviesControllerGetUserMoviesPaginatedQueryKey(options), 396 - }); 119 + export const moviesControllerGetUserMoviesPaginatedOptions = (options: Options<MoviesControllerGetUserMoviesPaginatedData>) => queryOptions<MoviesControllerGetUserMoviesPaginatedResponse, DefaultError, MoviesControllerGetUserMoviesPaginatedResponse, ReturnType<typeof moviesControllerGetUserMoviesPaginatedQueryKey>>({ 120 + queryFn: async ({ queryKey, signal }) => { 121 + const { data } = await moviesControllerGetUserMoviesPaginated({ 122 + ...options, 123 + ...queryKey[0], 124 + signal, 125 + throwOnError: true 126 + }); 127 + return data; 128 + }, 129 + queryKey: moviesControllerGetUserMoviesPaginatedQueryKey(options) 130 + }); 397 131 398 - const createInfiniteParams = < 399 - K extends Pick<QueryKey<Options>[0], "body" | "headers" | "path" | "query">, 400 - >( 401 - queryKey: QueryKey<Options>, 402 - page: K, 403 - ) => { 404 - const params = { ...queryKey[0] }; 405 - if (page.body) { 406 - params.body = { 407 - ...(queryKey[0].body as any), 408 - ...(page.body as any), 409 - }; 410 - } 411 - if (page.headers) { 412 - params.headers = { 413 - ...queryKey[0].headers, 414 - ...page.headers, 415 - }; 416 - } 417 - if (page.path) { 418 - params.path = { 419 - ...(queryKey[0].path as any), 420 - ...(page.path as any), 421 - }; 422 - } 423 - if (page.query) { 424 - params.query = { 425 - ...(queryKey[0].query as any), 426 - ...(page.query as any), 427 - }; 428 - } 429 - return params as unknown as typeof page; 132 + const createInfiniteParams = <K extends Pick<QueryKey<Options>[0], 'body' | 'headers' | 'path' | 'query'>>(queryKey: QueryKey<Options>, page: K) => { 133 + const params = { ...queryKey[0] }; 134 + if (page.body) { 135 + params.body = { 136 + ...queryKey[0].body as any, 137 + ...page.body as any 138 + }; 139 + } 140 + if (page.headers) { 141 + params.headers = { 142 + ...queryKey[0].headers, 143 + ...page.headers 144 + }; 145 + } 146 + if (page.path) { 147 + params.path = { 148 + ...queryKey[0].path as any, 149 + ...page.path as any 150 + }; 151 + } 152 + if (page.query) { 153 + params.query = { 154 + ...queryKey[0].query as any, 155 + ...page.query as any 156 + }; 157 + } 158 + return params as unknown as typeof page; 430 159 }; 431 160 432 - export const moviesControllerGetUserMoviesPaginatedInfiniteQueryKey = ( 433 - options: Options<MoviesControllerGetUserMoviesPaginatedData>, 434 - ): QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>> => 435 - createQueryKey("moviesControllerGetUserMoviesPaginated", options, true); 161 + export const moviesControllerGetUserMoviesPaginatedInfiniteQueryKey = (options: Options<MoviesControllerGetUserMoviesPaginatedData>): QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>> => createQueryKey('moviesControllerGetUserMoviesPaginated', options, true); 436 162 437 163 /** 438 164 * Get paginated tracked movies for a user 439 165 */ 440 - export const moviesControllerGetUserMoviesPaginatedInfiniteOptions = ( 441 - options: Options<MoviesControllerGetUserMoviesPaginatedData>, 442 - ) => 443 - infiniteQueryOptions< 444 - MoviesControllerGetUserMoviesPaginatedResponse, 445 - DefaultError, 446 - InfiniteData<MoviesControllerGetUserMoviesPaginatedResponse>, 447 - QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>>, 448 - | string 449 - | Pick< 450 - QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>>[0], 451 - "body" | "headers" | "path" | "query" 452 - > 453 - >( 454 - // @ts-ignore 455 - { 456 - queryFn: async ({ pageParam, queryKey, signal }) => { 457 - // @ts-ignore 458 - const page: Pick< 459 - QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>>[0], 460 - "body" | "headers" | "path" | "query" 461 - > = 462 - typeof pageParam === "object" 463 - ? pageParam 464 - : { 465 - query: { 466 - cursor: pageParam, 467 - }, 468 - }; 469 - const params = createInfiniteParams(queryKey, page); 470 - const { data } = await moviesControllerGetUserMoviesPaginated({ 471 - ...options, 472 - ...params, 473 - signal, 474 - throwOnError: true, 475 - }); 476 - return data; 477 - }, 478 - queryKey: moviesControllerGetUserMoviesPaginatedInfiniteQueryKey(options), 479 - }, 480 - ); 166 + export const moviesControllerGetUserMoviesPaginatedInfiniteOptions = (options: Options<MoviesControllerGetUserMoviesPaginatedData>) => infiniteQueryOptions<MoviesControllerGetUserMoviesPaginatedResponse, DefaultError, InfiniteData<MoviesControllerGetUserMoviesPaginatedResponse>, QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>>, string | Pick<QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 167 + // @ts-ignore 168 + { 169 + queryFn: async ({ pageParam, queryKey, signal }) => { 170 + // @ts-ignore 171 + const page: Pick<QueryKey<Options<MoviesControllerGetUserMoviesPaginatedData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 172 + query: { 173 + cursor: pageParam 174 + } 175 + }; 176 + const params = createInfiniteParams(queryKey, page); 177 + const { data } = await moviesControllerGetUserMoviesPaginated({ 178 + ...options, 179 + ...params, 180 + signal, 181 + throwOnError: true 182 + }); 183 + return data; 184 + }, 185 + queryKey: moviesControllerGetUserMoviesPaginatedInfiniteQueryKey(options) 186 + }); 481 187 482 188 /** 483 189 * Mark a movie as watched 484 190 */ 485 - export const moviesControllerMarkWatchedMutation = ( 486 - options?: Partial<Options<MoviesControllerMarkWatchedData>>, 487 - ): UseMutationOptions< 488 - MoviesControllerMarkWatchedResponse, 489 - DefaultError, 490 - Options<MoviesControllerMarkWatchedData> 491 - > => { 492 - const mutationOptions: UseMutationOptions< 493 - MoviesControllerMarkWatchedResponse, 494 - DefaultError, 495 - Options<MoviesControllerMarkWatchedData> 496 - > = { 497 - mutationFn: async (fnOptions) => { 498 - const { data } = await moviesControllerMarkWatched({ 499 - ...options, 500 - ...fnOptions, 501 - throwOnError: true, 502 - }); 503 - return data; 504 - }, 505 - }; 506 - return mutationOptions; 191 + export const moviesControllerMarkWatchedMutation = (options?: Partial<Options<MoviesControllerMarkWatchedData>>): UseMutationOptions<MoviesControllerMarkWatchedResponse, DefaultError, Options<MoviesControllerMarkWatchedData>> => { 192 + const mutationOptions: UseMutationOptions<MoviesControllerMarkWatchedResponse, DefaultError, Options<MoviesControllerMarkWatchedData>> = { 193 + mutationFn: async (fnOptions) => { 194 + const { data } = await moviesControllerMarkWatched({ 195 + ...options, 196 + ...fnOptions, 197 + throwOnError: true 198 + }); 199 + return data; 200 + } 201 + }; 202 + return mutationOptions; 507 203 }; 508 204 509 205 /** 510 206 * Unmark a movie as watched 511 207 */ 512 - export const moviesControllerUnmarkWatchedMutation = ( 513 - options?: Partial<Options<MoviesControllerUnmarkWatchedData>>, 514 - ): UseMutationOptions< 515 - MoviesControllerUnmarkWatchedResponse, 516 - DefaultError, 517 - Options<MoviesControllerUnmarkWatchedData> 518 - > => { 519 - const mutationOptions: UseMutationOptions< 520 - MoviesControllerUnmarkWatchedResponse, 521 - DefaultError, 522 - Options<MoviesControllerUnmarkWatchedData> 523 - > = { 524 - mutationFn: async (fnOptions) => { 525 - const { data } = await moviesControllerUnmarkWatched({ 526 - ...options, 527 - ...fnOptions, 528 - throwOnError: true, 529 - }); 530 - return data; 531 - }, 532 - }; 533 - return mutationOptions; 208 + export const moviesControllerUnmarkWatchedMutation = (options?: Partial<Options<MoviesControllerUnmarkWatchedData>>): UseMutationOptions<MoviesControllerUnmarkWatchedResponse, DefaultError, Options<MoviesControllerUnmarkWatchedData>> => { 209 + const mutationOptions: UseMutationOptions<MoviesControllerUnmarkWatchedResponse, DefaultError, Options<MoviesControllerUnmarkWatchedData>> = { 210 + mutationFn: async (fnOptions) => { 211 + const { data } = await moviesControllerUnmarkWatched({ 212 + ...options, 213 + ...fnOptions, 214 + throwOnError: true 215 + }); 216 + return data; 217 + } 218 + }; 219 + return mutationOptions; 534 220 }; 535 221 536 - export const moviesControllerGetMovieQueryKey = ( 537 - options: Options<MoviesControllerGetMovieData>, 538 - ) => createQueryKey("moviesControllerGetMovie", options); 222 + export const moviesControllerGetMovieQueryKey = (options: Options<MoviesControllerGetMovieData>) => createQueryKey('moviesControllerGetMovie', options); 539 223 540 224 /** 541 225 * Get movie from database 542 226 */ 543 - export const moviesControllerGetMovieOptions = ( 544 - options: Options<MoviesControllerGetMovieData>, 545 - ) => 546 - queryOptions< 547 - MoviesControllerGetMovieResponse, 548 - DefaultError, 549 - MoviesControllerGetMovieResponse, 550 - ReturnType<typeof moviesControllerGetMovieQueryKey> 551 - >({ 552 - queryFn: async ({ queryKey, signal }) => { 553 - const { data } = await moviesControllerGetMovie({ 554 - ...options, 555 - ...queryKey[0], 556 - signal, 557 - throwOnError: true, 558 - }); 559 - return data; 560 - }, 561 - queryKey: moviesControllerGetMovieQueryKey(options), 562 - }); 227 + export const moviesControllerGetMovieOptions = (options: Options<MoviesControllerGetMovieData>) => queryOptions<MoviesControllerGetMovieResponse, DefaultError, MoviesControllerGetMovieResponse, ReturnType<typeof moviesControllerGetMovieQueryKey>>({ 228 + queryFn: async ({ queryKey, signal }) => { 229 + const { data } = await moviesControllerGetMovie({ 230 + ...options, 231 + ...queryKey[0], 232 + signal, 233 + throwOnError: true 234 + }); 235 + return data; 236 + }, 237 + queryKey: moviesControllerGetMovieQueryKey(options) 238 + }); 563 239 564 - export const moviesControllerGetMovieWatchHistoryQueryKey = ( 565 - options: Options<MoviesControllerGetMovieWatchHistoryData>, 566 - ) => createQueryKey("moviesControllerGetMovieWatchHistory", options); 240 + export const moviesControllerGetMovieWatchHistoryQueryKey = (options: Options<MoviesControllerGetMovieWatchHistoryData>) => createQueryKey('moviesControllerGetMovieWatchHistory', options); 567 241 568 242 /** 569 243 * Get watch history for a specific movie 570 244 */ 571 - export const moviesControllerGetMovieWatchHistoryOptions = ( 572 - options: Options<MoviesControllerGetMovieWatchHistoryData>, 573 - ) => 574 - queryOptions< 575 - MoviesControllerGetMovieWatchHistoryResponse, 576 - DefaultError, 577 - MoviesControllerGetMovieWatchHistoryResponse, 578 - ReturnType<typeof moviesControllerGetMovieWatchHistoryQueryKey> 579 - >({ 580 - queryFn: async ({ queryKey, signal }) => { 581 - const { data } = await moviesControllerGetMovieWatchHistory({ 582 - ...options, 583 - ...queryKey[0], 584 - signal, 585 - throwOnError: true, 586 - }); 587 - return data; 588 - }, 589 - queryKey: moviesControllerGetMovieWatchHistoryQueryKey(options), 590 - }); 245 + export const moviesControllerGetMovieWatchHistoryOptions = (options: Options<MoviesControllerGetMovieWatchHistoryData>) => queryOptions<MoviesControllerGetMovieWatchHistoryResponse, DefaultError, MoviesControllerGetMovieWatchHistoryResponse, ReturnType<typeof moviesControllerGetMovieWatchHistoryQueryKey>>({ 246 + queryFn: async ({ queryKey, signal }) => { 247 + const { data } = await moviesControllerGetMovieWatchHistory({ 248 + ...options, 249 + ...queryKey[0], 250 + signal, 251 + throwOnError: true 252 + }); 253 + return data; 254 + }, 255 + queryKey: moviesControllerGetMovieWatchHistoryQueryKey(options) 256 + }); 591 257 592 258 /** 593 259 * Delete a specific watch history entry 594 260 */ 595 - export const moviesControllerDeleteWatchHistoryEntryMutation = ( 596 - options?: Partial<Options<MoviesControllerDeleteWatchHistoryEntryData>>, 597 - ): UseMutationOptions< 598 - MoviesControllerDeleteWatchHistoryEntryResponse, 599 - DefaultError, 600 - Options<MoviesControllerDeleteWatchHistoryEntryData> 601 - > => { 602 - const mutationOptions: UseMutationOptions< 603 - MoviesControllerDeleteWatchHistoryEntryResponse, 604 - DefaultError, 605 - Options<MoviesControllerDeleteWatchHistoryEntryData> 606 - > = { 607 - mutationFn: async (fnOptions) => { 608 - const { data } = await moviesControllerDeleteWatchHistoryEntry({ 609 - ...options, 610 - ...fnOptions, 611 - throwOnError: true, 612 - }); 613 - return data; 614 - }, 615 - }; 616 - return mutationOptions; 261 + export const moviesControllerDeleteWatchHistoryEntryMutation = (options?: Partial<Options<MoviesControllerDeleteWatchHistoryEntryData>>): UseMutationOptions<MoviesControllerDeleteWatchHistoryEntryResponse, DefaultError, Options<MoviesControllerDeleteWatchHistoryEntryData>> => { 262 + const mutationOptions: UseMutationOptions<MoviesControllerDeleteWatchHistoryEntryResponse, DefaultError, Options<MoviesControllerDeleteWatchHistoryEntryData>> = { 263 + mutationFn: async (fnOptions) => { 264 + const { data } = await moviesControllerDeleteWatchHistoryEntry({ 265 + ...options, 266 + ...fnOptions, 267 + throwOnError: true 268 + }); 269 + return data; 270 + } 271 + }; 272 + return mutationOptions; 617 273 }; 618 274 619 - export const authControllerGetClientMetadataQueryKey = ( 620 - options?: Options<AuthControllerGetClientMetadataData>, 621 - ) => createQueryKey("authControllerGetClientMetadata", options); 275 + export const authControllerGetClientMetadataQueryKey = (options?: Options<AuthControllerGetClientMetadataData>) => createQueryKey('authControllerGetClientMetadata', options); 622 276 623 277 /** 624 278 * OAuth client metadata 625 279 */ 626 - export const authControllerGetClientMetadataOptions = ( 627 - options?: Options<AuthControllerGetClientMetadataData>, 628 - ) => 629 - queryOptions< 630 - unknown, 631 - DefaultError, 632 - unknown, 633 - ReturnType<typeof authControllerGetClientMetadataQueryKey> 634 - >({ 635 - queryFn: async ({ queryKey, signal }) => { 636 - const { data } = await authControllerGetClientMetadata({ 637 - ...options, 638 - ...queryKey[0], 639 - signal, 640 - throwOnError: true, 641 - }); 642 - return data; 643 - }, 644 - queryKey: authControllerGetClientMetadataQueryKey(options), 645 - }); 280 + export const authControllerGetClientMetadataOptions = (options?: Options<AuthControllerGetClientMetadataData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof authControllerGetClientMetadataQueryKey>>({ 281 + queryFn: async ({ queryKey, signal }) => { 282 + const { data } = await authControllerGetClientMetadata({ 283 + ...options, 284 + ...queryKey[0], 285 + signal, 286 + throwOnError: true 287 + }); 288 + return data; 289 + }, 290 + queryKey: authControllerGetClientMetadataQueryKey(options) 291 + }); 646 292 647 - export const authControllerLoginQueryKey = ( 648 - options: Options<AuthControllerLoginData>, 649 - ) => createQueryKey("authControllerLogin", options); 293 + export const authControllerLoginQueryKey = (options: Options<AuthControllerLoginData>) => createQueryKey('authControllerLogin', options); 650 294 651 295 /** 652 296 * Start AT Protocol OAuth login 653 297 */ 654 - export const authControllerLoginOptions = ( 655 - options: Options<AuthControllerLoginData>, 656 - ) => 657 - queryOptions< 658 - unknown, 659 - DefaultError, 660 - unknown, 661 - ReturnType<typeof authControllerLoginQueryKey> 662 - >({ 663 - queryFn: async ({ queryKey, signal }) => { 664 - const { data } = await authControllerLogin({ 665 - ...options, 666 - ...queryKey[0], 667 - signal, 668 - throwOnError: true, 669 - }); 670 - return data; 671 - }, 672 - queryKey: authControllerLoginQueryKey(options), 673 - }); 298 + export const authControllerLoginOptions = (options: Options<AuthControllerLoginData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof authControllerLoginQueryKey>>({ 299 + queryFn: async ({ queryKey, signal }) => { 300 + const { data } = await authControllerLogin({ 301 + ...options, 302 + ...queryKey[0], 303 + signal, 304 + throwOnError: true 305 + }); 306 + return data; 307 + }, 308 + queryKey: authControllerLoginQueryKey(options) 309 + }); 674 310 675 - export const authControllerSignupQueryKey = ( 676 - options?: Options<AuthControllerSignupData>, 677 - ) => createQueryKey("authControllerSignup", options); 311 + export const authControllerSignupQueryKey = (options?: Options<AuthControllerSignupData>) => createQueryKey('authControllerSignup', options); 678 312 679 313 /** 680 314 * Start AT Protocol OAuth signup via PDS 681 315 */ 682 - export const authControllerSignupOptions = ( 683 - options?: Options<AuthControllerSignupData>, 684 - ) => 685 - queryOptions< 686 - unknown, 687 - DefaultError, 688 - unknown, 689 - ReturnType<typeof authControllerSignupQueryKey> 690 - >({ 691 - queryFn: async ({ queryKey, signal }) => { 692 - const { data } = await authControllerSignup({ 693 - ...options, 694 - ...queryKey[0], 695 - signal, 696 - throwOnError: true, 697 - }); 698 - return data; 699 - }, 700 - queryKey: authControllerSignupQueryKey(options), 701 - }); 316 + export const authControllerSignupOptions = (options?: Options<AuthControllerSignupData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof authControllerSignupQueryKey>>({ 317 + queryFn: async ({ queryKey, signal }) => { 318 + const { data } = await authControllerSignup({ 319 + ...options, 320 + ...queryKey[0], 321 + signal, 322 + throwOnError: true 323 + }); 324 + return data; 325 + }, 326 + queryKey: authControllerSignupQueryKey(options) 327 + }); 702 328 703 - export const authControllerSuggestionsQueryKey = ( 704 - options: Options<AuthControllerSuggestionsData>, 705 - ) => createQueryKey("authControllerSuggestions", options); 329 + export const authControllerSuggestionsQueryKey = (options: Options<AuthControllerSuggestionsData>) => createQueryKey('authControllerSuggestions', options); 706 330 707 331 /** 708 332 * Search for actor suggestions by handle prefix 709 333 */ 710 - export const authControllerSuggestionsOptions = ( 711 - options: Options<AuthControllerSuggestionsData>, 712 - ) => 713 - queryOptions< 714 - unknown, 715 - DefaultError, 716 - unknown, 717 - ReturnType<typeof authControllerSuggestionsQueryKey> 718 - >({ 719 - queryFn: async ({ queryKey, signal }) => { 720 - const { data } = await authControllerSuggestions({ 721 - ...options, 722 - ...queryKey[0], 723 - signal, 724 - throwOnError: true, 725 - }); 726 - return data; 727 - }, 728 - queryKey: authControllerSuggestionsQueryKey(options), 729 - }); 334 + export const authControllerSuggestionsOptions = (options: Options<AuthControllerSuggestionsData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof authControllerSuggestionsQueryKey>>({ 335 + queryFn: async ({ queryKey, signal }) => { 336 + const { data } = await authControllerSuggestions({ 337 + ...options, 338 + ...queryKey[0], 339 + signal, 340 + throwOnError: true 341 + }); 342 + return data; 343 + }, 344 + queryKey: authControllerSuggestionsQueryKey(options) 345 + }); 730 346 731 - export const authControllerCallbackQueryKey = ( 732 - options?: Options<AuthControllerCallbackData>, 733 - ) => createQueryKey("authControllerCallback", options); 347 + export const authControllerCallbackQueryKey = (options?: Options<AuthControllerCallbackData>) => createQueryKey('authControllerCallback', options); 734 348 735 349 /** 736 350 * AT Protocol OAuth callback 737 351 */ 738 - export const authControllerCallbackOptions = ( 739 - options?: Options<AuthControllerCallbackData>, 740 - ) => 741 - queryOptions< 742 - unknown, 743 - DefaultError, 744 - unknown, 745 - ReturnType<typeof authControllerCallbackQueryKey> 746 - >({ 747 - queryFn: async ({ queryKey, signal }) => { 748 - const { data } = await authControllerCallback({ 749 - ...options, 750 - ...queryKey[0], 751 - signal, 752 - throwOnError: true, 753 - }); 754 - return data; 755 - }, 756 - queryKey: authControllerCallbackQueryKey(options), 757 - }); 352 + export const authControllerCallbackOptions = (options?: Options<AuthControllerCallbackData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof authControllerCallbackQueryKey>>({ 353 + queryFn: async ({ queryKey, signal }) => { 354 + const { data } = await authControllerCallback({ 355 + ...options, 356 + ...queryKey[0], 357 + signal, 358 + throwOnError: true 359 + }); 360 + return data; 361 + }, 362 + queryKey: authControllerCallbackQueryKey(options) 363 + }); 758 364 759 - export const authControllerMeQueryKey = ( 760 - options?: Options<AuthControllerMeData>, 761 - ) => createQueryKey("authControllerMe", options); 365 + export const authControllerMeQueryKey = (options?: Options<AuthControllerMeData>) => createQueryKey('authControllerMe', options); 762 366 763 367 /** 764 368 * Get current authenticated user 765 369 */ 766 - export const authControllerMeOptions = ( 767 - options?: Options<AuthControllerMeData>, 768 - ) => 769 - queryOptions< 770 - AuthControllerMeResponse, 771 - DefaultError, 772 - AuthControllerMeResponse, 773 - ReturnType<typeof authControllerMeQueryKey> 774 - >({ 775 - queryFn: async ({ queryKey, signal }) => { 776 - const { data } = await authControllerMe({ 777 - ...options, 778 - ...queryKey[0], 779 - signal, 780 - throwOnError: true, 781 - }); 782 - return data; 783 - }, 784 - queryKey: authControllerMeQueryKey(options), 785 - }); 370 + export const authControllerMeOptions = (options?: Options<AuthControllerMeData>) => queryOptions<AuthControllerMeResponse, DefaultError, AuthControllerMeResponse, ReturnType<typeof authControllerMeQueryKey>>({ 371 + queryFn: async ({ queryKey, signal }) => { 372 + const { data } = await authControllerMe({ 373 + ...options, 374 + ...queryKey[0], 375 + signal, 376 + throwOnError: true 377 + }); 378 + return data; 379 + }, 380 + queryKey: authControllerMeQueryKey(options) 381 + }); 786 382 787 - export const authControllerBlueskyProfileStatusQueryKey = ( 788 - options?: Options<AuthControllerBlueskyProfileStatusData>, 789 - ) => createQueryKey("authControllerBlueskyProfileStatus", options); 383 + export const authControllerBlueskyProfileStatusQueryKey = (options?: Options<AuthControllerBlueskyProfileStatusData>) => createQueryKey('authControllerBlueskyProfileStatus', options); 790 384 791 385 /** 792 386 * Get current authenticated user's Bluesky profile status 793 387 */ 794 - export const authControllerBlueskyProfileStatusOptions = ( 795 - options?: Options<AuthControllerBlueskyProfileStatusData>, 796 - ) => 797 - queryOptions< 798 - AuthControllerBlueskyProfileStatusResponse, 799 - DefaultError, 800 - AuthControllerBlueskyProfileStatusResponse, 801 - ReturnType<typeof authControllerBlueskyProfileStatusQueryKey> 802 - >({ 803 - queryFn: async ({ queryKey, signal }) => { 804 - const { data } = await authControllerBlueskyProfileStatus({ 805 - ...options, 806 - ...queryKey[0], 807 - signal, 808 - throwOnError: true, 809 - }); 810 - return data; 811 - }, 812 - queryKey: authControllerBlueskyProfileStatusQueryKey(options), 813 - }); 388 + export const authControllerBlueskyProfileStatusOptions = (options?: Options<AuthControllerBlueskyProfileStatusData>) => queryOptions<AuthControllerBlueskyProfileStatusResponse, DefaultError, AuthControllerBlueskyProfileStatusResponse, ReturnType<typeof authControllerBlueskyProfileStatusQueryKey>>({ 389 + queryFn: async ({ queryKey, signal }) => { 390 + const { data } = await authControllerBlueskyProfileStatus({ 391 + ...options, 392 + ...queryKey[0], 393 + signal, 394 + throwOnError: true 395 + }); 396 + return data; 397 + }, 398 + queryKey: authControllerBlueskyProfileStatusQueryKey(options) 399 + }); 814 400 815 401 /** 816 402 * Logout and clear session 817 403 */ 818 - export const authControllerLogoutMutation = ( 819 - options?: Partial<Options<AuthControllerLogoutData>>, 820 - ): UseMutationOptions< 821 - unknown, 822 - DefaultError, 823 - Options<AuthControllerLogoutData> 824 - > => { 825 - const mutationOptions: UseMutationOptions< 826 - unknown, 827 - DefaultError, 828 - Options<AuthControllerLogoutData> 829 - > = { 830 - mutationFn: async (fnOptions) => { 831 - const { data } = await authControllerLogout({ 832 - ...options, 833 - ...fnOptions, 834 - throwOnError: true, 835 - }); 836 - return data; 837 - }, 838 - }; 839 - return mutationOptions; 404 + export const authControllerLogoutMutation = (options?: Partial<Options<AuthControllerLogoutData>>): UseMutationOptions<unknown, DefaultError, Options<AuthControllerLogoutData>> => { 405 + const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<AuthControllerLogoutData>> = { 406 + mutationFn: async (fnOptions) => { 407 + const { data } = await authControllerLogout({ 408 + ...options, 409 + ...fnOptions, 410 + throwOnError: true 411 + }); 412 + return data; 413 + } 414 + }; 415 + return mutationOptions; 840 416 }; 841 417 842 - export const showsControllerSearchShowsQueryKey = ( 843 - options: Options<ShowsControllerSearchShowsData>, 844 - ) => createQueryKey("showsControllerSearchShows", options); 418 + export const showsControllerSearchShowsQueryKey = (options: Options<ShowsControllerSearchShowsData>) => createQueryKey('showsControllerSearchShows', options); 845 419 846 420 /** 847 421 * Search shows from TMDB 848 422 */ 849 - export const showsControllerSearchShowsOptions = ( 850 - options: Options<ShowsControllerSearchShowsData>, 851 - ) => 852 - queryOptions< 853 - ShowsControllerSearchShowsResponse, 854 - DefaultError, 855 - ShowsControllerSearchShowsResponse, 856 - ReturnType<typeof showsControllerSearchShowsQueryKey> 857 - >({ 858 - queryFn: async ({ queryKey, signal }) => { 859 - const { data } = await showsControllerSearchShows({ 860 - ...options, 861 - ...queryKey[0], 862 - signal, 863 - throwOnError: true, 864 - }); 865 - return data; 866 - }, 867 - queryKey: showsControllerSearchShowsQueryKey(options), 868 - }); 423 + export const showsControllerSearchShowsOptions = (options: Options<ShowsControllerSearchShowsData>) => queryOptions<ShowsControllerSearchShowsResponse, DefaultError, ShowsControllerSearchShowsResponse, ReturnType<typeof showsControllerSearchShowsQueryKey>>({ 424 + queryFn: async ({ queryKey, signal }) => { 425 + const { data } = await showsControllerSearchShows({ 426 + ...options, 427 + ...queryKey[0], 428 + signal, 429 + throwOnError: true 430 + }); 431 + return data; 432 + }, 433 + queryKey: showsControllerSearchShowsQueryKey(options) 434 + }); 869 435 870 - export const showsControllerDiscoverShowsQueryKey = ( 871 - options?: Options<ShowsControllerDiscoverShowsData>, 872 - ) => createQueryKey("showsControllerDiscoverShows", options); 436 + export const showsControllerDiscoverShowsQueryKey = (options?: Options<ShowsControllerDiscoverShowsData>) => createQueryKey('showsControllerDiscoverShows', options); 873 437 874 438 /** 875 439 * Discover popular shows from TMDB 876 440 */ 877 - export const showsControllerDiscoverShowsOptions = ( 878 - options?: Options<ShowsControllerDiscoverShowsData>, 879 - ) => 880 - queryOptions< 881 - ShowsControllerDiscoverShowsResponse, 882 - DefaultError, 883 - ShowsControllerDiscoverShowsResponse, 884 - ReturnType<typeof showsControllerDiscoverShowsQueryKey> 885 - >({ 886 - queryFn: async ({ queryKey, signal }) => { 887 - const { data } = await showsControllerDiscoverShows({ 888 - ...options, 889 - ...queryKey[0], 890 - signal, 891 - throwOnError: true, 892 - }); 893 - return data; 894 - }, 895 - queryKey: showsControllerDiscoverShowsQueryKey(options), 896 - }); 441 + export const showsControllerDiscoverShowsOptions = (options?: Options<ShowsControllerDiscoverShowsData>) => queryOptions<ShowsControllerDiscoverShowsResponse, DefaultError, ShowsControllerDiscoverShowsResponse, ReturnType<typeof showsControllerDiscoverShowsQueryKey>>({ 442 + queryFn: async ({ queryKey, signal }) => { 443 + const { data } = await showsControllerDiscoverShows({ 444 + ...options, 445 + ...queryKey[0], 446 + signal, 447 + throwOnError: true 448 + }); 449 + return data; 450 + }, 451 + queryKey: showsControllerDiscoverShowsQueryKey(options) 452 + }); 897 453 898 - export const showsControllerGetShowDetailsQueryKey = ( 899 - options: Options<ShowsControllerGetShowDetailsData>, 900 - ) => createQueryKey("showsControllerGetShowDetails", options); 454 + export const showsControllerGetShowDetailsQueryKey = (options: Options<ShowsControllerGetShowDetailsData>) => createQueryKey('showsControllerGetShowDetails', options); 901 455 902 456 /** 903 457 * Get show details from TMDB 904 458 */ 905 - export const showsControllerGetShowDetailsOptions = ( 906 - options: Options<ShowsControllerGetShowDetailsData>, 907 - ) => 908 - queryOptions< 909 - ShowsControllerGetShowDetailsResponse, 910 - DefaultError, 911 - ShowsControllerGetShowDetailsResponse, 912 - ReturnType<typeof showsControllerGetShowDetailsQueryKey> 913 - >({ 914 - queryFn: async ({ queryKey, signal }) => { 915 - const { data } = await showsControllerGetShowDetails({ 916 - ...options, 917 - ...queryKey[0], 918 - signal, 919 - throwOnError: true, 920 - }); 921 - return data; 922 - }, 923 - queryKey: showsControllerGetShowDetailsQueryKey(options), 924 - }); 459 + export const showsControllerGetShowDetailsOptions = (options: Options<ShowsControllerGetShowDetailsData>) => queryOptions<ShowsControllerGetShowDetailsResponse, DefaultError, ShowsControllerGetShowDetailsResponse, ReturnType<typeof showsControllerGetShowDetailsQueryKey>>({ 460 + queryFn: async ({ queryKey, signal }) => { 461 + const { data } = await showsControllerGetShowDetails({ 462 + ...options, 463 + ...queryKey[0], 464 + signal, 465 + throwOnError: true 466 + }); 467 + return data; 468 + }, 469 + queryKey: showsControllerGetShowDetailsQueryKey(options) 470 + }); 925 471 926 - export const showsControllerGetSeasonDetailsQueryKey = ( 927 - options: Options<ShowsControllerGetSeasonDetailsData>, 928 - ) => createQueryKey("showsControllerGetSeasonDetails", options); 472 + export const showsControllerGetSeasonDetailsQueryKey = (options: Options<ShowsControllerGetSeasonDetailsData>) => createQueryKey('showsControllerGetSeasonDetails', options); 929 473 930 474 /** 931 475 * Get season details from TMDB 932 476 */ 933 - export const showsControllerGetSeasonDetailsOptions = ( 934 - options: Options<ShowsControllerGetSeasonDetailsData>, 935 - ) => 936 - queryOptions< 937 - ShowsControllerGetSeasonDetailsResponse, 938 - DefaultError, 939 - ShowsControllerGetSeasonDetailsResponse, 940 - ReturnType<typeof showsControllerGetSeasonDetailsQueryKey> 941 - >({ 942 - queryFn: async ({ queryKey, signal }) => { 943 - const { data } = await showsControllerGetSeasonDetails({ 944 - ...options, 945 - ...queryKey[0], 946 - signal, 947 - throwOnError: true, 948 - }); 949 - return data; 950 - }, 951 - queryKey: showsControllerGetSeasonDetailsQueryKey(options), 952 - }); 477 + export const showsControllerGetSeasonDetailsOptions = (options: Options<ShowsControllerGetSeasonDetailsData>) => queryOptions<ShowsControllerGetSeasonDetailsResponse, DefaultError, ShowsControllerGetSeasonDetailsResponse, ReturnType<typeof showsControllerGetSeasonDetailsQueryKey>>({ 478 + queryFn: async ({ queryKey, signal }) => { 479 + const { data } = await showsControllerGetSeasonDetails({ 480 + ...options, 481 + ...queryKey[0], 482 + signal, 483 + throwOnError: true 484 + }); 485 + return data; 486 + }, 487 + queryKey: showsControllerGetSeasonDetailsQueryKey(options) 488 + }); 953 489 954 - export const showsControllerGetEpisodeDetailsQueryKey = ( 955 - options: Options<ShowsControllerGetEpisodeDetailsData>, 956 - ) => createQueryKey("showsControllerGetEpisodeDetails", options); 490 + export const showsControllerGetLocalSeasonsQueryKey = (options: Options<ShowsControllerGetLocalSeasonsData>) => createQueryKey('showsControllerGetLocalSeasons', options); 491 + 492 + /** 493 + * Get seasons from local database (populated via sync on first interaction) 494 + */ 495 + export const showsControllerGetLocalSeasonsOptions = (options: Options<ShowsControllerGetLocalSeasonsData>) => queryOptions<ShowsControllerGetLocalSeasonsResponse, DefaultError, ShowsControllerGetLocalSeasonsResponse, ReturnType<typeof showsControllerGetLocalSeasonsQueryKey>>({ 496 + queryFn: async ({ queryKey, signal }) => { 497 + const { data } = await showsControllerGetLocalSeasons({ 498 + ...options, 499 + ...queryKey[0], 500 + signal, 501 + throwOnError: true 502 + }); 503 + return data; 504 + }, 505 + queryKey: showsControllerGetLocalSeasonsQueryKey(options) 506 + }); 507 + 508 + export const showsControllerGetLocalEpisodesQueryKey = (options: Options<ShowsControllerGetLocalEpisodesData>) => createQueryKey('showsControllerGetLocalEpisodes', options); 509 + 510 + /** 511 + * Get episodes from local database (populated via sync on first interaction) 512 + */ 513 + export const showsControllerGetLocalEpisodesOptions = (options: Options<ShowsControllerGetLocalEpisodesData>) => queryOptions<ShowsControllerGetLocalEpisodesResponse, DefaultError, ShowsControllerGetLocalEpisodesResponse, ReturnType<typeof showsControllerGetLocalEpisodesQueryKey>>({ 514 + queryFn: async ({ queryKey, signal }) => { 515 + const { data } = await showsControllerGetLocalEpisodes({ 516 + ...options, 517 + ...queryKey[0], 518 + signal, 519 + throwOnError: true 520 + }); 521 + return data; 522 + }, 523 + queryKey: showsControllerGetLocalEpisodesQueryKey(options) 524 + }); 525 + 526 + export const showsControllerGetEpisodeDetailsQueryKey = (options: Options<ShowsControllerGetEpisodeDetailsData>) => createQueryKey('showsControllerGetEpisodeDetails', options); 957 527 958 528 /** 959 529 * Get episode details from TMDB 960 530 */ 961 - export const showsControllerGetEpisodeDetailsOptions = ( 962 - options: Options<ShowsControllerGetEpisodeDetailsData>, 963 - ) => 964 - queryOptions< 965 - ShowsControllerGetEpisodeDetailsResponse, 966 - DefaultError, 967 - ShowsControllerGetEpisodeDetailsResponse, 968 - ReturnType<typeof showsControllerGetEpisodeDetailsQueryKey> 969 - >({ 970 - queryFn: async ({ queryKey, signal }) => { 971 - const { data } = await showsControllerGetEpisodeDetails({ 972 - ...options, 973 - ...queryKey[0], 974 - signal, 975 - throwOnError: true, 976 - }); 977 - return data; 978 - }, 979 - queryKey: showsControllerGetEpisodeDetailsQueryKey(options), 980 - }); 531 + export const showsControllerGetEpisodeDetailsOptions = (options: Options<ShowsControllerGetEpisodeDetailsData>) => queryOptions<ShowsControllerGetEpisodeDetailsResponse, DefaultError, ShowsControllerGetEpisodeDetailsResponse, ReturnType<typeof showsControllerGetEpisodeDetailsQueryKey>>({ 532 + queryFn: async ({ queryKey, signal }) => { 533 + const { data } = await showsControllerGetEpisodeDetails({ 534 + ...options, 535 + ...queryKey[0], 536 + signal, 537 + throwOnError: true 538 + }); 539 + return data; 540 + }, 541 + queryKey: showsControllerGetEpisodeDetailsQueryKey(options) 542 + }); 981 543 982 - export const showsControllerGetUserShowsQueryKey = ( 983 - options: Options<ShowsControllerGetUserShowsData>, 984 - ) => createQueryKey("showsControllerGetUserShows", options); 544 + export const showsControllerGetUserShowsQueryKey = (options: Options<ShowsControllerGetUserShowsData>) => createQueryKey('showsControllerGetUserShows', options); 985 545 986 546 /** 987 547 * Get tracked shows for a user 988 548 */ 989 - export const showsControllerGetUserShowsOptions = ( 990 - options: Options<ShowsControllerGetUserShowsData>, 991 - ) => 992 - queryOptions< 993 - ShowsControllerGetUserShowsResponse, 994 - DefaultError, 995 - ShowsControllerGetUserShowsResponse, 996 - ReturnType<typeof showsControllerGetUserShowsQueryKey> 997 - >({ 998 - queryFn: async ({ queryKey, signal }) => { 999 - const { data } = await showsControllerGetUserShows({ 1000 - ...options, 1001 - ...queryKey[0], 1002 - signal, 1003 - throwOnError: true, 1004 - }); 1005 - return data; 1006 - }, 1007 - queryKey: showsControllerGetUserShowsQueryKey(options), 1008 - }); 549 + export const showsControllerGetUserShowsOptions = (options: Options<ShowsControllerGetUserShowsData>) => queryOptions<ShowsControllerGetUserShowsResponse, DefaultError, ShowsControllerGetUserShowsResponse, ReturnType<typeof showsControllerGetUserShowsQueryKey>>({ 550 + queryFn: async ({ queryKey, signal }) => { 551 + const { data } = await showsControllerGetUserShows({ 552 + ...options, 553 + ...queryKey[0], 554 + signal, 555 + throwOnError: true 556 + }); 557 + return data; 558 + }, 559 + queryKey: showsControllerGetUserShowsQueryKey(options) 560 + }); 1009 561 1010 - export const showsControllerGetUserUpNextQueryKey = ( 1011 - options: Options<ShowsControllerGetUserUpNextData>, 1012 - ) => createQueryKey("showsControllerGetUserUpNext", options); 562 + export const showsControllerGetUserUpNextQueryKey = (options: Options<ShowsControllerGetUserUpNextData>) => createQueryKey('showsControllerGetUserUpNext', options); 1013 563 1014 564 /** 1015 565 * Get up next episodes for a user 1016 566 */ 1017 - export const showsControllerGetUserUpNextOptions = ( 1018 - options: Options<ShowsControllerGetUserUpNextData>, 1019 - ) => 1020 - queryOptions< 1021 - ShowsControllerGetUserUpNextResponse, 1022 - DefaultError, 1023 - ShowsControllerGetUserUpNextResponse, 1024 - ReturnType<typeof showsControllerGetUserUpNextQueryKey> 1025 - >({ 1026 - queryFn: async ({ queryKey, signal }) => { 1027 - const { data } = await showsControllerGetUserUpNext({ 1028 - ...options, 1029 - ...queryKey[0], 1030 - signal, 1031 - throwOnError: true, 1032 - }); 1033 - return data; 1034 - }, 1035 - queryKey: showsControllerGetUserUpNextQueryKey(options), 1036 - }); 567 + export const showsControllerGetUserUpNextOptions = (options: Options<ShowsControllerGetUserUpNextData>) => queryOptions<ShowsControllerGetUserUpNextResponse, DefaultError, ShowsControllerGetUserUpNextResponse, ReturnType<typeof showsControllerGetUserUpNextQueryKey>>({ 568 + queryFn: async ({ queryKey, signal }) => { 569 + const { data } = await showsControllerGetUserUpNext({ 570 + ...options, 571 + ...queryKey[0], 572 + signal, 573 + throwOnError: true 574 + }); 575 + return data; 576 + }, 577 + queryKey: showsControllerGetUserUpNextQueryKey(options) 578 + }); 1037 579 1038 - export const showsControllerGetUserUpNextInfiniteQueryKey = ( 1039 - options: Options<ShowsControllerGetUserUpNextData>, 1040 - ): QueryKey<Options<ShowsControllerGetUserUpNextData>> => 1041 - createQueryKey("showsControllerGetUserUpNext", options, true); 580 + export const showsControllerGetUserUpNextInfiniteQueryKey = (options: Options<ShowsControllerGetUserUpNextData>): QueryKey<Options<ShowsControllerGetUserUpNextData>> => createQueryKey('showsControllerGetUserUpNext', options, true); 1042 581 1043 582 /** 1044 583 * Get up next episodes for a user 1045 584 */ 1046 - export const showsControllerGetUserUpNextInfiniteOptions = ( 1047 - options: Options<ShowsControllerGetUserUpNextData>, 1048 - ) => 1049 - infiniteQueryOptions< 1050 - ShowsControllerGetUserUpNextResponse, 1051 - DefaultError, 1052 - InfiniteData<ShowsControllerGetUserUpNextResponse>, 1053 - QueryKey<Options<ShowsControllerGetUserUpNextData>>, 1054 - | number 1055 - | Pick< 1056 - QueryKey<Options<ShowsControllerGetUserUpNextData>>[0], 1057 - "body" | "headers" | "path" | "query" 1058 - > 1059 - >( 1060 - // @ts-ignore 1061 - { 1062 - queryFn: async ({ pageParam, queryKey, signal }) => { 1063 - // @ts-ignore 1064 - const page: Pick< 1065 - QueryKey<Options<ShowsControllerGetUserUpNextData>>[0], 1066 - "body" | "headers" | "path" | "query" 1067 - > = 1068 - typeof pageParam === "object" 1069 - ? pageParam 1070 - : { 1071 - query: { 1072 - page: pageParam, 1073 - }, 1074 - }; 1075 - const params = createInfiniteParams(queryKey, page); 1076 - const { data } = await showsControllerGetUserUpNext({ 1077 - ...options, 1078 - ...params, 1079 - signal, 1080 - throwOnError: true, 1081 - }); 1082 - return data; 1083 - }, 1084 - queryKey: showsControllerGetUserUpNextInfiniteQueryKey(options), 1085 - }, 1086 - ); 585 + export const showsControllerGetUserUpNextInfiniteOptions = (options: Options<ShowsControllerGetUserUpNextData>) => infiniteQueryOptions<ShowsControllerGetUserUpNextResponse, DefaultError, InfiniteData<ShowsControllerGetUserUpNextResponse>, QueryKey<Options<ShowsControllerGetUserUpNextData>>, number | Pick<QueryKey<Options<ShowsControllerGetUserUpNextData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 586 + // @ts-ignore 587 + { 588 + queryFn: async ({ pageParam, queryKey, signal }) => { 589 + // @ts-ignore 590 + const page: Pick<QueryKey<Options<ShowsControllerGetUserUpNextData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 591 + query: { 592 + page: pageParam 593 + } 594 + }; 595 + const params = createInfiniteParams(queryKey, page); 596 + const { data } = await showsControllerGetUserUpNext({ 597 + ...options, 598 + ...params, 599 + signal, 600 + throwOnError: true 601 + }); 602 + return data; 603 + }, 604 + queryKey: showsControllerGetUserUpNextInfiniteQueryKey(options) 605 + }); 1087 606 1088 - export const showsControllerGetUserReleaseCalendarQueryKey = ( 1089 - options: Options<ShowsControllerGetUserReleaseCalendarData>, 1090 - ) => createQueryKey("showsControllerGetUserReleaseCalendar", options); 607 + export const showsControllerGetUserReleaseCalendarQueryKey = (options: Options<ShowsControllerGetUserReleaseCalendarData>) => createQueryKey('showsControllerGetUserReleaseCalendar', options); 1091 608 1092 609 /** 1093 610 * Get upcoming releases for watched shows and future-dated watchlist items 1094 611 */ 1095 - export const showsControllerGetUserReleaseCalendarOptions = ( 1096 - options: Options<ShowsControllerGetUserReleaseCalendarData>, 1097 - ) => 1098 - queryOptions< 1099 - ShowsControllerGetUserReleaseCalendarResponse, 1100 - DefaultError, 1101 - ShowsControllerGetUserReleaseCalendarResponse, 1102 - ReturnType<typeof showsControllerGetUserReleaseCalendarQueryKey> 1103 - >({ 1104 - queryFn: async ({ queryKey, signal }) => { 1105 - const { data } = await showsControllerGetUserReleaseCalendar({ 1106 - ...options, 1107 - ...queryKey[0], 1108 - signal, 1109 - throwOnError: true, 1110 - }); 1111 - return data; 1112 - }, 1113 - queryKey: showsControllerGetUserReleaseCalendarQueryKey(options), 1114 - }); 612 + export const showsControllerGetUserReleaseCalendarOptions = (options: Options<ShowsControllerGetUserReleaseCalendarData>) => queryOptions<ShowsControllerGetUserReleaseCalendarResponse, DefaultError, ShowsControllerGetUserReleaseCalendarResponse, ReturnType<typeof showsControllerGetUserReleaseCalendarQueryKey>>({ 613 + queryFn: async ({ queryKey, signal }) => { 614 + const { data } = await showsControllerGetUserReleaseCalendar({ 615 + ...options, 616 + ...queryKey[0], 617 + signal, 618 + throwOnError: true 619 + }); 620 + return data; 621 + }, 622 + queryKey: showsControllerGetUserReleaseCalendarQueryKey(options) 623 + }); 1115 624 1116 - export const showsControllerGetUserEpisodesPaginatedQueryKey = ( 1117 - options: Options<ShowsControllerGetUserEpisodesPaginatedData>, 1118 - ) => createQueryKey("showsControllerGetUserEpisodesPaginated", options); 625 + export const showsControllerGetUserEpisodesPaginatedQueryKey = (options: Options<ShowsControllerGetUserEpisodesPaginatedData>) => createQueryKey('showsControllerGetUserEpisodesPaginated', options); 1119 626 1120 627 /** 1121 628 * Get paginated watched episodes for a user 1122 629 */ 1123 - export const showsControllerGetUserEpisodesPaginatedOptions = ( 1124 - options: Options<ShowsControllerGetUserEpisodesPaginatedData>, 1125 - ) => 1126 - queryOptions< 1127 - ShowsControllerGetUserEpisodesPaginatedResponse, 1128 - DefaultError, 1129 - ShowsControllerGetUserEpisodesPaginatedResponse, 1130 - ReturnType<typeof showsControllerGetUserEpisodesPaginatedQueryKey> 1131 - >({ 1132 - queryFn: async ({ queryKey, signal }) => { 1133 - const { data } = await showsControllerGetUserEpisodesPaginated({ 1134 - ...options, 1135 - ...queryKey[0], 1136 - signal, 1137 - throwOnError: true, 1138 - }); 1139 - return data; 1140 - }, 1141 - queryKey: showsControllerGetUserEpisodesPaginatedQueryKey(options), 1142 - }); 630 + export const showsControllerGetUserEpisodesPaginatedOptions = (options: Options<ShowsControllerGetUserEpisodesPaginatedData>) => queryOptions<ShowsControllerGetUserEpisodesPaginatedResponse, DefaultError, ShowsControllerGetUserEpisodesPaginatedResponse, ReturnType<typeof showsControllerGetUserEpisodesPaginatedQueryKey>>({ 631 + queryFn: async ({ queryKey, signal }) => { 632 + const { data } = await showsControllerGetUserEpisodesPaginated({ 633 + ...options, 634 + ...queryKey[0], 635 + signal, 636 + throwOnError: true 637 + }); 638 + return data; 639 + }, 640 + queryKey: showsControllerGetUserEpisodesPaginatedQueryKey(options) 641 + }); 1143 642 1144 - export const showsControllerGetUserEpisodesPaginatedInfiniteQueryKey = ( 1145 - options: Options<ShowsControllerGetUserEpisodesPaginatedData>, 1146 - ): QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>> => 1147 - createQueryKey("showsControllerGetUserEpisodesPaginated", options, true); 643 + export const showsControllerGetUserEpisodesPaginatedInfiniteQueryKey = (options: Options<ShowsControllerGetUserEpisodesPaginatedData>): QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>> => createQueryKey('showsControllerGetUserEpisodesPaginated', options, true); 1148 644 1149 645 /** 1150 646 * Get paginated watched episodes for a user 1151 647 */ 1152 - export const showsControllerGetUserEpisodesPaginatedInfiniteOptions = ( 1153 - options: Options<ShowsControllerGetUserEpisodesPaginatedData>, 1154 - ) => 1155 - infiniteQueryOptions< 1156 - ShowsControllerGetUserEpisodesPaginatedResponse, 1157 - DefaultError, 1158 - InfiniteData<ShowsControllerGetUserEpisodesPaginatedResponse>, 1159 - QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>>, 1160 - | string 1161 - | Pick< 1162 - QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>>[0], 1163 - "body" | "headers" | "path" | "query" 1164 - > 1165 - >( 1166 - // @ts-ignore 1167 - { 1168 - queryFn: async ({ pageParam, queryKey, signal }) => { 1169 - // @ts-ignore 1170 - const page: Pick< 1171 - QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>>[0], 1172 - "body" | "headers" | "path" | "query" 1173 - > = 1174 - typeof pageParam === "object" 1175 - ? pageParam 1176 - : { 1177 - query: { 1178 - cursor: pageParam, 1179 - }, 1180 - }; 1181 - const params = createInfiniteParams(queryKey, page); 1182 - const { data } = await showsControllerGetUserEpisodesPaginated({ 1183 - ...options, 1184 - ...params, 1185 - signal, 1186 - throwOnError: true, 1187 - }); 1188 - return data; 1189 - }, 1190 - queryKey: 1191 - showsControllerGetUserEpisodesPaginatedInfiniteQueryKey(options), 1192 - }, 1193 - ); 648 + export const showsControllerGetUserEpisodesPaginatedInfiniteOptions = (options: Options<ShowsControllerGetUserEpisodesPaginatedData>) => infiniteQueryOptions<ShowsControllerGetUserEpisodesPaginatedResponse, DefaultError, InfiniteData<ShowsControllerGetUserEpisodesPaginatedResponse>, QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>>, string | Pick<QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 649 + // @ts-ignore 650 + { 651 + queryFn: async ({ pageParam, queryKey, signal }) => { 652 + // @ts-ignore 653 + const page: Pick<QueryKey<Options<ShowsControllerGetUserEpisodesPaginatedData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 654 + query: { 655 + cursor: pageParam 656 + } 657 + }; 658 + const params = createInfiniteParams(queryKey, page); 659 + const { data } = await showsControllerGetUserEpisodesPaginated({ 660 + ...options, 661 + ...params, 662 + signal, 663 + throwOnError: true 664 + }); 665 + return data; 666 + }, 667 + queryKey: showsControllerGetUserEpisodesPaginatedInfiniteQueryKey(options) 668 + }); 1194 669 1195 670 /** 1196 671 * Mark an episode as watched 1197 672 */ 1198 - export const showsControllerMarkWatchedMutation = ( 1199 - options?: Partial<Options<ShowsControllerMarkWatchedData>>, 1200 - ): UseMutationOptions< 1201 - ShowsControllerMarkWatchedResponse, 1202 - DefaultError, 1203 - Options<ShowsControllerMarkWatchedData> 1204 - > => { 1205 - const mutationOptions: UseMutationOptions< 1206 - ShowsControllerMarkWatchedResponse, 1207 - DefaultError, 1208 - Options<ShowsControllerMarkWatchedData> 1209 - > = { 1210 - mutationFn: async (fnOptions) => { 1211 - const { data } = await showsControllerMarkWatched({ 1212 - ...options, 1213 - ...fnOptions, 1214 - throwOnError: true, 1215 - }); 1216 - return data; 1217 - }, 1218 - }; 1219 - return mutationOptions; 673 + export const showsControllerMarkWatchedMutation = (options?: Partial<Options<ShowsControllerMarkWatchedData>>): UseMutationOptions<ShowsControllerMarkWatchedResponse, DefaultError, Options<ShowsControllerMarkWatchedData>> => { 674 + const mutationOptions: UseMutationOptions<ShowsControllerMarkWatchedResponse, DefaultError, Options<ShowsControllerMarkWatchedData>> = { 675 + mutationFn: async (fnOptions) => { 676 + const { data } = await showsControllerMarkWatched({ 677 + ...options, 678 + ...fnOptions, 679 + throwOnError: true 680 + }); 681 + return data; 682 + } 683 + }; 684 + return mutationOptions; 1220 685 }; 1221 686 1222 687 /** 1223 688 * Unmark episode(s) as watched 1224 689 */ 1225 - export const showsControllerUnmarkWatchedMutation = ( 1226 - options?: Partial<Options<ShowsControllerUnmarkWatchedData>>, 1227 - ): UseMutationOptions< 1228 - ShowsControllerUnmarkWatchedResponse, 1229 - DefaultError, 1230 - Options<ShowsControllerUnmarkWatchedData> 1231 - > => { 1232 - const mutationOptions: UseMutationOptions< 1233 - ShowsControllerUnmarkWatchedResponse, 1234 - DefaultError, 1235 - Options<ShowsControllerUnmarkWatchedData> 1236 - > = { 1237 - mutationFn: async (fnOptions) => { 1238 - const { data } = await showsControllerUnmarkWatched({ 1239 - ...options, 1240 - ...fnOptions, 1241 - throwOnError: true, 1242 - }); 1243 - return data; 1244 - }, 1245 - }; 1246 - return mutationOptions; 690 + export const showsControllerUnmarkWatchedMutation = (options?: Partial<Options<ShowsControllerUnmarkWatchedData>>): UseMutationOptions<ShowsControllerUnmarkWatchedResponse, DefaultError, Options<ShowsControllerUnmarkWatchedData>> => { 691 + const mutationOptions: UseMutationOptions<ShowsControllerUnmarkWatchedResponse, DefaultError, Options<ShowsControllerUnmarkWatchedData>> = { 692 + mutationFn: async (fnOptions) => { 693 + const { data } = await showsControllerUnmarkWatched({ 694 + ...options, 695 + ...fnOptions, 696 + throwOnError: true 697 + }); 698 + return data; 699 + } 700 + }; 701 + return mutationOptions; 1247 702 }; 1248 703 1249 - export const showsControllerGetShowQueryKey = ( 1250 - options: Options<ShowsControllerGetShowData>, 1251 - ) => createQueryKey("showsControllerGetShow", options); 704 + export const showsControllerGetShowQueryKey = (options: Options<ShowsControllerGetShowData>) => createQueryKey('showsControllerGetShow', options); 1252 705 1253 706 /** 1254 707 * Get show from database 1255 708 */ 1256 - export const showsControllerGetShowOptions = ( 1257 - options: Options<ShowsControllerGetShowData>, 1258 - ) => 1259 - queryOptions< 1260 - ShowsControllerGetShowResponse, 1261 - DefaultError, 1262 - ShowsControllerGetShowResponse, 1263 - ReturnType<typeof showsControllerGetShowQueryKey> 1264 - >({ 1265 - queryFn: async ({ queryKey, signal }) => { 1266 - const { data } = await showsControllerGetShow({ 1267 - ...options, 1268 - ...queryKey[0], 1269 - signal, 1270 - throwOnError: true, 1271 - }); 1272 - return data; 1273 - }, 1274 - queryKey: showsControllerGetShowQueryKey(options), 1275 - }); 709 + export const showsControllerGetShowOptions = (options: Options<ShowsControllerGetShowData>) => queryOptions<ShowsControllerGetShowResponse, DefaultError, ShowsControllerGetShowResponse, ReturnType<typeof showsControllerGetShowQueryKey>>({ 710 + queryFn: async ({ queryKey, signal }) => { 711 + const { data } = await showsControllerGetShow({ 712 + ...options, 713 + ...queryKey[0], 714 + signal, 715 + throwOnError: true 716 + }); 717 + return data; 718 + }, 719 + queryKey: showsControllerGetShowQueryKey(options) 720 + }); 1276 721 1277 - export const showsControllerGetShowWatchHistoryQueryKey = ( 1278 - options: Options<ShowsControllerGetShowWatchHistoryData>, 1279 - ) => createQueryKey("showsControllerGetShowWatchHistory", options); 722 + export const showsControllerGetShowWatchHistoryQueryKey = (options: Options<ShowsControllerGetShowWatchHistoryData>) => createQueryKey('showsControllerGetShowWatchHistory', options); 1280 723 1281 724 /** 1282 725 * Get watch history for a specific show 1283 726 */ 1284 - export const showsControllerGetShowWatchHistoryOptions = ( 1285 - options: Options<ShowsControllerGetShowWatchHistoryData>, 1286 - ) => 1287 - queryOptions< 1288 - ShowsControllerGetShowWatchHistoryResponse, 1289 - DefaultError, 1290 - ShowsControllerGetShowWatchHistoryResponse, 1291 - ReturnType<typeof showsControllerGetShowWatchHistoryQueryKey> 1292 - >({ 1293 - queryFn: async ({ queryKey, signal }) => { 1294 - const { data } = await showsControllerGetShowWatchHistory({ 1295 - ...options, 1296 - ...queryKey[0], 1297 - signal, 1298 - throwOnError: true, 1299 - }); 1300 - return data; 1301 - }, 1302 - queryKey: showsControllerGetShowWatchHistoryQueryKey(options), 1303 - }); 727 + export const showsControllerGetShowWatchHistoryOptions = (options: Options<ShowsControllerGetShowWatchHistoryData>) => queryOptions<ShowsControllerGetShowWatchHistoryResponse, DefaultError, ShowsControllerGetShowWatchHistoryResponse, ReturnType<typeof showsControllerGetShowWatchHistoryQueryKey>>({ 728 + queryFn: async ({ queryKey, signal }) => { 729 + const { data } = await showsControllerGetShowWatchHistory({ 730 + ...options, 731 + ...queryKey[0], 732 + signal, 733 + throwOnError: true 734 + }); 735 + return data; 736 + }, 737 + queryKey: showsControllerGetShowWatchHistoryQueryKey(options) 738 + }); 1304 739 1305 740 /** 1306 741 * Delete a specific episode watch history entry 1307 742 */ 1308 - export const showsControllerDeleteEpisodeWatchHistoryEntryMutation = ( 1309 - options?: Partial<Options<ShowsControllerDeleteEpisodeWatchHistoryEntryData>>, 1310 - ): UseMutationOptions< 1311 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, 1312 - DefaultError, 1313 - Options<ShowsControllerDeleteEpisodeWatchHistoryEntryData> 1314 - > => { 1315 - const mutationOptions: UseMutationOptions< 1316 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, 1317 - DefaultError, 1318 - Options<ShowsControllerDeleteEpisodeWatchHistoryEntryData> 1319 - > = { 1320 - mutationFn: async (fnOptions) => { 1321 - const { data } = await showsControllerDeleteEpisodeWatchHistoryEntry({ 1322 - ...options, 1323 - ...fnOptions, 1324 - throwOnError: true, 1325 - }); 1326 - return data; 1327 - }, 1328 - }; 1329 - return mutationOptions; 743 + export const showsControllerDeleteEpisodeWatchHistoryEntryMutation = (options?: Partial<Options<ShowsControllerDeleteEpisodeWatchHistoryEntryData>>): UseMutationOptions<ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, DefaultError, Options<ShowsControllerDeleteEpisodeWatchHistoryEntryData>> => { 744 + const mutationOptions: UseMutationOptions<ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, DefaultError, Options<ShowsControllerDeleteEpisodeWatchHistoryEntryData>> = { 745 + mutationFn: async (fnOptions) => { 746 + const { data } = await showsControllerDeleteEpisodeWatchHistoryEntry({ 747 + ...options, 748 + ...fnOptions, 749 + throwOnError: true 750 + }); 751 + return data; 752 + } 753 + }; 754 + return mutationOptions; 1330 755 }; 1331 756 1332 757 /** 1333 758 * Mark all episodes in a season as watched 1334 759 */ 1335 - export const showsControllerMarkSeasonWatchedMutation = ( 1336 - options?: Partial<Options<ShowsControllerMarkSeasonWatchedData>>, 1337 - ): UseMutationOptions< 1338 - ShowsControllerMarkSeasonWatchedResponse, 1339 - DefaultError, 1340 - Options<ShowsControllerMarkSeasonWatchedData> 1341 - > => { 1342 - const mutationOptions: UseMutationOptions< 1343 - ShowsControllerMarkSeasonWatchedResponse, 1344 - DefaultError, 1345 - Options<ShowsControllerMarkSeasonWatchedData> 1346 - > = { 1347 - mutationFn: async (fnOptions) => { 1348 - const { data } = await showsControllerMarkSeasonWatched({ 1349 - ...options, 1350 - ...fnOptions, 1351 - throwOnError: true, 1352 - }); 1353 - return data; 1354 - }, 1355 - }; 1356 - return mutationOptions; 760 + export const showsControllerMarkSeasonWatchedMutation = (options?: Partial<Options<ShowsControllerMarkSeasonWatchedData>>): UseMutationOptions<ShowsControllerMarkSeasonWatchedResponse, DefaultError, Options<ShowsControllerMarkSeasonWatchedData>> => { 761 + const mutationOptions: UseMutationOptions<ShowsControllerMarkSeasonWatchedResponse, DefaultError, Options<ShowsControllerMarkSeasonWatchedData>> = { 762 + mutationFn: async (fnOptions) => { 763 + const { data } = await showsControllerMarkSeasonWatched({ 764 + ...options, 765 + ...fnOptions, 766 + throwOnError: true 767 + }); 768 + return data; 769 + } 770 + }; 771 + return mutationOptions; 1357 772 }; 1358 773 1359 774 /** 1360 775 * Mark all episodes in a show as watched 1361 776 */ 1362 - export const showsControllerMarkShowWatchedMutation = ( 1363 - options?: Partial<Options<ShowsControllerMarkShowWatchedData>>, 1364 - ): UseMutationOptions< 1365 - ShowsControllerMarkShowWatchedResponse, 1366 - DefaultError, 1367 - Options<ShowsControllerMarkShowWatchedData> 1368 - > => { 1369 - const mutationOptions: UseMutationOptions< 1370 - ShowsControllerMarkShowWatchedResponse, 1371 - DefaultError, 1372 - Options<ShowsControllerMarkShowWatchedData> 1373 - > = { 1374 - mutationFn: async (fnOptions) => { 1375 - const { data } = await showsControllerMarkShowWatched({ 1376 - ...options, 1377 - ...fnOptions, 1378 - throwOnError: true, 1379 - }); 1380 - return data; 1381 - }, 1382 - }; 1383 - return mutationOptions; 777 + export const showsControllerMarkShowWatchedMutation = (options?: Partial<Options<ShowsControllerMarkShowWatchedData>>): UseMutationOptions<ShowsControllerMarkShowWatchedResponse, DefaultError, Options<ShowsControllerMarkShowWatchedData>> => { 778 + const mutationOptions: UseMutationOptions<ShowsControllerMarkShowWatchedResponse, DefaultError, Options<ShowsControllerMarkShowWatchedData>> = { 779 + mutationFn: async (fnOptions) => { 780 + const { data } = await showsControllerMarkShowWatched({ 781 + ...options, 782 + ...fnOptions, 783 + throwOnError: true 784 + }); 785 + return data; 786 + } 787 + }; 788 + return mutationOptions; 1384 789 }; 1385 790 1386 - export const usersControllerGetPublicProfileQueryKey = ( 1387 - options: Options<UsersControllerGetPublicProfileData>, 1388 - ) => createQueryKey("usersControllerGetPublicProfile", options); 791 + export const usersControllerGetPublicProfileQueryKey = (options: Options<UsersControllerGetPublicProfileData>) => createQueryKey('usersControllerGetPublicProfile', options); 1389 792 1390 793 /** 1391 794 * Get a public user profile by handle 1392 795 */ 1393 - export const usersControllerGetPublicProfileOptions = ( 1394 - options: Options<UsersControllerGetPublicProfileData>, 1395 - ) => 1396 - queryOptions< 1397 - UsersControllerGetPublicProfileResponse, 1398 - DefaultError, 1399 - UsersControllerGetPublicProfileResponse, 1400 - ReturnType<typeof usersControllerGetPublicProfileQueryKey> 1401 - >({ 1402 - queryFn: async ({ queryKey, signal }) => { 1403 - const { data } = await usersControllerGetPublicProfile({ 1404 - ...options, 1405 - ...queryKey[0], 1406 - signal, 1407 - throwOnError: true, 1408 - }); 1409 - return data; 1410 - }, 1411 - queryKey: usersControllerGetPublicProfileQueryKey(options), 1412 - }); 796 + export const usersControllerGetPublicProfileOptions = (options: Options<UsersControllerGetPublicProfileData>) => queryOptions<UsersControllerGetPublicProfileResponse, DefaultError, UsersControllerGetPublicProfileResponse, ReturnType<typeof usersControllerGetPublicProfileQueryKey>>({ 797 + queryFn: async ({ queryKey, signal }) => { 798 + const { data } = await usersControllerGetPublicProfile({ 799 + ...options, 800 + ...queryKey[0], 801 + signal, 802 + throwOnError: true 803 + }); 804 + return data; 805 + }, 806 + queryKey: usersControllerGetPublicProfileQueryKey(options) 807 + }); 1413 808 1414 - export const usersControllerGetAvatarQueryKey = ( 1415 - options: Options<UsersControllerGetAvatarData>, 1416 - ) => createQueryKey("usersControllerGetAvatar", options); 809 + export const usersControllerGetAvatarQueryKey = (options: Options<UsersControllerGetAvatarData>) => createQueryKey('usersControllerGetAvatar', options); 1417 810 1418 811 /** 1419 812 * Get a public user avatar from the user's PDS 1420 813 */ 1421 - export const usersControllerGetAvatarOptions = ( 1422 - options: Options<UsersControllerGetAvatarData>, 1423 - ) => 1424 - queryOptions< 1425 - unknown, 1426 - DefaultError, 1427 - unknown, 1428 - ReturnType<typeof usersControllerGetAvatarQueryKey> 1429 - >({ 1430 - queryFn: async ({ queryKey, signal }) => { 1431 - const { data } = await usersControllerGetAvatar({ 1432 - ...options, 1433 - ...queryKey[0], 1434 - signal, 1435 - throwOnError: true, 1436 - }); 1437 - return data; 1438 - }, 1439 - queryKey: usersControllerGetAvatarQueryKey(options), 1440 - }); 814 + export const usersControllerGetAvatarOptions = (options: Options<UsersControllerGetAvatarData>) => queryOptions<unknown, DefaultError, unknown, ReturnType<typeof usersControllerGetAvatarQueryKey>>({ 815 + queryFn: async ({ queryKey, signal }) => { 816 + const { data } = await usersControllerGetAvatar({ 817 + ...options, 818 + ...queryKey[0], 819 + signal, 820 + throwOnError: true 821 + }); 822 + return data; 823 + }, 824 + queryKey: usersControllerGetAvatarQueryKey(options) 825 + }); 1441 826 1442 - export const usersControllerGetMySettingsQueryKey = ( 1443 - options?: Options<UsersControllerGetMySettingsData>, 1444 - ) => createQueryKey("usersControllerGetMySettings", options); 827 + export const usersControllerGetMySettingsQueryKey = (options?: Options<UsersControllerGetMySettingsData>) => createQueryKey('usersControllerGetMySettings', options); 1445 828 1446 829 /** 1447 830 * Get current user's settings 1448 831 */ 1449 - export const usersControllerGetMySettingsOptions = ( 1450 - options?: Options<UsersControllerGetMySettingsData>, 1451 - ) => 1452 - queryOptions< 1453 - UsersControllerGetMySettingsResponse, 1454 - DefaultError, 1455 - UsersControllerGetMySettingsResponse, 1456 - ReturnType<typeof usersControllerGetMySettingsQueryKey> 1457 - >({ 1458 - queryFn: async ({ queryKey, signal }) => { 1459 - const { data } = await usersControllerGetMySettings({ 1460 - ...options, 1461 - ...queryKey[0], 1462 - signal, 1463 - throwOnError: true, 1464 - }); 1465 - return data; 1466 - }, 1467 - queryKey: usersControllerGetMySettingsQueryKey(options), 1468 - }); 832 + export const usersControllerGetMySettingsOptions = (options?: Options<UsersControllerGetMySettingsData>) => queryOptions<UsersControllerGetMySettingsResponse, DefaultError, UsersControllerGetMySettingsResponse, ReturnType<typeof usersControllerGetMySettingsQueryKey>>({ 833 + queryFn: async ({ queryKey, signal }) => { 834 + const { data } = await usersControllerGetMySettings({ 835 + ...options, 836 + ...queryKey[0], 837 + signal, 838 + throwOnError: true 839 + }); 840 + return data; 841 + }, 842 + queryKey: usersControllerGetMySettingsQueryKey(options) 843 + }); 1469 844 1470 845 /** 1471 846 * Update current user's settings 1472 847 */ 1473 - export const usersControllerUpdateMySettingsMutation = ( 1474 - options?: Partial<Options<UsersControllerUpdateMySettingsData>>, 1475 - ): UseMutationOptions< 1476 - UsersControllerUpdateMySettingsResponse, 1477 - DefaultError, 1478 - Options<UsersControllerUpdateMySettingsData> 1479 - > => { 1480 - const mutationOptions: UseMutationOptions< 1481 - UsersControllerUpdateMySettingsResponse, 1482 - DefaultError, 1483 - Options<UsersControllerUpdateMySettingsData> 1484 - > = { 1485 - mutationFn: async (fnOptions) => { 1486 - const { data } = await usersControllerUpdateMySettings({ 1487 - ...options, 1488 - ...fnOptions, 1489 - throwOnError: true, 1490 - }); 1491 - return data; 1492 - }, 1493 - }; 1494 - return mutationOptions; 848 + export const usersControllerUpdateMySettingsMutation = (options?: Partial<Options<UsersControllerUpdateMySettingsData>>): UseMutationOptions<UsersControllerUpdateMySettingsResponse, DefaultError, Options<UsersControllerUpdateMySettingsData>> => { 849 + const mutationOptions: UseMutationOptions<UsersControllerUpdateMySettingsResponse, DefaultError, Options<UsersControllerUpdateMySettingsData>> = { 850 + mutationFn: async (fnOptions) => { 851 + const { data } = await usersControllerUpdateMySettings({ 852 + ...options, 853 + ...fnOptions, 854 + throwOnError: true 855 + }); 856 + return data; 857 + } 858 + }; 859 + return mutationOptions; 1495 860 }; 1496 861 1497 862 /** 1498 863 * Update current user's profile 1499 864 */ 1500 - export const usersControllerUpdateMyProfileMutation = ( 1501 - options?: Partial<Options<UsersControllerUpdateMyProfileData>>, 1502 - ): UseMutationOptions< 1503 - UsersControllerUpdateMyProfileResponse, 1504 - DefaultError, 1505 - Options<UsersControllerUpdateMyProfileData> 1506 - > => { 1507 - const mutationOptions: UseMutationOptions< 1508 - UsersControllerUpdateMyProfileResponse, 1509 - DefaultError, 1510 - Options<UsersControllerUpdateMyProfileData> 1511 - > = { 1512 - mutationFn: async (fnOptions) => { 1513 - const { data } = await usersControllerUpdateMyProfile({ 1514 - ...options, 1515 - ...fnOptions, 1516 - throwOnError: true, 1517 - }); 1518 - return data; 1519 - }, 1520 - }; 1521 - return mutationOptions; 865 + export const usersControllerUpdateMyProfileMutation = (options?: Partial<Options<UsersControllerUpdateMyProfileData>>): UseMutationOptions<UsersControllerUpdateMyProfileResponse, DefaultError, Options<UsersControllerUpdateMyProfileData>> => { 866 + const mutationOptions: UseMutationOptions<UsersControllerUpdateMyProfileResponse, DefaultError, Options<UsersControllerUpdateMyProfileData>> = { 867 + mutationFn: async (fnOptions) => { 868 + const { data } = await usersControllerUpdateMyProfile({ 869 + ...options, 870 + ...fnOptions, 871 + throwOnError: true 872 + }); 873 + return data; 874 + } 875 + }; 876 + return mutationOptions; 1522 877 }; 1523 878 1524 879 /** 1525 880 * Delete current user's profile avatar 1526 881 */ 1527 - export const usersControllerDeleteMyAvatarMutation = ( 1528 - options?: Partial<Options<UsersControllerDeleteMyAvatarData>>, 1529 - ): UseMutationOptions< 1530 - UsersControllerDeleteMyAvatarResponse, 1531 - DefaultError, 1532 - Options<UsersControllerDeleteMyAvatarData> 1533 - > => { 1534 - const mutationOptions: UseMutationOptions< 1535 - UsersControllerDeleteMyAvatarResponse, 1536 - DefaultError, 1537 - Options<UsersControllerDeleteMyAvatarData> 1538 - > = { 1539 - mutationFn: async (fnOptions) => { 1540 - const { data } = await usersControllerDeleteMyAvatar({ 1541 - ...options, 1542 - ...fnOptions, 1543 - throwOnError: true, 1544 - }); 1545 - return data; 1546 - }, 1547 - }; 1548 - return mutationOptions; 882 + export const usersControllerDeleteMyAvatarMutation = (options?: Partial<Options<UsersControllerDeleteMyAvatarData>>): UseMutationOptions<UsersControllerDeleteMyAvatarResponse, DefaultError, Options<UsersControllerDeleteMyAvatarData>> => { 883 + const mutationOptions: UseMutationOptions<UsersControllerDeleteMyAvatarResponse, DefaultError, Options<UsersControllerDeleteMyAvatarData>> = { 884 + mutationFn: async (fnOptions) => { 885 + const { data } = await usersControllerDeleteMyAvatar({ 886 + ...options, 887 + ...fnOptions, 888 + throwOnError: true 889 + }); 890 + return data; 891 + } 892 + }; 893 + return mutationOptions; 1549 894 }; 1550 895 1551 896 /** 1552 897 * Upload current user's profile avatar 1553 898 */ 1554 - export const usersControllerUploadMyAvatarMutation = ( 1555 - options?: Partial<Options<UsersControllerUploadMyAvatarData>>, 1556 - ): UseMutationOptions< 1557 - UsersControllerUploadMyAvatarResponse, 1558 - DefaultError, 1559 - Options<UsersControllerUploadMyAvatarData> 1560 - > => { 1561 - const mutationOptions: UseMutationOptions< 1562 - UsersControllerUploadMyAvatarResponse, 1563 - DefaultError, 1564 - Options<UsersControllerUploadMyAvatarData> 1565 - > = { 1566 - mutationFn: async (fnOptions) => { 1567 - const { data } = await usersControllerUploadMyAvatar({ 1568 - ...options, 1569 - ...fnOptions, 1570 - throwOnError: true, 1571 - }); 1572 - return data; 1573 - }, 1574 - }; 1575 - return mutationOptions; 899 + export const usersControllerUploadMyAvatarMutation = (options?: Partial<Options<UsersControllerUploadMyAvatarData>>): UseMutationOptions<UsersControllerUploadMyAvatarResponse, DefaultError, Options<UsersControllerUploadMyAvatarData>> => { 900 + const mutationOptions: UseMutationOptions<UsersControllerUploadMyAvatarResponse, DefaultError, Options<UsersControllerUploadMyAvatarData>> = { 901 + mutationFn: async (fnOptions) => { 902 + const { data } = await usersControllerUploadMyAvatar({ 903 + ...options, 904 + ...fnOptions, 905 + throwOnError: true 906 + }); 907 + return data; 908 + } 909 + }; 910 + return mutationOptions; 1576 911 }; 1577 912 1578 913 /** 1579 914 * Delete current user's account 1580 915 */ 1581 - export const usersControllerDeleteMyAccountMutation = ( 1582 - options?: Partial<Options<UsersControllerDeleteMyAccountData>>, 1583 - ): UseMutationOptions< 1584 - UsersControllerDeleteMyAccountResponse, 1585 - DefaultError, 1586 - Options<UsersControllerDeleteMyAccountData> 1587 - > => { 1588 - const mutationOptions: UseMutationOptions< 1589 - UsersControllerDeleteMyAccountResponse, 1590 - DefaultError, 1591 - Options<UsersControllerDeleteMyAccountData> 1592 - > = { 1593 - mutationFn: async (fnOptions) => { 1594 - const { data } = await usersControllerDeleteMyAccount({ 1595 - ...options, 1596 - ...fnOptions, 1597 - throwOnError: true, 1598 - }); 1599 - return data; 1600 - }, 1601 - }; 1602 - return mutationOptions; 916 + export const usersControllerDeleteMyAccountMutation = (options?: Partial<Options<UsersControllerDeleteMyAccountData>>): UseMutationOptions<UsersControllerDeleteMyAccountResponse, DefaultError, Options<UsersControllerDeleteMyAccountData>> => { 917 + const mutationOptions: UseMutationOptions<UsersControllerDeleteMyAccountResponse, DefaultError, Options<UsersControllerDeleteMyAccountData>> = { 918 + mutationFn: async (fnOptions) => { 919 + const { data } = await usersControllerDeleteMyAccount({ 920 + ...options, 921 + ...fnOptions, 922 + throwOnError: true 923 + }); 924 + return data; 925 + } 926 + }; 927 + return mutationOptions; 1603 928 }; 1604 929 1605 930 /** 1606 931 * Complete onboarding for the current user 1607 932 */ 1608 - export const usersControllerCompleteOnboardingMutation = ( 1609 - options?: Partial<Options<UsersControllerCompleteOnboardingData>>, 1610 - ): UseMutationOptions< 1611 - UsersControllerCompleteOnboardingResponse, 1612 - DefaultError, 1613 - Options<UsersControllerCompleteOnboardingData> 1614 - > => { 1615 - const mutationOptions: UseMutationOptions< 1616 - UsersControllerCompleteOnboardingResponse, 1617 - DefaultError, 1618 - Options<UsersControllerCompleteOnboardingData> 1619 - > = { 1620 - mutationFn: async (fnOptions) => { 1621 - const { data } = await usersControllerCompleteOnboarding({ 1622 - ...options, 1623 - ...fnOptions, 1624 - throwOnError: true, 1625 - }); 1626 - return data; 1627 - }, 1628 - }; 1629 - return mutationOptions; 933 + export const usersControllerCompleteOnboardingMutation = (options?: Partial<Options<UsersControllerCompleteOnboardingData>>): UseMutationOptions<UsersControllerCompleteOnboardingResponse, DefaultError, Options<UsersControllerCompleteOnboardingData>> => { 934 + const mutationOptions: UseMutationOptions<UsersControllerCompleteOnboardingResponse, DefaultError, Options<UsersControllerCompleteOnboardingData>> = { 935 + mutationFn: async (fnOptions) => { 936 + const { data } = await usersControllerCompleteOnboarding({ 937 + ...options, 938 + ...fnOptions, 939 + throwOnError: true 940 + }); 941 + return data; 942 + } 943 + }; 944 + return mutationOptions; 1630 945 }; 1631 946 1632 947 /** 1633 948 * Fetch normalized history from a public Trakt profile 1634 949 */ 1635 - export const usersControllerFetchMyTraktPublicHistoryMutation = ( 1636 - options?: Partial<Options<UsersControllerFetchMyTraktPublicHistoryData>>, 1637 - ): UseMutationOptions< 1638 - UsersControllerFetchMyTraktPublicHistoryResponse, 1639 - DefaultError, 1640 - Options<UsersControllerFetchMyTraktPublicHistoryData> 1641 - > => { 1642 - const mutationOptions: UseMutationOptions< 1643 - UsersControllerFetchMyTraktPublicHistoryResponse, 1644 - DefaultError, 1645 - Options<UsersControllerFetchMyTraktPublicHistoryData> 1646 - > = { 1647 - mutationFn: async (fnOptions) => { 1648 - const { data } = await usersControllerFetchMyTraktPublicHistory({ 1649 - ...options, 1650 - ...fnOptions, 1651 - throwOnError: true, 1652 - }); 1653 - return data; 1654 - }, 1655 - }; 1656 - return mutationOptions; 950 + export const usersControllerFetchMyTraktPublicHistoryMutation = (options?: Partial<Options<UsersControllerFetchMyTraktPublicHistoryData>>): UseMutationOptions<UsersControllerFetchMyTraktPublicHistoryResponse, DefaultError, Options<UsersControllerFetchMyTraktPublicHistoryData>> => { 951 + const mutationOptions: UseMutationOptions<UsersControllerFetchMyTraktPublicHistoryResponse, DefaultError, Options<UsersControllerFetchMyTraktPublicHistoryData>> = { 952 + mutationFn: async (fnOptions) => { 953 + const { data } = await usersControllerFetchMyTraktPublicHistory({ 954 + ...options, 955 + ...fnOptions, 956 + throwOnError: true 957 + }); 958 + return data; 959 + } 960 + }; 961 + return mutationOptions; 1657 962 }; 1658 963 1659 964 /** 1660 965 * Start a background import for a public Trakt profile 1661 966 */ 1662 - export const usersControllerStartMyTraktImportMutation = ( 1663 - options?: Partial<Options<UsersControllerStartMyTraktImportData>>, 1664 - ): UseMutationOptions< 1665 - UsersControllerStartMyTraktImportResponse, 1666 - DefaultError, 1667 - Options<UsersControllerStartMyTraktImportData> 1668 - > => { 1669 - const mutationOptions: UseMutationOptions< 1670 - UsersControllerStartMyTraktImportResponse, 1671 - DefaultError, 1672 - Options<UsersControllerStartMyTraktImportData> 1673 - > = { 1674 - mutationFn: async (fnOptions) => { 1675 - const { data } = await usersControllerStartMyTraktImport({ 1676 - ...options, 1677 - ...fnOptions, 1678 - throwOnError: true, 1679 - }); 1680 - return data; 1681 - }, 1682 - }; 1683 - return mutationOptions; 967 + export const usersControllerStartMyTraktImportMutation = (options?: Partial<Options<UsersControllerStartMyTraktImportData>>): UseMutationOptions<UsersControllerStartMyTraktImportResponse, DefaultError, Options<UsersControllerStartMyTraktImportData>> => { 968 + const mutationOptions: UseMutationOptions<UsersControllerStartMyTraktImportResponse, DefaultError, Options<UsersControllerStartMyTraktImportData>> = { 969 + mutationFn: async (fnOptions) => { 970 + const { data } = await usersControllerStartMyTraktImport({ 971 + ...options, 972 + ...fnOptions, 973 + throwOnError: true 974 + }); 975 + return data; 976 + } 977 + }; 978 + return mutationOptions; 1684 979 }; 1685 980 1686 - export const usersControllerGetMyCurrentTraktImportQueryKey = ( 1687 - options?: Options<UsersControllerGetMyCurrentTraktImportData>, 1688 - ) => createQueryKey("usersControllerGetMyCurrentTraktImport", options); 981 + export const usersControllerGetMyCurrentTraktImportQueryKey = (options?: Options<UsersControllerGetMyCurrentTraktImportData>) => createQueryKey('usersControllerGetMyCurrentTraktImport', options); 1689 982 1690 983 /** 1691 984 * Get the current or most recent background Trakt import for the current user 1692 985 */ 1693 - export const usersControllerGetMyCurrentTraktImportOptions = ( 1694 - options?: Options<UsersControllerGetMyCurrentTraktImportData>, 1695 - ) => 1696 - queryOptions< 1697 - UsersControllerGetMyCurrentTraktImportResponse, 1698 - DefaultError, 1699 - UsersControllerGetMyCurrentTraktImportResponse, 1700 - ReturnType<typeof usersControllerGetMyCurrentTraktImportQueryKey> 1701 - >({ 1702 - queryFn: async ({ queryKey, signal }) => { 1703 - const { data } = await usersControllerGetMyCurrentTraktImport({ 1704 - ...options, 1705 - ...queryKey[0], 1706 - signal, 1707 - throwOnError: true, 1708 - }); 1709 - return data; 1710 - }, 1711 - queryKey: usersControllerGetMyCurrentTraktImportQueryKey(options), 1712 - }); 986 + export const usersControllerGetMyCurrentTraktImportOptions = (options?: Options<UsersControllerGetMyCurrentTraktImportData>) => queryOptions<UsersControllerGetMyCurrentTraktImportResponse, DefaultError, UsersControllerGetMyCurrentTraktImportResponse, ReturnType<typeof usersControllerGetMyCurrentTraktImportQueryKey>>({ 987 + queryFn: async ({ queryKey, signal }) => { 988 + const { data } = await usersControllerGetMyCurrentTraktImport({ 989 + ...options, 990 + ...queryKey[0], 991 + signal, 992 + throwOnError: true 993 + }); 994 + return data; 995 + }, 996 + queryKey: usersControllerGetMyCurrentTraktImportQueryKey(options) 997 + }); 1713 998 1714 999 /** 1715 1000 * Import Bluesky follows that already have OpnShelf accounts 1716 1001 */ 1717 - export const usersControllerImportMyBlueskyFollowsMutation = ( 1718 - options?: Partial<Options<UsersControllerImportMyBlueskyFollowsData>>, 1719 - ): UseMutationOptions< 1720 - UsersControllerImportMyBlueskyFollowsResponse, 1721 - DefaultError, 1722 - Options<UsersControllerImportMyBlueskyFollowsData> 1723 - > => { 1724 - const mutationOptions: UseMutationOptions< 1725 - UsersControllerImportMyBlueskyFollowsResponse, 1726 - DefaultError, 1727 - Options<UsersControllerImportMyBlueskyFollowsData> 1728 - > = { 1729 - mutationFn: async (fnOptions) => { 1730 - const { data } = await usersControllerImportMyBlueskyFollows({ 1731 - ...options, 1732 - ...fnOptions, 1733 - throwOnError: true, 1734 - }); 1735 - return data; 1736 - }, 1737 - }; 1738 - return mutationOptions; 1002 + export const usersControllerImportMyBlueskyFollowsMutation = (options?: Partial<Options<UsersControllerImportMyBlueskyFollowsData>>): UseMutationOptions<UsersControllerImportMyBlueskyFollowsResponse, DefaultError, Options<UsersControllerImportMyBlueskyFollowsData>> => { 1003 + const mutationOptions: UseMutationOptions<UsersControllerImportMyBlueskyFollowsResponse, DefaultError, Options<UsersControllerImportMyBlueskyFollowsData>> = { 1004 + mutationFn: async (fnOptions) => { 1005 + const { data } = await usersControllerImportMyBlueskyFollows({ 1006 + ...options, 1007 + ...fnOptions, 1008 + throwOnError: true 1009 + }); 1010 + return data; 1011 + } 1012 + }; 1013 + return mutationOptions; 1739 1014 }; 1740 1015 1741 1016 /** 1742 1017 * Import normalized watch history items 1743 1018 */ 1744 - export const usersControllerImportMyHistoryMutation = ( 1745 - options?: Partial<Options<UsersControllerImportMyHistoryData>>, 1746 - ): UseMutationOptions< 1747 - UsersControllerImportMyHistoryResponse, 1748 - DefaultError, 1749 - Options<UsersControllerImportMyHistoryData> 1750 - > => { 1751 - const mutationOptions: UseMutationOptions< 1752 - UsersControllerImportMyHistoryResponse, 1753 - DefaultError, 1754 - Options<UsersControllerImportMyHistoryData> 1755 - > = { 1756 - mutationFn: async (fnOptions) => { 1757 - const { data } = await usersControllerImportMyHistory({ 1758 - ...options, 1759 - ...fnOptions, 1760 - throwOnError: true, 1761 - }); 1762 - return data; 1763 - }, 1764 - }; 1765 - return mutationOptions; 1019 + export const usersControllerImportMyHistoryMutation = (options?: Partial<Options<UsersControllerImportMyHistoryData>>): UseMutationOptions<UsersControllerImportMyHistoryResponse, DefaultError, Options<UsersControllerImportMyHistoryData>> => { 1020 + const mutationOptions: UseMutationOptions<UsersControllerImportMyHistoryResponse, DefaultError, Options<UsersControllerImportMyHistoryData>> = { 1021 + mutationFn: async (fnOptions) => { 1022 + const { data } = await usersControllerImportMyHistory({ 1023 + ...options, 1024 + ...fnOptions, 1025 + throwOnError: true 1026 + }); 1027 + return data; 1028 + } 1029 + }; 1030 + return mutationOptions; 1766 1031 }; 1767 1032 1768 - export const listsControllerGetUserListsQueryKey = ( 1769 - options?: Options<ListsControllerGetUserListsData>, 1770 - ) => createQueryKey("listsControllerGetUserLists", options); 1033 + export const listsControllerGetUserListsQueryKey = (options?: Options<ListsControllerGetUserListsData>) => createQueryKey('listsControllerGetUserLists', options); 1771 1034 1772 1035 /** 1773 1036 * Get all lists for the authenticated user 1774 1037 */ 1775 - export const listsControllerGetUserListsOptions = ( 1776 - options?: Options<ListsControllerGetUserListsData>, 1777 - ) => 1778 - queryOptions< 1779 - ListsControllerGetUserListsResponse, 1780 - DefaultError, 1781 - ListsControllerGetUserListsResponse, 1782 - ReturnType<typeof listsControllerGetUserListsQueryKey> 1783 - >({ 1784 - queryFn: async ({ queryKey, signal }) => { 1785 - const { data } = await listsControllerGetUserLists({ 1786 - ...options, 1787 - ...queryKey[0], 1788 - signal, 1789 - throwOnError: true, 1790 - }); 1791 - return data; 1792 - }, 1793 - queryKey: listsControllerGetUserListsQueryKey(options), 1794 - }); 1038 + export const listsControllerGetUserListsOptions = (options?: Options<ListsControllerGetUserListsData>) => queryOptions<ListsControllerGetUserListsResponse, DefaultError, ListsControllerGetUserListsResponse, ReturnType<typeof listsControllerGetUserListsQueryKey>>({ 1039 + queryFn: async ({ queryKey, signal }) => { 1040 + const { data } = await listsControllerGetUserLists({ 1041 + ...options, 1042 + ...queryKey[0], 1043 + signal, 1044 + throwOnError: true 1045 + }); 1046 + return data; 1047 + }, 1048 + queryKey: listsControllerGetUserListsQueryKey(options) 1049 + }); 1795 1050 1796 1051 /** 1797 1052 * Create a new list 1798 1053 */ 1799 - export const listsControllerCreateListMutation = ( 1800 - options?: Partial<Options<ListsControllerCreateListData>>, 1801 - ): UseMutationOptions< 1802 - ListsControllerCreateListResponse, 1803 - DefaultError, 1804 - Options<ListsControllerCreateListData> 1805 - > => { 1806 - const mutationOptions: UseMutationOptions< 1807 - ListsControllerCreateListResponse, 1808 - DefaultError, 1809 - Options<ListsControllerCreateListData> 1810 - > = { 1811 - mutationFn: async (fnOptions) => { 1812 - const { data } = await listsControllerCreateList({ 1813 - ...options, 1814 - ...fnOptions, 1815 - throwOnError: true, 1816 - }); 1817 - return data; 1818 - }, 1819 - }; 1820 - return mutationOptions; 1054 + export const listsControllerCreateListMutation = (options?: Partial<Options<ListsControllerCreateListData>>): UseMutationOptions<ListsControllerCreateListResponse, DefaultError, Options<ListsControllerCreateListData>> => { 1055 + const mutationOptions: UseMutationOptions<ListsControllerCreateListResponse, DefaultError, Options<ListsControllerCreateListData>> = { 1056 + mutationFn: async (fnOptions) => { 1057 + const { data } = await listsControllerCreateList({ 1058 + ...options, 1059 + ...fnOptions, 1060 + throwOnError: true 1061 + }); 1062 + return data; 1063 + } 1064 + }; 1065 + return mutationOptions; 1821 1066 }; 1822 1067 1823 - export const listsControllerGetPublicUserListsQueryKey = ( 1824 - options: Options<ListsControllerGetPublicUserListsData>, 1825 - ) => createQueryKey("listsControllerGetPublicUserLists", options); 1068 + export const listsControllerGetPublicUserListsQueryKey = (options: Options<ListsControllerGetPublicUserListsData>) => createQueryKey('listsControllerGetPublicUserLists', options); 1826 1069 1827 1070 /** 1828 1071 * Get public list summaries for a user 1829 1072 */ 1830 - export const listsControllerGetPublicUserListsOptions = ( 1831 - options: Options<ListsControllerGetPublicUserListsData>, 1832 - ) => 1833 - queryOptions< 1834 - ListsControllerGetPublicUserListsResponse, 1835 - DefaultError, 1836 - ListsControllerGetPublicUserListsResponse, 1837 - ReturnType<typeof listsControllerGetPublicUserListsQueryKey> 1838 - >({ 1839 - queryFn: async ({ queryKey, signal }) => { 1840 - const { data } = await listsControllerGetPublicUserLists({ 1841 - ...options, 1842 - ...queryKey[0], 1843 - signal, 1844 - throwOnError: true, 1845 - }); 1846 - return data; 1847 - }, 1848 - queryKey: listsControllerGetPublicUserListsQueryKey(options), 1849 - }); 1073 + export const listsControllerGetPublicUserListsOptions = (options: Options<ListsControllerGetPublicUserListsData>) => queryOptions<ListsControllerGetPublicUserListsResponse, DefaultError, ListsControllerGetPublicUserListsResponse, ReturnType<typeof listsControllerGetPublicUserListsQueryKey>>({ 1074 + queryFn: async ({ queryKey, signal }) => { 1075 + const { data } = await listsControllerGetPublicUserLists({ 1076 + ...options, 1077 + ...queryKey[0], 1078 + signal, 1079 + throwOnError: true 1080 + }); 1081 + return data; 1082 + }, 1083 + queryKey: listsControllerGetPublicUserListsQueryKey(options) 1084 + }); 1850 1085 1851 - export const listsControllerGetPublicUserListQueryKey = ( 1852 - options: Options<ListsControllerGetPublicUserListData>, 1853 - ) => createQueryKey("listsControllerGetPublicUserList", options); 1086 + export const listsControllerGetPublicUserListQueryKey = (options: Options<ListsControllerGetPublicUserListData>) => createQueryKey('listsControllerGetPublicUserList', options); 1854 1087 1855 1088 /** 1856 1089 * Get a public list with its items for a user 1857 1090 */ 1858 - export const listsControllerGetPublicUserListOptions = ( 1859 - options: Options<ListsControllerGetPublicUserListData>, 1860 - ) => 1861 - queryOptions< 1862 - ListsControllerGetPublicUserListResponse, 1863 - DefaultError, 1864 - ListsControllerGetPublicUserListResponse, 1865 - ReturnType<typeof listsControllerGetPublicUserListQueryKey> 1866 - >({ 1867 - queryFn: async ({ queryKey, signal }) => { 1868 - const { data } = await listsControllerGetPublicUserList({ 1869 - ...options, 1870 - ...queryKey[0], 1871 - signal, 1872 - throwOnError: true, 1873 - }); 1874 - return data; 1875 - }, 1876 - queryKey: listsControllerGetPublicUserListQueryKey(options), 1877 - }); 1091 + export const listsControllerGetPublicUserListOptions = (options: Options<ListsControllerGetPublicUserListData>) => queryOptions<ListsControllerGetPublicUserListResponse, DefaultError, ListsControllerGetPublicUserListResponse, ReturnType<typeof listsControllerGetPublicUserListQueryKey>>({ 1092 + queryFn: async ({ queryKey, signal }) => { 1093 + const { data } = await listsControllerGetPublicUserList({ 1094 + ...options, 1095 + ...queryKey[0], 1096 + signal, 1097 + throwOnError: true 1098 + }); 1099 + return data; 1100 + }, 1101 + queryKey: listsControllerGetPublicUserListQueryKey(options) 1102 + }); 1878 1103 1879 - export const listsControllerGetPublicUserListInfiniteQueryKey = ( 1880 - options: Options<ListsControllerGetPublicUserListData>, 1881 - ): QueryKey<Options<ListsControllerGetPublicUserListData>> => 1882 - createQueryKey("listsControllerGetPublicUserList", options, true); 1104 + export const listsControllerGetPublicUserListInfiniteQueryKey = (options: Options<ListsControllerGetPublicUserListData>): QueryKey<Options<ListsControllerGetPublicUserListData>> => createQueryKey('listsControllerGetPublicUserList', options, true); 1883 1105 1884 1106 /** 1885 1107 * Get a public list with its items for a user 1886 1108 */ 1887 - export const listsControllerGetPublicUserListInfiniteOptions = ( 1888 - options: Options<ListsControllerGetPublicUserListData>, 1889 - ) => 1890 - infiniteQueryOptions< 1891 - ListsControllerGetPublicUserListResponse, 1892 - DefaultError, 1893 - InfiniteData<ListsControllerGetPublicUserListResponse>, 1894 - QueryKey<Options<ListsControllerGetPublicUserListData>>, 1895 - | number 1896 - | Pick< 1897 - QueryKey<Options<ListsControllerGetPublicUserListData>>[0], 1898 - "body" | "headers" | "path" | "query" 1899 - > 1900 - >( 1901 - // @ts-ignore 1902 - { 1903 - queryFn: async ({ pageParam, queryKey, signal }) => { 1904 - // @ts-ignore 1905 - const page: Pick< 1906 - QueryKey<Options<ListsControllerGetPublicUserListData>>[0], 1907 - "body" | "headers" | "path" | "query" 1908 - > = 1909 - typeof pageParam === "object" 1910 - ? pageParam 1911 - : { 1912 - query: { 1913 - page: pageParam, 1914 - }, 1915 - }; 1916 - const params = createInfiniteParams(queryKey, page); 1917 - const { data } = await listsControllerGetPublicUserList({ 1918 - ...options, 1919 - ...params, 1920 - signal, 1921 - throwOnError: true, 1922 - }); 1923 - return data; 1924 - }, 1925 - queryKey: listsControllerGetPublicUserListInfiniteQueryKey(options), 1926 - }, 1927 - ); 1109 + export const listsControllerGetPublicUserListInfiniteOptions = (options: Options<ListsControllerGetPublicUserListData>) => infiniteQueryOptions<ListsControllerGetPublicUserListResponse, DefaultError, InfiniteData<ListsControllerGetPublicUserListResponse>, QueryKey<Options<ListsControllerGetPublicUserListData>>, number | Pick<QueryKey<Options<ListsControllerGetPublicUserListData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1110 + // @ts-ignore 1111 + { 1112 + queryFn: async ({ pageParam, queryKey, signal }) => { 1113 + // @ts-ignore 1114 + const page: Pick<QueryKey<Options<ListsControllerGetPublicUserListData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1115 + query: { 1116 + page: pageParam 1117 + } 1118 + }; 1119 + const params = createInfiniteParams(queryKey, page); 1120 + const { data } = await listsControllerGetPublicUserList({ 1121 + ...options, 1122 + ...params, 1123 + signal, 1124 + throwOnError: true 1125 + }); 1126 + return data; 1127 + }, 1128 + queryKey: listsControllerGetPublicUserListInfiniteQueryKey(options) 1129 + }); 1928 1130 1929 1131 /** 1930 1132 * Delete a list (not allowed for default lists) 1931 1133 */ 1932 - export const listsControllerDeleteListMutation = ( 1933 - options?: Partial<Options<ListsControllerDeleteListData>>, 1934 - ): UseMutationOptions< 1935 - unknown, 1936 - DefaultError, 1937 - Options<ListsControllerDeleteListData> 1938 - > => { 1939 - const mutationOptions: UseMutationOptions< 1940 - unknown, 1941 - DefaultError, 1942 - Options<ListsControllerDeleteListData> 1943 - > = { 1944 - mutationFn: async (fnOptions) => { 1945 - const { data } = await listsControllerDeleteList({ 1946 - ...options, 1947 - ...fnOptions, 1948 - throwOnError: true, 1949 - }); 1950 - return data; 1951 - }, 1952 - }; 1953 - return mutationOptions; 1134 + export const listsControllerDeleteListMutation = (options?: Partial<Options<ListsControllerDeleteListData>>): UseMutationOptions<unknown, DefaultError, Options<ListsControllerDeleteListData>> => { 1135 + const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<ListsControllerDeleteListData>> = { 1136 + mutationFn: async (fnOptions) => { 1137 + const { data } = await listsControllerDeleteList({ 1138 + ...options, 1139 + ...fnOptions, 1140 + throwOnError: true 1141 + }); 1142 + return data; 1143 + } 1144 + }; 1145 + return mutationOptions; 1954 1146 }; 1955 1147 1956 - export const listsControllerGetListQueryKey = ( 1957 - options: Options<ListsControllerGetListData>, 1958 - ) => createQueryKey("listsControllerGetList", options); 1148 + export const listsControllerGetListQueryKey = (options: Options<ListsControllerGetListData>) => createQueryKey('listsControllerGetList', options); 1959 1149 1960 1150 /** 1961 1151 * Get a specific list with its items 1962 1152 */ 1963 - export const listsControllerGetListOptions = ( 1964 - options: Options<ListsControllerGetListData>, 1965 - ) => 1966 - queryOptions< 1967 - ListsControllerGetListResponse, 1968 - DefaultError, 1969 - ListsControllerGetListResponse, 1970 - ReturnType<typeof listsControllerGetListQueryKey> 1971 - >({ 1972 - queryFn: async ({ queryKey, signal }) => { 1973 - const { data } = await listsControllerGetList({ 1974 - ...options, 1975 - ...queryKey[0], 1976 - signal, 1977 - throwOnError: true, 1978 - }); 1979 - return data; 1980 - }, 1981 - queryKey: listsControllerGetListQueryKey(options), 1982 - }); 1153 + export const listsControllerGetListOptions = (options: Options<ListsControllerGetListData>) => queryOptions<ListsControllerGetListResponse, DefaultError, ListsControllerGetListResponse, ReturnType<typeof listsControllerGetListQueryKey>>({ 1154 + queryFn: async ({ queryKey, signal }) => { 1155 + const { data } = await listsControllerGetList({ 1156 + ...options, 1157 + ...queryKey[0], 1158 + signal, 1159 + throwOnError: true 1160 + }); 1161 + return data; 1162 + }, 1163 + queryKey: listsControllerGetListQueryKey(options) 1164 + }); 1983 1165 1984 - export const listsControllerGetListInfiniteQueryKey = ( 1985 - options: Options<ListsControllerGetListData>, 1986 - ): QueryKey<Options<ListsControllerGetListData>> => 1987 - createQueryKey("listsControllerGetList", options, true); 1166 + export const listsControllerGetListInfiniteQueryKey = (options: Options<ListsControllerGetListData>): QueryKey<Options<ListsControllerGetListData>> => createQueryKey('listsControllerGetList', options, true); 1988 1167 1989 1168 /** 1990 1169 * Get a specific list with its items 1991 1170 */ 1992 - export const listsControllerGetListInfiniteOptions = ( 1993 - options: Options<ListsControllerGetListData>, 1994 - ) => 1995 - infiniteQueryOptions< 1996 - ListsControllerGetListResponse, 1997 - DefaultError, 1998 - InfiniteData<ListsControllerGetListResponse>, 1999 - QueryKey<Options<ListsControllerGetListData>>, 2000 - | number 2001 - | Pick< 2002 - QueryKey<Options<ListsControllerGetListData>>[0], 2003 - "body" | "headers" | "path" | "query" 2004 - > 2005 - >( 2006 - // @ts-ignore 2007 - { 2008 - queryFn: async ({ pageParam, queryKey, signal }) => { 2009 - // @ts-ignore 2010 - const page: Pick< 2011 - QueryKey<Options<ListsControllerGetListData>>[0], 2012 - "body" | "headers" | "path" | "query" 2013 - > = 2014 - typeof pageParam === "object" 2015 - ? pageParam 2016 - : { 2017 - query: { 2018 - page: pageParam, 2019 - }, 2020 - }; 2021 - const params = createInfiniteParams(queryKey, page); 2022 - const { data } = await listsControllerGetList({ 2023 - ...options, 2024 - ...params, 2025 - signal, 2026 - throwOnError: true, 2027 - }); 2028 - return data; 2029 - }, 2030 - queryKey: listsControllerGetListInfiniteQueryKey(options), 2031 - }, 2032 - ); 1171 + export const listsControllerGetListInfiniteOptions = (options: Options<ListsControllerGetListData>) => infiniteQueryOptions<ListsControllerGetListResponse, DefaultError, InfiniteData<ListsControllerGetListResponse>, QueryKey<Options<ListsControllerGetListData>>, number | Pick<QueryKey<Options<ListsControllerGetListData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1172 + // @ts-ignore 1173 + { 1174 + queryFn: async ({ pageParam, queryKey, signal }) => { 1175 + // @ts-ignore 1176 + const page: Pick<QueryKey<Options<ListsControllerGetListData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1177 + query: { 1178 + page: pageParam 1179 + } 1180 + }; 1181 + const params = createInfiniteParams(queryKey, page); 1182 + const { data } = await listsControllerGetList({ 1183 + ...options, 1184 + ...params, 1185 + signal, 1186 + throwOnError: true 1187 + }); 1188 + return data; 1189 + }, 1190 + queryKey: listsControllerGetListInfiniteQueryKey(options) 1191 + }); 2033 1192 2034 1193 /** 2035 1194 * Update a list 2036 1195 */ 2037 - export const listsControllerUpdateListMutation = ( 2038 - options?: Partial<Options<ListsControllerUpdateListData>>, 2039 - ): UseMutationOptions< 2040 - ListsControllerUpdateListResponse, 2041 - DefaultError, 2042 - Options<ListsControllerUpdateListData> 2043 - > => { 2044 - const mutationOptions: UseMutationOptions< 2045 - ListsControllerUpdateListResponse, 2046 - DefaultError, 2047 - Options<ListsControllerUpdateListData> 2048 - > = { 2049 - mutationFn: async (fnOptions) => { 2050 - const { data } = await listsControllerUpdateList({ 2051 - ...options, 2052 - ...fnOptions, 2053 - throwOnError: true, 2054 - }); 2055 - return data; 2056 - }, 2057 - }; 2058 - return mutationOptions; 1196 + export const listsControllerUpdateListMutation = (options?: Partial<Options<ListsControllerUpdateListData>>): UseMutationOptions<ListsControllerUpdateListResponse, DefaultError, Options<ListsControllerUpdateListData>> => { 1197 + const mutationOptions: UseMutationOptions<ListsControllerUpdateListResponse, DefaultError, Options<ListsControllerUpdateListData>> = { 1198 + mutationFn: async (fnOptions) => { 1199 + const { data } = await listsControllerUpdateList({ 1200 + ...options, 1201 + ...fnOptions, 1202 + throwOnError: true 1203 + }); 1204 + return data; 1205 + } 1206 + }; 1207 + return mutationOptions; 2059 1208 }; 2060 1209 2061 1210 /** 2062 1211 * Add an item to a list 2063 1212 */ 2064 - export const listsControllerAddItemToListMutation = ( 2065 - options?: Partial<Options<ListsControllerAddItemToListData>>, 2066 - ): UseMutationOptions< 2067 - unknown, 2068 - DefaultError, 2069 - Options<ListsControllerAddItemToListData> 2070 - > => { 2071 - const mutationOptions: UseMutationOptions< 2072 - unknown, 2073 - DefaultError, 2074 - Options<ListsControllerAddItemToListData> 2075 - > = { 2076 - mutationFn: async (fnOptions) => { 2077 - const { data } = await listsControllerAddItemToList({ 2078 - ...options, 2079 - ...fnOptions, 2080 - throwOnError: true, 2081 - }); 2082 - return data; 2083 - }, 2084 - }; 2085 - return mutationOptions; 1213 + export const listsControllerAddItemToListMutation = (options?: Partial<Options<ListsControllerAddItemToListData>>): UseMutationOptions<unknown, DefaultError, Options<ListsControllerAddItemToListData>> => { 1214 + const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<ListsControllerAddItemToListData>> = { 1215 + mutationFn: async (fnOptions) => { 1216 + const { data } = await listsControllerAddItemToList({ 1217 + ...options, 1218 + ...fnOptions, 1219 + throwOnError: true 1220 + }); 1221 + return data; 1222 + } 1223 + }; 1224 + return mutationOptions; 2086 1225 }; 2087 1226 2088 1227 /** 2089 1228 * Remove an item from a list 2090 1229 */ 2091 - export const listsControllerRemoveItemFromListMutation = ( 2092 - options?: Partial<Options<ListsControllerRemoveItemFromListData>>, 2093 - ): UseMutationOptions< 2094 - unknown, 2095 - DefaultError, 2096 - Options<ListsControllerRemoveItemFromListData> 2097 - > => { 2098 - const mutationOptions: UseMutationOptions< 2099 - unknown, 2100 - DefaultError, 2101 - Options<ListsControllerRemoveItemFromListData> 2102 - > = { 2103 - mutationFn: async (fnOptions) => { 2104 - const { data } = await listsControllerRemoveItemFromList({ 2105 - ...options, 2106 - ...fnOptions, 2107 - throwOnError: true, 2108 - }); 2109 - return data; 2110 - }, 2111 - }; 2112 - return mutationOptions; 1230 + export const listsControllerRemoveItemFromListMutation = (options?: Partial<Options<ListsControllerRemoveItemFromListData>>): UseMutationOptions<unknown, DefaultError, Options<ListsControllerRemoveItemFromListData>> => { 1231 + const mutationOptions: UseMutationOptions<unknown, DefaultError, Options<ListsControllerRemoveItemFromListData>> = { 1232 + mutationFn: async (fnOptions) => { 1233 + const { data } = await listsControllerRemoveItemFromList({ 1234 + ...options, 1235 + ...fnOptions, 1236 + throwOnError: true 1237 + }); 1238 + return data; 1239 + } 1240 + }; 1241 + return mutationOptions; 2113 1242 }; 2114 1243 2115 - export const listsControllerGetListsForItemQueryKey = ( 2116 - options: Options<ListsControllerGetListsForItemData>, 2117 - ) => createQueryKey("listsControllerGetListsForItem", options); 1244 + export const listsControllerGetListsForItemQueryKey = (options: Options<ListsControllerGetListsForItemData>) => createQueryKey('listsControllerGetListsForItem', options); 2118 1245 2119 1246 /** 2120 1247 * Get all lists with membership status for an item 2121 1248 */ 2122 - export const listsControllerGetListsForItemOptions = ( 2123 - options: Options<ListsControllerGetListsForItemData>, 2124 - ) => 2125 - queryOptions< 2126 - ListsControllerGetListsForItemResponse, 2127 - DefaultError, 2128 - ListsControllerGetListsForItemResponse, 2129 - ReturnType<typeof listsControllerGetListsForItemQueryKey> 2130 - >({ 2131 - queryFn: async ({ queryKey, signal }) => { 2132 - const { data } = await listsControllerGetListsForItem({ 2133 - ...options, 2134 - ...queryKey[0], 2135 - signal, 2136 - throwOnError: true, 2137 - }); 2138 - return data; 2139 - }, 2140 - queryKey: listsControllerGetListsForItemQueryKey(options), 2141 - }); 1249 + export const listsControllerGetListsForItemOptions = (options: Options<ListsControllerGetListsForItemData>) => queryOptions<ListsControllerGetListsForItemResponse, DefaultError, ListsControllerGetListsForItemResponse, ReturnType<typeof listsControllerGetListsForItemQueryKey>>({ 1250 + queryFn: async ({ queryKey, signal }) => { 1251 + const { data } = await listsControllerGetListsForItem({ 1252 + ...options, 1253 + ...queryKey[0], 1254 + signal, 1255 + throwOnError: true 1256 + }); 1257 + return data; 1258 + }, 1259 + queryKey: listsControllerGetListsForItemQueryKey(options) 1260 + }); 2142 1261 2143 - export const socialControllerSearchPeopleQueryKey = ( 2144 - options: Options<SocialControllerSearchPeopleData>, 2145 - ) => createQueryKey("socialControllerSearchPeople", options); 1262 + export const socialControllerSearchPeopleQueryKey = (options: Options<SocialControllerSearchPeopleData>) => createQueryKey('socialControllerSearchPeople', options); 2146 1263 2147 1264 /** 2148 1265 * Search OpnShelf people by handle or display name 2149 1266 */ 2150 - export const socialControllerSearchPeopleOptions = ( 2151 - options: Options<SocialControllerSearchPeopleData>, 2152 - ) => 2153 - queryOptions< 2154 - SocialControllerSearchPeopleResponse, 2155 - DefaultError, 2156 - SocialControllerSearchPeopleResponse, 2157 - ReturnType<typeof socialControllerSearchPeopleQueryKey> 2158 - >({ 2159 - queryFn: async ({ queryKey, signal }) => { 2160 - const { data } = await socialControllerSearchPeople({ 2161 - ...options, 2162 - ...queryKey[0], 2163 - signal, 2164 - throwOnError: true, 2165 - }); 2166 - return data; 2167 - }, 2168 - queryKey: socialControllerSearchPeopleQueryKey(options), 2169 - }); 1267 + export const socialControllerSearchPeopleOptions = (options: Options<SocialControllerSearchPeopleData>) => queryOptions<SocialControllerSearchPeopleResponse, DefaultError, SocialControllerSearchPeopleResponse, ReturnType<typeof socialControllerSearchPeopleQueryKey>>({ 1268 + queryFn: async ({ queryKey, signal }) => { 1269 + const { data } = await socialControllerSearchPeople({ 1270 + ...options, 1271 + ...queryKey[0], 1272 + signal, 1273 + throwOnError: true 1274 + }); 1275 + return data; 1276 + }, 1277 + queryKey: socialControllerSearchPeopleQueryKey(options) 1278 + }); 2170 1279 2171 - export const socialControllerSearchPeopleInfiniteQueryKey = ( 2172 - options: Options<SocialControllerSearchPeopleData>, 2173 - ): QueryKey<Options<SocialControllerSearchPeopleData>> => 2174 - createQueryKey("socialControllerSearchPeople", options, true); 1280 + export const socialControllerSearchPeopleInfiniteQueryKey = (options: Options<SocialControllerSearchPeopleData>): QueryKey<Options<SocialControllerSearchPeopleData>> => createQueryKey('socialControllerSearchPeople', options, true); 2175 1281 2176 1282 /** 2177 1283 * Search OpnShelf people by handle or display name 2178 1284 */ 2179 - export const socialControllerSearchPeopleInfiniteOptions = ( 2180 - options: Options<SocialControllerSearchPeopleData>, 2181 - ) => 2182 - infiniteQueryOptions< 2183 - SocialControllerSearchPeopleResponse, 2184 - DefaultError, 2185 - InfiniteData<SocialControllerSearchPeopleResponse>, 2186 - QueryKey<Options<SocialControllerSearchPeopleData>>, 2187 - | number 2188 - | Pick< 2189 - QueryKey<Options<SocialControllerSearchPeopleData>>[0], 2190 - "body" | "headers" | "path" | "query" 2191 - > 2192 - >( 2193 - // @ts-ignore 2194 - { 2195 - queryFn: async ({ pageParam, queryKey, signal }) => { 2196 - // @ts-ignore 2197 - const page: Pick< 2198 - QueryKey<Options<SocialControllerSearchPeopleData>>[0], 2199 - "body" | "headers" | "path" | "query" 2200 - > = 2201 - typeof pageParam === "object" 2202 - ? pageParam 2203 - : { 2204 - query: { 2205 - page: pageParam, 2206 - }, 2207 - }; 2208 - const params = createInfiniteParams(queryKey, page); 2209 - const { data } = await socialControllerSearchPeople({ 2210 - ...options, 2211 - ...params, 2212 - signal, 2213 - throwOnError: true, 2214 - }); 2215 - return data; 2216 - }, 2217 - queryKey: socialControllerSearchPeopleInfiniteQueryKey(options), 2218 - }, 2219 - ); 1285 + export const socialControllerSearchPeopleInfiniteOptions = (options: Options<SocialControllerSearchPeopleData>) => infiniteQueryOptions<SocialControllerSearchPeopleResponse, DefaultError, InfiniteData<SocialControllerSearchPeopleResponse>, QueryKey<Options<SocialControllerSearchPeopleData>>, number | Pick<QueryKey<Options<SocialControllerSearchPeopleData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1286 + // @ts-ignore 1287 + { 1288 + queryFn: async ({ pageParam, queryKey, signal }) => { 1289 + // @ts-ignore 1290 + const page: Pick<QueryKey<Options<SocialControllerSearchPeopleData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1291 + query: { 1292 + page: pageParam 1293 + } 1294 + }; 1295 + const params = createInfiniteParams(queryKey, page); 1296 + const { data } = await socialControllerSearchPeople({ 1297 + ...options, 1298 + ...params, 1299 + signal, 1300 + throwOnError: true 1301 + }); 1302 + return data; 1303 + }, 1304 + queryKey: socialControllerSearchPeopleInfiniteQueryKey(options) 1305 + }); 2220 1306 2221 1307 /** 2222 1308 * Unfollow an OpnShelf user 2223 1309 */ 2224 - export const socialControllerUnfollowMutation = ( 2225 - options?: Partial<Options<SocialControllerUnfollowData>>, 2226 - ): UseMutationOptions< 2227 - SocialControllerUnfollowResponse, 2228 - DefaultError, 2229 - Options<SocialControllerUnfollowData> 2230 - > => { 2231 - const mutationOptions: UseMutationOptions< 2232 - SocialControllerUnfollowResponse, 2233 - DefaultError, 2234 - Options<SocialControllerUnfollowData> 2235 - > = { 2236 - mutationFn: async (fnOptions) => { 2237 - const { data } = await socialControllerUnfollow({ 2238 - ...options, 2239 - ...fnOptions, 2240 - throwOnError: true, 2241 - }); 2242 - return data; 2243 - }, 2244 - }; 2245 - return mutationOptions; 1310 + export const socialControllerUnfollowMutation = (options?: Partial<Options<SocialControllerUnfollowData>>): UseMutationOptions<SocialControllerUnfollowResponse, DefaultError, Options<SocialControllerUnfollowData>> => { 1311 + const mutationOptions: UseMutationOptions<SocialControllerUnfollowResponse, DefaultError, Options<SocialControllerUnfollowData>> = { 1312 + mutationFn: async (fnOptions) => { 1313 + const { data } = await socialControllerUnfollow({ 1314 + ...options, 1315 + ...fnOptions, 1316 + throwOnError: true 1317 + }); 1318 + return data; 1319 + } 1320 + }; 1321 + return mutationOptions; 2246 1322 }; 2247 1323 2248 1324 /** 2249 1325 * Follow an OpnShelf user 2250 1326 */ 2251 - export const socialControllerFollowMutation = ( 2252 - options?: Partial<Options<SocialControllerFollowData>>, 2253 - ): UseMutationOptions< 2254 - SocialControllerFollowResponse, 2255 - DefaultError, 2256 - Options<SocialControllerFollowData> 2257 - > => { 2258 - const mutationOptions: UseMutationOptions< 2259 - SocialControllerFollowResponse, 2260 - DefaultError, 2261 - Options<SocialControllerFollowData> 2262 - > = { 2263 - mutationFn: async (fnOptions) => { 2264 - const { data } = await socialControllerFollow({ 2265 - ...options, 2266 - ...fnOptions, 2267 - throwOnError: true, 2268 - }); 2269 - return data; 2270 - }, 2271 - }; 2272 - return mutationOptions; 1327 + export const socialControllerFollowMutation = (options?: Partial<Options<SocialControllerFollowData>>): UseMutationOptions<SocialControllerFollowResponse, DefaultError, Options<SocialControllerFollowData>> => { 1328 + const mutationOptions: UseMutationOptions<SocialControllerFollowResponse, DefaultError, Options<SocialControllerFollowData>> = { 1329 + mutationFn: async (fnOptions) => { 1330 + const { data } = await socialControllerFollow({ 1331 + ...options, 1332 + ...fnOptions, 1333 + throwOnError: true 1334 + }); 1335 + return data; 1336 + } 1337 + }; 1338 + return mutationOptions; 2273 1339 }; 2274 1340 2275 - export const socialControllerGetRelationshipQueryKey = ( 2276 - options: Options<SocialControllerGetRelationshipData>, 2277 - ) => createQueryKey("socialControllerGetRelationship", options); 1341 + export const socialControllerGetRelationshipQueryKey = (options: Options<SocialControllerGetRelationshipData>) => createQueryKey('socialControllerGetRelationship', options); 2278 1342 2279 1343 /** 2280 1344 * Get the viewer's relationship to a user 2281 1345 */ 2282 - export const socialControllerGetRelationshipOptions = ( 2283 - options: Options<SocialControllerGetRelationshipData>, 2284 - ) => 2285 - queryOptions< 2286 - SocialControllerGetRelationshipResponse, 2287 - DefaultError, 2288 - SocialControllerGetRelationshipResponse, 2289 - ReturnType<typeof socialControllerGetRelationshipQueryKey> 2290 - >({ 2291 - queryFn: async ({ queryKey, signal }) => { 2292 - const { data } = await socialControllerGetRelationship({ 2293 - ...options, 2294 - ...queryKey[0], 2295 - signal, 2296 - throwOnError: true, 2297 - }); 2298 - return data; 2299 - }, 2300 - queryKey: socialControllerGetRelationshipQueryKey(options), 2301 - }); 1346 + export const socialControllerGetRelationshipOptions = (options: Options<SocialControllerGetRelationshipData>) => queryOptions<SocialControllerGetRelationshipResponse, DefaultError, SocialControllerGetRelationshipResponse, ReturnType<typeof socialControllerGetRelationshipQueryKey>>({ 1347 + queryFn: async ({ queryKey, signal }) => { 1348 + const { data } = await socialControllerGetRelationship({ 1349 + ...options, 1350 + ...queryKey[0], 1351 + signal, 1352 + throwOnError: true 1353 + }); 1354 + return data; 1355 + }, 1356 + queryKey: socialControllerGetRelationshipQueryKey(options) 1357 + }); 2302 1358 2303 - export const socialControllerGetFollowersQueryKey = ( 2304 - options: Options<SocialControllerGetFollowersData>, 2305 - ) => createQueryKey("socialControllerGetFollowers", options); 1359 + export const socialControllerGetFollowersQueryKey = (options: Options<SocialControllerGetFollowersData>) => createQueryKey('socialControllerGetFollowers', options); 2306 1360 2307 1361 /** 2308 1362 * Get followers for a public profile 2309 1363 */ 2310 - export const socialControllerGetFollowersOptions = ( 2311 - options: Options<SocialControllerGetFollowersData>, 2312 - ) => 2313 - queryOptions< 2314 - SocialControllerGetFollowersResponse, 2315 - DefaultError, 2316 - SocialControllerGetFollowersResponse, 2317 - ReturnType<typeof socialControllerGetFollowersQueryKey> 2318 - >({ 2319 - queryFn: async ({ queryKey, signal }) => { 2320 - const { data } = await socialControllerGetFollowers({ 2321 - ...options, 2322 - ...queryKey[0], 2323 - signal, 2324 - throwOnError: true, 2325 - }); 2326 - return data; 2327 - }, 2328 - queryKey: socialControllerGetFollowersQueryKey(options), 2329 - }); 1364 + export const socialControllerGetFollowersOptions = (options: Options<SocialControllerGetFollowersData>) => queryOptions<SocialControllerGetFollowersResponse, DefaultError, SocialControllerGetFollowersResponse, ReturnType<typeof socialControllerGetFollowersQueryKey>>({ 1365 + queryFn: async ({ queryKey, signal }) => { 1366 + const { data } = await socialControllerGetFollowers({ 1367 + ...options, 1368 + ...queryKey[0], 1369 + signal, 1370 + throwOnError: true 1371 + }); 1372 + return data; 1373 + }, 1374 + queryKey: socialControllerGetFollowersQueryKey(options) 1375 + }); 2330 1376 2331 - export const socialControllerGetFollowersInfiniteQueryKey = ( 2332 - options: Options<SocialControllerGetFollowersData>, 2333 - ): QueryKey<Options<SocialControllerGetFollowersData>> => 2334 - createQueryKey("socialControllerGetFollowers", options, true); 1377 + export const socialControllerGetFollowersInfiniteQueryKey = (options: Options<SocialControllerGetFollowersData>): QueryKey<Options<SocialControllerGetFollowersData>> => createQueryKey('socialControllerGetFollowers', options, true); 2335 1378 2336 1379 /** 2337 1380 * Get followers for a public profile 2338 1381 */ 2339 - export const socialControllerGetFollowersInfiniteOptions = ( 2340 - options: Options<SocialControllerGetFollowersData>, 2341 - ) => 2342 - infiniteQueryOptions< 2343 - SocialControllerGetFollowersResponse, 2344 - DefaultError, 2345 - InfiniteData<SocialControllerGetFollowersResponse>, 2346 - QueryKey<Options<SocialControllerGetFollowersData>>, 2347 - | number 2348 - | Pick< 2349 - QueryKey<Options<SocialControllerGetFollowersData>>[0], 2350 - "body" | "headers" | "path" | "query" 2351 - > 2352 - >( 2353 - // @ts-ignore 2354 - { 2355 - queryFn: async ({ pageParam, queryKey, signal }) => { 2356 - // @ts-ignore 2357 - const page: Pick< 2358 - QueryKey<Options<SocialControllerGetFollowersData>>[0], 2359 - "body" | "headers" | "path" | "query" 2360 - > = 2361 - typeof pageParam === "object" 2362 - ? pageParam 2363 - : { 2364 - query: { 2365 - page: pageParam, 2366 - }, 2367 - }; 2368 - const params = createInfiniteParams(queryKey, page); 2369 - const { data } = await socialControllerGetFollowers({ 2370 - ...options, 2371 - ...params, 2372 - signal, 2373 - throwOnError: true, 2374 - }); 2375 - return data; 2376 - }, 2377 - queryKey: socialControllerGetFollowersInfiniteQueryKey(options), 2378 - }, 2379 - ); 1382 + export const socialControllerGetFollowersInfiniteOptions = (options: Options<SocialControllerGetFollowersData>) => infiniteQueryOptions<SocialControllerGetFollowersResponse, DefaultError, InfiniteData<SocialControllerGetFollowersResponse>, QueryKey<Options<SocialControllerGetFollowersData>>, number | Pick<QueryKey<Options<SocialControllerGetFollowersData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1383 + // @ts-ignore 1384 + { 1385 + queryFn: async ({ pageParam, queryKey, signal }) => { 1386 + // @ts-ignore 1387 + const page: Pick<QueryKey<Options<SocialControllerGetFollowersData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1388 + query: { 1389 + page: pageParam 1390 + } 1391 + }; 1392 + const params = createInfiniteParams(queryKey, page); 1393 + const { data } = await socialControllerGetFollowers({ 1394 + ...options, 1395 + ...params, 1396 + signal, 1397 + throwOnError: true 1398 + }); 1399 + return data; 1400 + }, 1401 + queryKey: socialControllerGetFollowersInfiniteQueryKey(options) 1402 + }); 2380 1403 2381 - export const socialControllerGetFollowingQueryKey = ( 2382 - options: Options<SocialControllerGetFollowingData>, 2383 - ) => createQueryKey("socialControllerGetFollowing", options); 1404 + export const socialControllerGetFollowingQueryKey = (options: Options<SocialControllerGetFollowingData>) => createQueryKey('socialControllerGetFollowing', options); 2384 1405 2385 1406 /** 2386 1407 * Get following for a public profile 2387 1408 */ 2388 - export const socialControllerGetFollowingOptions = ( 2389 - options: Options<SocialControllerGetFollowingData>, 2390 - ) => 2391 - queryOptions< 2392 - SocialControllerGetFollowingResponse, 2393 - DefaultError, 2394 - SocialControllerGetFollowingResponse, 2395 - ReturnType<typeof socialControllerGetFollowingQueryKey> 2396 - >({ 2397 - queryFn: async ({ queryKey, signal }) => { 2398 - const { data } = await socialControllerGetFollowing({ 2399 - ...options, 2400 - ...queryKey[0], 2401 - signal, 2402 - throwOnError: true, 2403 - }); 2404 - return data; 2405 - }, 2406 - queryKey: socialControllerGetFollowingQueryKey(options), 2407 - }); 1409 + export const socialControllerGetFollowingOptions = (options: Options<SocialControllerGetFollowingData>) => queryOptions<SocialControllerGetFollowingResponse, DefaultError, SocialControllerGetFollowingResponse, ReturnType<typeof socialControllerGetFollowingQueryKey>>({ 1410 + queryFn: async ({ queryKey, signal }) => { 1411 + const { data } = await socialControllerGetFollowing({ 1412 + ...options, 1413 + ...queryKey[0], 1414 + signal, 1415 + throwOnError: true 1416 + }); 1417 + return data; 1418 + }, 1419 + queryKey: socialControllerGetFollowingQueryKey(options) 1420 + }); 2408 1421 2409 - export const socialControllerGetFollowingInfiniteQueryKey = ( 2410 - options: Options<SocialControllerGetFollowingData>, 2411 - ): QueryKey<Options<SocialControllerGetFollowingData>> => 2412 - createQueryKey("socialControllerGetFollowing", options, true); 1422 + export const socialControllerGetFollowingInfiniteQueryKey = (options: Options<SocialControllerGetFollowingData>): QueryKey<Options<SocialControllerGetFollowingData>> => createQueryKey('socialControllerGetFollowing', options, true); 2413 1423 2414 1424 /** 2415 1425 * Get following for a public profile 2416 1426 */ 2417 - export const socialControllerGetFollowingInfiniteOptions = ( 2418 - options: Options<SocialControllerGetFollowingData>, 2419 - ) => 2420 - infiniteQueryOptions< 2421 - SocialControllerGetFollowingResponse, 2422 - DefaultError, 2423 - InfiniteData<SocialControllerGetFollowingResponse>, 2424 - QueryKey<Options<SocialControllerGetFollowingData>>, 2425 - | number 2426 - | Pick< 2427 - QueryKey<Options<SocialControllerGetFollowingData>>[0], 2428 - "body" | "headers" | "path" | "query" 2429 - > 2430 - >( 2431 - // @ts-ignore 2432 - { 2433 - queryFn: async ({ pageParam, queryKey, signal }) => { 2434 - // @ts-ignore 2435 - const page: Pick< 2436 - QueryKey<Options<SocialControllerGetFollowingData>>[0], 2437 - "body" | "headers" | "path" | "query" 2438 - > = 2439 - typeof pageParam === "object" 2440 - ? pageParam 2441 - : { 2442 - query: { 2443 - page: pageParam, 2444 - }, 2445 - }; 2446 - const params = createInfiniteParams(queryKey, page); 2447 - const { data } = await socialControllerGetFollowing({ 2448 - ...options, 2449 - ...params, 2450 - signal, 2451 - throwOnError: true, 2452 - }); 2453 - return data; 2454 - }, 2455 - queryKey: socialControllerGetFollowingInfiniteQueryKey(options), 2456 - }, 2457 - ); 1427 + export const socialControllerGetFollowingInfiniteOptions = (options: Options<SocialControllerGetFollowingData>) => infiniteQueryOptions<SocialControllerGetFollowingResponse, DefaultError, InfiniteData<SocialControllerGetFollowingResponse>, QueryKey<Options<SocialControllerGetFollowingData>>, number | Pick<QueryKey<Options<SocialControllerGetFollowingData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1428 + // @ts-ignore 1429 + { 1430 + queryFn: async ({ pageParam, queryKey, signal }) => { 1431 + // @ts-ignore 1432 + const page: Pick<QueryKey<Options<SocialControllerGetFollowingData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1433 + query: { 1434 + page: pageParam 1435 + } 1436 + }; 1437 + const params = createInfiniteParams(queryKey, page); 1438 + const { data } = await socialControllerGetFollowing({ 1439 + ...options, 1440 + ...params, 1441 + signal, 1442 + throwOnError: true 1443 + }); 1444 + return data; 1445 + }, 1446 + queryKey: socialControllerGetFollowingInfiniteQueryKey(options) 1447 + }); 2458 1448 2459 - export const socialControllerGetFeedQueryKey = ( 2460 - options?: Options<SocialControllerGetFeedData>, 2461 - ) => createQueryKey("socialControllerGetFeed", options); 1449 + export const socialControllerGetFeedQueryKey = (options?: Options<SocialControllerGetFeedData>) => createQueryKey('socialControllerGetFeed', options); 2462 1450 2463 1451 /** 2464 1452 * Get recent watched activity from followed users 2465 1453 */ 2466 - export const socialControllerGetFeedOptions = ( 2467 - options?: Options<SocialControllerGetFeedData>, 2468 - ) => 2469 - queryOptions< 2470 - SocialControllerGetFeedResponse, 2471 - DefaultError, 2472 - SocialControllerGetFeedResponse, 2473 - ReturnType<typeof socialControllerGetFeedQueryKey> 2474 - >({ 2475 - queryFn: async ({ queryKey, signal }) => { 2476 - const { data } = await socialControllerGetFeed({ 2477 - ...options, 2478 - ...queryKey[0], 2479 - signal, 2480 - throwOnError: true, 2481 - }); 2482 - return data; 2483 - }, 2484 - queryKey: socialControllerGetFeedQueryKey(options), 2485 - }); 1454 + export const socialControllerGetFeedOptions = (options?: Options<SocialControllerGetFeedData>) => queryOptions<SocialControllerGetFeedResponse, DefaultError, SocialControllerGetFeedResponse, ReturnType<typeof socialControllerGetFeedQueryKey>>({ 1455 + queryFn: async ({ queryKey, signal }) => { 1456 + const { data } = await socialControllerGetFeed({ 1457 + ...options, 1458 + ...queryKey[0], 1459 + signal, 1460 + throwOnError: true 1461 + }); 1462 + return data; 1463 + }, 1464 + queryKey: socialControllerGetFeedQueryKey(options) 1465 + }); 2486 1466 2487 - export const socialControllerGetFeedInfiniteQueryKey = ( 2488 - options?: Options<SocialControllerGetFeedData>, 2489 - ): QueryKey<Options<SocialControllerGetFeedData>> => 2490 - createQueryKey("socialControllerGetFeed", options, true); 1467 + export const socialControllerGetFeedInfiniteQueryKey = (options?: Options<SocialControllerGetFeedData>): QueryKey<Options<SocialControllerGetFeedData>> => createQueryKey('socialControllerGetFeed', options, true); 2491 1468 2492 1469 /** 2493 1470 * Get recent watched activity from followed users 2494 1471 */ 2495 - export const socialControllerGetFeedInfiniteOptions = ( 2496 - options?: Options<SocialControllerGetFeedData>, 2497 - ) => 2498 - infiniteQueryOptions< 2499 - SocialControllerGetFeedResponse, 2500 - DefaultError, 2501 - InfiniteData<SocialControllerGetFeedResponse>, 2502 - QueryKey<Options<SocialControllerGetFeedData>>, 2503 - | number 2504 - | Pick< 2505 - QueryKey<Options<SocialControllerGetFeedData>>[0], 2506 - "body" | "headers" | "path" | "query" 2507 - > 2508 - >( 2509 - // @ts-ignore 2510 - { 2511 - queryFn: async ({ pageParam, queryKey, signal }) => { 2512 - // @ts-ignore 2513 - const page: Pick< 2514 - QueryKey<Options<SocialControllerGetFeedData>>[0], 2515 - "body" | "headers" | "path" | "query" 2516 - > = 2517 - typeof pageParam === "object" 2518 - ? pageParam 2519 - : { 2520 - query: { 2521 - page: pageParam, 2522 - }, 2523 - }; 2524 - const params = createInfiniteParams(queryKey, page); 2525 - const { data } = await socialControllerGetFeed({ 2526 - ...options, 2527 - ...params, 2528 - signal, 2529 - throwOnError: true, 2530 - }); 2531 - return data; 2532 - }, 2533 - queryKey: socialControllerGetFeedInfiniteQueryKey(options), 2534 - }, 2535 - ); 1472 + export const socialControllerGetFeedInfiniteOptions = (options?: Options<SocialControllerGetFeedData>) => infiniteQueryOptions<SocialControllerGetFeedResponse, DefaultError, InfiniteData<SocialControllerGetFeedResponse>, QueryKey<Options<SocialControllerGetFeedData>>, number | Pick<QueryKey<Options<SocialControllerGetFeedData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1473 + // @ts-ignore 1474 + { 1475 + queryFn: async ({ pageParam, queryKey, signal }) => { 1476 + // @ts-ignore 1477 + const page: Pick<QueryKey<Options<SocialControllerGetFeedData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1478 + query: { 1479 + page: pageParam 1480 + } 1481 + }; 1482 + const params = createInfiniteParams(queryKey, page); 1483 + const { data } = await socialControllerGetFeed({ 1484 + ...options, 1485 + ...params, 1486 + signal, 1487 + throwOnError: true 1488 + }); 1489 + return data; 1490 + }, 1491 + queryKey: socialControllerGetFeedInfiniteQueryKey(options) 1492 + }); 2536 1493 2537 - export const socialControllerGetWatchersQueryKey = ( 2538 - options: Options<SocialControllerGetWatchersData>, 2539 - ) => createQueryKey("socialControllerGetWatchers", options); 1494 + export const socialControllerGetWatchersQueryKey = (options: Options<SocialControllerGetWatchersData>) => createQueryKey('socialControllerGetWatchers', options); 2540 1495 2541 1496 /** 2542 1497 * Get followed users who watched a scoped movie, show, season, or episode 2543 1498 */ 2544 - export const socialControllerGetWatchersOptions = ( 2545 - options: Options<SocialControllerGetWatchersData>, 2546 - ) => 2547 - queryOptions< 2548 - SocialControllerGetWatchersResponse, 2549 - DefaultError, 2550 - SocialControllerGetWatchersResponse, 2551 - ReturnType<typeof socialControllerGetWatchersQueryKey> 2552 - >({ 2553 - queryFn: async ({ queryKey, signal }) => { 2554 - const { data } = await socialControllerGetWatchers({ 2555 - ...options, 2556 - ...queryKey[0], 2557 - signal, 2558 - throwOnError: true, 2559 - }); 2560 - return data; 2561 - }, 2562 - queryKey: socialControllerGetWatchersQueryKey(options), 2563 - }); 1499 + export const socialControllerGetWatchersOptions = (options: Options<SocialControllerGetWatchersData>) => queryOptions<SocialControllerGetWatchersResponse, DefaultError, SocialControllerGetWatchersResponse, ReturnType<typeof socialControllerGetWatchersQueryKey>>({ 1500 + queryFn: async ({ queryKey, signal }) => { 1501 + const { data } = await socialControllerGetWatchers({ 1502 + ...options, 1503 + ...queryKey[0], 1504 + signal, 1505 + throwOnError: true 1506 + }); 1507 + return data; 1508 + }, 1509 + queryKey: socialControllerGetWatchersQueryKey(options) 1510 + }); 2564 1511 2565 - export const shelfControllerGetUserShelfQueryKey = ( 2566 - options: Options<ShelfControllerGetUserShelfData>, 2567 - ) => createQueryKey("shelfControllerGetUserShelf", options); 1512 + export const shelfControllerGetUserShelfQueryKey = (options: Options<ShelfControllerGetUserShelfData>) => createQueryKey('shelfControllerGetUserShelf', options); 2568 1513 2569 1514 /** 2570 1515 * Get paginated shelf items for a user (movies and episodes) 2571 1516 */ 2572 - export const shelfControllerGetUserShelfOptions = ( 2573 - options: Options<ShelfControllerGetUserShelfData>, 2574 - ) => 2575 - queryOptions< 2576 - ShelfControllerGetUserShelfResponse, 2577 - DefaultError, 2578 - ShelfControllerGetUserShelfResponse, 2579 - ReturnType<typeof shelfControllerGetUserShelfQueryKey> 2580 - >({ 2581 - queryFn: async ({ queryKey, signal }) => { 2582 - const { data } = await shelfControllerGetUserShelf({ 2583 - ...options, 2584 - ...queryKey[0], 2585 - signal, 2586 - throwOnError: true, 2587 - }); 2588 - return data; 2589 - }, 2590 - queryKey: shelfControllerGetUserShelfQueryKey(options), 2591 - }); 1517 + export const shelfControllerGetUserShelfOptions = (options: Options<ShelfControllerGetUserShelfData>) => queryOptions<ShelfControllerGetUserShelfResponse, DefaultError, ShelfControllerGetUserShelfResponse, ReturnType<typeof shelfControllerGetUserShelfQueryKey>>({ 1518 + queryFn: async ({ queryKey, signal }) => { 1519 + const { data } = await shelfControllerGetUserShelf({ 1520 + ...options, 1521 + ...queryKey[0], 1522 + signal, 1523 + throwOnError: true 1524 + }); 1525 + return data; 1526 + }, 1527 + queryKey: shelfControllerGetUserShelfQueryKey(options) 1528 + }); 2592 1529 2593 - export const shelfControllerGetUserShelfInfiniteQueryKey = ( 2594 - options: Options<ShelfControllerGetUserShelfData>, 2595 - ): QueryKey<Options<ShelfControllerGetUserShelfData>> => 2596 - createQueryKey("shelfControllerGetUserShelf", options, true); 1530 + export const shelfControllerGetUserShelfInfiniteQueryKey = (options: Options<ShelfControllerGetUserShelfData>): QueryKey<Options<ShelfControllerGetUserShelfData>> => createQueryKey('shelfControllerGetUserShelf', options, true); 2597 1531 2598 1532 /** 2599 1533 * Get paginated shelf items for a user (movies and episodes) 2600 1534 */ 2601 - export const shelfControllerGetUserShelfInfiniteOptions = ( 2602 - options: Options<ShelfControllerGetUserShelfData>, 2603 - ) => 2604 - infiniteQueryOptions< 2605 - ShelfControllerGetUserShelfResponse, 2606 - DefaultError, 2607 - InfiniteData<ShelfControllerGetUserShelfResponse>, 2608 - QueryKey<Options<ShelfControllerGetUserShelfData>>, 2609 - | number 2610 - | Pick< 2611 - QueryKey<Options<ShelfControllerGetUserShelfData>>[0], 2612 - "body" | "headers" | "path" | "query" 2613 - > 2614 - >( 2615 - // @ts-ignore 2616 - { 2617 - queryFn: async ({ pageParam, queryKey, signal }) => { 2618 - // @ts-ignore 2619 - const page: Pick< 2620 - QueryKey<Options<ShelfControllerGetUserShelfData>>[0], 2621 - "body" | "headers" | "path" | "query" 2622 - > = 2623 - typeof pageParam === "object" 2624 - ? pageParam 2625 - : { 2626 - query: { 2627 - page: pageParam, 2628 - }, 2629 - }; 2630 - const params = createInfiniteParams(queryKey, page); 2631 - const { data } = await shelfControllerGetUserShelf({ 2632 - ...options, 2633 - ...params, 2634 - signal, 2635 - throwOnError: true, 2636 - }); 2637 - return data; 2638 - }, 2639 - queryKey: shelfControllerGetUserShelfInfiniteQueryKey(options), 2640 - }, 2641 - ); 1535 + export const shelfControllerGetUserShelfInfiniteOptions = (options: Options<ShelfControllerGetUserShelfData>) => infiniteQueryOptions<ShelfControllerGetUserShelfResponse, DefaultError, InfiniteData<ShelfControllerGetUserShelfResponse>, QueryKey<Options<ShelfControllerGetUserShelfData>>, number | Pick<QueryKey<Options<ShelfControllerGetUserShelfData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1536 + // @ts-ignore 1537 + { 1538 + queryFn: async ({ pageParam, queryKey, signal }) => { 1539 + // @ts-ignore 1540 + const page: Pick<QueryKey<Options<ShelfControllerGetUserShelfData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1541 + query: { 1542 + page: pageParam 1543 + } 1544 + }; 1545 + const params = createInfiniteParams(queryKey, page); 1546 + const { data } = await shelfControllerGetUserShelf({ 1547 + ...options, 1548 + ...params, 1549 + signal, 1550 + throwOnError: true 1551 + }); 1552 + return data; 1553 + }, 1554 + queryKey: shelfControllerGetUserShelfInfiniteQueryKey(options) 1555 + }); 2642 1556 2643 - export const shelfControllerGetUserActivitySummaryQueryKey = ( 2644 - options: Options<ShelfControllerGetUserActivitySummaryData>, 2645 - ) => createQueryKey("shelfControllerGetUserActivitySummary", options); 1557 + export const shelfControllerGetUserActivitySummaryQueryKey = (options: Options<ShelfControllerGetUserActivitySummaryData>) => createQueryKey('shelfControllerGetUserActivitySummary', options); 2646 1558 2647 1559 /** 2648 1560 * Get timezone-aware activity summary for a user's dashboard 2649 1561 */ 2650 - export const shelfControllerGetUserActivitySummaryOptions = ( 2651 - options: Options<ShelfControllerGetUserActivitySummaryData>, 2652 - ) => 2653 - queryOptions< 2654 - ShelfControllerGetUserActivitySummaryResponse, 2655 - DefaultError, 2656 - ShelfControllerGetUserActivitySummaryResponse, 2657 - ReturnType<typeof shelfControllerGetUserActivitySummaryQueryKey> 2658 - >({ 2659 - queryFn: async ({ queryKey, signal }) => { 2660 - const { data } = await shelfControllerGetUserActivitySummary({ 2661 - ...options, 2662 - ...queryKey[0], 2663 - signal, 2664 - throwOnError: true, 2665 - }); 2666 - return data; 2667 - }, 2668 - queryKey: shelfControllerGetUserActivitySummaryQueryKey(options), 2669 - }); 1562 + export const shelfControllerGetUserActivitySummaryOptions = (options: Options<ShelfControllerGetUserActivitySummaryData>) => queryOptions<ShelfControllerGetUserActivitySummaryResponse, DefaultError, ShelfControllerGetUserActivitySummaryResponse, ReturnType<typeof shelfControllerGetUserActivitySummaryQueryKey>>({ 1563 + queryFn: async ({ queryKey, signal }) => { 1564 + const { data } = await shelfControllerGetUserActivitySummary({ 1565 + ...options, 1566 + ...queryKey[0], 1567 + signal, 1568 + throwOnError: true 1569 + }); 1570 + return data; 1571 + }, 1572 + queryKey: shelfControllerGetUserActivitySummaryQueryKey(options) 1573 + }); 2670 1574 2671 - export const searchControllerSearchAllQueryKey = ( 2672 - options: Options<SearchControllerSearchAllData>, 2673 - ) => createQueryKey("searchControllerSearchAll", options); 1575 + export const searchControllerSearchAllQueryKey = (options: Options<SearchControllerSearchAllData>) => createQueryKey('searchControllerSearchAll', options); 2674 1576 2675 1577 /** 2676 1578 * Search movies and shows from TMDB 2677 1579 */ 2678 - export const searchControllerSearchAllOptions = ( 2679 - options: Options<SearchControllerSearchAllData>, 2680 - ) => 2681 - queryOptions< 2682 - SearchControllerSearchAllResponse, 2683 - DefaultError, 2684 - SearchControllerSearchAllResponse, 2685 - ReturnType<typeof searchControllerSearchAllQueryKey> 2686 - >({ 2687 - queryFn: async ({ queryKey, signal }) => { 2688 - const { data } = await searchControllerSearchAll({ 2689 - ...options, 2690 - ...queryKey[0], 2691 - signal, 2692 - throwOnError: true, 2693 - }); 2694 - return data; 2695 - }, 2696 - queryKey: searchControllerSearchAllQueryKey(options), 2697 - }); 1580 + export const searchControllerSearchAllOptions = (options: Options<SearchControllerSearchAllData>) => queryOptions<SearchControllerSearchAllResponse, DefaultError, SearchControllerSearchAllResponse, ReturnType<typeof searchControllerSearchAllQueryKey>>({ 1581 + queryFn: async ({ queryKey, signal }) => { 1582 + const { data } = await searchControllerSearchAll({ 1583 + ...options, 1584 + ...queryKey[0], 1585 + signal, 1586 + throwOnError: true 1587 + }); 1588 + return data; 1589 + }, 1590 + queryKey: searchControllerSearchAllQueryKey(options) 1591 + }); 2698 1592 2699 - export const searchControllerSearchAllInfiniteQueryKey = ( 2700 - options: Options<SearchControllerSearchAllData>, 2701 - ): QueryKey<Options<SearchControllerSearchAllData>> => 2702 - createQueryKey("searchControllerSearchAll", options, true); 1593 + export const searchControllerSearchAllInfiniteQueryKey = (options: Options<SearchControllerSearchAllData>): QueryKey<Options<SearchControllerSearchAllData>> => createQueryKey('searchControllerSearchAll', options, true); 2703 1594 2704 1595 /** 2705 1596 * Search movies and shows from TMDB 2706 1597 */ 2707 - export const searchControllerSearchAllInfiniteOptions = ( 2708 - options: Options<SearchControllerSearchAllData>, 2709 - ) => 2710 - infiniteQueryOptions< 2711 - SearchControllerSearchAllResponse, 2712 - DefaultError, 2713 - InfiniteData<SearchControllerSearchAllResponse>, 2714 - QueryKey<Options<SearchControllerSearchAllData>>, 2715 - | number 2716 - | Pick< 2717 - QueryKey<Options<SearchControllerSearchAllData>>[0], 2718 - "body" | "headers" | "path" | "query" 2719 - > 2720 - >( 2721 - // @ts-ignore 2722 - { 2723 - queryFn: async ({ pageParam, queryKey, signal }) => { 2724 - // @ts-ignore 2725 - const page: Pick< 2726 - QueryKey<Options<SearchControllerSearchAllData>>[0], 2727 - "body" | "headers" | "path" | "query" 2728 - > = 2729 - typeof pageParam === "object" 2730 - ? pageParam 2731 - : { 2732 - query: { 2733 - page: pageParam, 2734 - }, 2735 - }; 2736 - const params = createInfiniteParams(queryKey, page); 2737 - const { data } = await searchControllerSearchAll({ 2738 - ...options, 2739 - ...params, 2740 - signal, 2741 - throwOnError: true, 2742 - }); 2743 - return data; 2744 - }, 2745 - queryKey: searchControllerSearchAllInfiniteQueryKey(options), 2746 - }, 2747 - ); 1598 + export const searchControllerSearchAllInfiniteOptions = (options: Options<SearchControllerSearchAllData>) => infiniteQueryOptions<SearchControllerSearchAllResponse, DefaultError, InfiniteData<SearchControllerSearchAllResponse>, QueryKey<Options<SearchControllerSearchAllData>>, number | Pick<QueryKey<Options<SearchControllerSearchAllData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1599 + // @ts-ignore 1600 + { 1601 + queryFn: async ({ pageParam, queryKey, signal }) => { 1602 + // @ts-ignore 1603 + const page: Pick<QueryKey<Options<SearchControllerSearchAllData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1604 + query: { 1605 + page: pageParam 1606 + } 1607 + }; 1608 + const params = createInfiniteParams(queryKey, page); 1609 + const { data } = await searchControllerSearchAll({ 1610 + ...options, 1611 + ...params, 1612 + signal, 1613 + throwOnError: true 1614 + }); 1615 + return data; 1616 + }, 1617 + queryKey: searchControllerSearchAllInfiniteQueryKey(options) 1618 + }); 2748 1619 2749 - export const searchControllerDiscoverAllQueryKey = ( 2750 - options?: Options<SearchControllerDiscoverAllData>, 2751 - ) => createQueryKey("searchControllerDiscoverAll", options); 1620 + export const searchControllerDiscoverAllQueryKey = (options?: Options<SearchControllerDiscoverAllData>) => createQueryKey('searchControllerDiscoverAll', options); 2752 1621 2753 1622 /** 2754 1623 * Discover popular movies and shows from TMDB 2755 1624 */ 2756 - export const searchControllerDiscoverAllOptions = ( 2757 - options?: Options<SearchControllerDiscoverAllData>, 2758 - ) => 2759 - queryOptions< 2760 - SearchControllerDiscoverAllResponse, 2761 - DefaultError, 2762 - SearchControllerDiscoverAllResponse, 2763 - ReturnType<typeof searchControllerDiscoverAllQueryKey> 2764 - >({ 2765 - queryFn: async ({ queryKey, signal }) => { 2766 - const { data } = await searchControllerDiscoverAll({ 2767 - ...options, 2768 - ...queryKey[0], 2769 - signal, 2770 - throwOnError: true, 2771 - }); 2772 - return data; 2773 - }, 2774 - queryKey: searchControllerDiscoverAllQueryKey(options), 2775 - }); 1625 + export const searchControllerDiscoverAllOptions = (options?: Options<SearchControllerDiscoverAllData>) => queryOptions<SearchControllerDiscoverAllResponse, DefaultError, SearchControllerDiscoverAllResponse, ReturnType<typeof searchControllerDiscoverAllQueryKey>>({ 1626 + queryFn: async ({ queryKey, signal }) => { 1627 + const { data } = await searchControllerDiscoverAll({ 1628 + ...options, 1629 + ...queryKey[0], 1630 + signal, 1631 + throwOnError: true 1632 + }); 1633 + return data; 1634 + }, 1635 + queryKey: searchControllerDiscoverAllQueryKey(options) 1636 + }); 2776 1637 2777 - export const searchControllerDiscoverAllInfiniteQueryKey = ( 2778 - options?: Options<SearchControllerDiscoverAllData>, 2779 - ): QueryKey<Options<SearchControllerDiscoverAllData>> => 2780 - createQueryKey("searchControllerDiscoverAll", options, true); 1638 + export const searchControllerDiscoverAllInfiniteQueryKey = (options?: Options<SearchControllerDiscoverAllData>): QueryKey<Options<SearchControllerDiscoverAllData>> => createQueryKey('searchControllerDiscoverAll', options, true); 2781 1639 2782 1640 /** 2783 1641 * Discover popular movies and shows from TMDB 2784 1642 */ 2785 - export const searchControllerDiscoverAllInfiniteOptions = ( 2786 - options?: Options<SearchControllerDiscoverAllData>, 2787 - ) => 2788 - infiniteQueryOptions< 2789 - SearchControllerDiscoverAllResponse, 2790 - DefaultError, 2791 - InfiniteData<SearchControllerDiscoverAllResponse>, 2792 - QueryKey<Options<SearchControllerDiscoverAllData>>, 2793 - | unknown 2794 - | Pick< 2795 - QueryKey<Options<SearchControllerDiscoverAllData>>[0], 2796 - "body" | "headers" | "path" | "query" 2797 - > 2798 - >( 2799 - // @ts-ignore 2800 - { 2801 - queryFn: async ({ pageParam, queryKey, signal }) => { 2802 - // @ts-ignore 2803 - const page: Pick< 2804 - QueryKey<Options<SearchControllerDiscoverAllData>>[0], 2805 - "body" | "headers" | "path" | "query" 2806 - > = 2807 - typeof pageParam === "object" 2808 - ? pageParam 2809 - : { 2810 - query: { 2811 - page: pageParam, 2812 - }, 2813 - }; 2814 - const params = createInfiniteParams(queryKey, page); 2815 - const { data } = await searchControllerDiscoverAll({ 2816 - ...options, 2817 - ...params, 2818 - signal, 2819 - throwOnError: true, 2820 - }); 2821 - return data; 2822 - }, 2823 - queryKey: searchControllerDiscoverAllInfiniteQueryKey(options), 2824 - }, 2825 - ); 1643 + export const searchControllerDiscoverAllInfiniteOptions = (options?: Options<SearchControllerDiscoverAllData>) => infiniteQueryOptions<SearchControllerDiscoverAllResponse, DefaultError, InfiniteData<SearchControllerDiscoverAllResponse>, QueryKey<Options<SearchControllerDiscoverAllData>>, unknown | Pick<QueryKey<Options<SearchControllerDiscoverAllData>>[0], 'body' | 'headers' | 'path' | 'query'>>( 1644 + // @ts-ignore 1645 + { 1646 + queryFn: async ({ pageParam, queryKey, signal }) => { 1647 + // @ts-ignore 1648 + const page: Pick<QueryKey<Options<SearchControllerDiscoverAllData>>[0], 'body' | 'headers' | 'path' | 'query'> = typeof pageParam === 'object' ? pageParam : { 1649 + query: { 1650 + page: pageParam 1651 + } 1652 + }; 1653 + const params = createInfiniteParams(queryKey, page); 1654 + const { data } = await searchControllerDiscoverAll({ 1655 + ...options, 1656 + ...params, 1657 + signal, 1658 + throwOnError: true 1659 + }); 1660 + return data; 1661 + }, 1662 + queryKey: searchControllerDiscoverAllInfiniteQueryKey(options) 1663 + });
+2 -385
packages/api/src/generated/index.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 - export { 4 - authControllerBlueskyProfileStatus, 5 - authControllerCallback, 6 - authControllerGetClientMetadata, 7 - authControllerLogin, 8 - authControllerLogout, 9 - authControllerMe, 10 - authControllerSignup, 11 - authControllerSuggestions, 12 - listsControllerAddItemToList, 13 - listsControllerCreateList, 14 - listsControllerDeleteList, 15 - listsControllerGetList, 16 - listsControllerGetListsForItem, 17 - listsControllerGetPublicUserList, 18 - listsControllerGetPublicUserLists, 19 - listsControllerGetUserLists, 20 - listsControllerRemoveItemFromList, 21 - listsControllerUpdateList, 22 - moviesControllerDeleteWatchHistoryEntry, 23 - moviesControllerDiscoverMovies, 24 - moviesControllerGetMovie, 25 - moviesControllerGetMovieDetails, 26 - moviesControllerGetMovieWatchHistory, 27 - moviesControllerGetUserMovies, 28 - moviesControllerGetUserMoviesPaginated, 29 - moviesControllerMarkWatched, 30 - moviesControllerSearchMovies, 31 - moviesControllerUnmarkWatched, 32 - type Options, 33 - searchControllerDiscoverAll, 34 - searchControllerSearchAll, 35 - shelfControllerGetUserActivitySummary, 36 - shelfControllerGetUserShelf, 37 - showsControllerDeleteEpisodeWatchHistoryEntry, 38 - showsControllerDiscoverShows, 39 - showsControllerGetEpisodeDetails, 40 - showsControllerGetSeasonDetails, 41 - showsControllerGetShow, 42 - showsControllerGetShowDetails, 43 - showsControllerGetShowWatchHistory, 44 - showsControllerGetUserEpisodesPaginated, 45 - showsControllerGetUserReleaseCalendar, 46 - showsControllerGetUserShows, 47 - showsControllerGetUserUpNext, 48 - showsControllerMarkSeasonWatched, 49 - showsControllerMarkShowWatched, 50 - showsControllerMarkWatched, 51 - showsControllerSearchShows, 52 - showsControllerUnmarkWatched, 53 - socialControllerFollow, 54 - socialControllerGetFeed, 55 - socialControllerGetFollowers, 56 - socialControllerGetFollowing, 57 - socialControllerGetRelationship, 58 - socialControllerGetWatchers, 59 - socialControllerSearchPeople, 60 - socialControllerUnfollow, 61 - usersControllerCompleteOnboarding, 62 - usersControllerDeleteMyAccount, 63 - usersControllerDeleteMyAvatar, 64 - usersControllerFetchMyTraktPublicHistory, 65 - usersControllerGetAvatar, 66 - usersControllerGetMyCurrentTraktImport, 67 - usersControllerGetMySettings, 68 - usersControllerGetPublicProfile, 69 - usersControllerImportMyBlueskyFollows, 70 - usersControllerImportMyHistory, 71 - usersControllerStartMyTraktImport, 72 - usersControllerUpdateMyProfile, 73 - usersControllerUpdateMySettings, 74 - usersControllerUploadMyAvatar, 75 - } from "./sdk.gen"; 76 - export type { 77 - AddToListDto, 78 - AuthControllerBlueskyProfileStatusData, 79 - AuthControllerBlueskyProfileStatusErrors, 80 - AuthControllerBlueskyProfileStatusResponse, 81 - AuthControllerBlueskyProfileStatusResponses, 82 - AuthControllerCallbackData, 83 - AuthControllerGetClientMetadataData, 84 - AuthControllerGetClientMetadataResponses, 85 - AuthControllerLoginData, 86 - AuthControllerLogoutData, 87 - AuthControllerLogoutResponses, 88 - AuthControllerMeData, 89 - AuthControllerMeErrors, 90 - AuthControllerMeResponse, 91 - AuthControllerMeResponses, 92 - AuthControllerSignupData, 93 - AuthControllerSuggestionsData, 94 - AuthControllerSuggestionsResponses, 95 - BlueskyProfileStatusDto, 96 - ClientOptions, 97 - CompleteOnboardingResponseDto, 98 - CreateListDto, 99 - DeleteUserAccountDto, 100 - EpisodeContextDto, 101 - EpisodeHistoryItemDto, 102 - EpisodeReferenceDto, 103 - FetchTraktPublicHistoryDto, 104 - FetchTraktPublicHistoryResponseDto, 105 - FollowedActivityFeedDto, 106 - FollowedActivityItemDto, 107 - FollowedWatcherActorDto, 108 - FollowedWatcherDto, 109 - FollowedWatchersDto, 110 - ImportBlueskyFollowsResponseDto, 111 - ImportErrorDto, 112 - ImportHistoryDto, 113 - ImportHistoryResponseDto, 114 - ImportSkipDto, 115 - ListDto, 116 - ListsControllerAddItemToListData, 117 - ListsControllerAddItemToListErrors, 118 - ListsControllerAddItemToListResponses, 119 - ListsControllerCreateListData, 120 - ListsControllerCreateListErrors, 121 - ListsControllerCreateListResponse, 122 - ListsControllerCreateListResponses, 123 - ListsControllerDeleteListData, 124 - ListsControllerDeleteListErrors, 125 - ListsControllerDeleteListResponses, 126 - ListsControllerGetListData, 127 - ListsControllerGetListErrors, 128 - ListsControllerGetListResponse, 129 - ListsControllerGetListResponses, 130 - ListsControllerGetListsForItemData, 131 - ListsControllerGetListsForItemErrors, 132 - ListsControllerGetListsForItemResponse, 133 - ListsControllerGetListsForItemResponses, 134 - ListsControllerGetPublicUserListData, 135 - ListsControllerGetPublicUserListErrors, 136 - ListsControllerGetPublicUserListResponse, 137 - ListsControllerGetPublicUserListResponses, 138 - ListsControllerGetPublicUserListsData, 139 - ListsControllerGetPublicUserListsResponse, 140 - ListsControllerGetPublicUserListsResponses, 141 - ListsControllerGetUserListsData, 142 - ListsControllerGetUserListsErrors, 143 - ListsControllerGetUserListsResponse, 144 - ListsControllerGetUserListsResponses, 145 - ListsControllerRemoveItemFromListData, 146 - ListsControllerRemoveItemFromListErrors, 147 - ListsControllerRemoveItemFromListResponses, 148 - ListsControllerUpdateListData, 149 - ListsControllerUpdateListErrors, 150 - ListsControllerUpdateListResponse, 151 - ListsControllerUpdateListResponses, 152 - ListsForItemDto, 153 - ListSummaryDto, 154 - ListWithItemsDto, 155 - MarkedEpisodesResponseDto, 156 - MarkEpisodeWatchedDto, 157 - MarkSeasonWatchedDto, 158 - MarkShowWatchedDto, 159 - MediaInListDto, 160 - MovieColorsDto, 161 - MovieDto, 162 - MoviesControllerDeleteWatchHistoryEntryData, 163 - MoviesControllerDeleteWatchHistoryEntryErrors, 164 - MoviesControllerDeleteWatchHistoryEntryResponse, 165 - MoviesControllerDeleteWatchHistoryEntryResponses, 166 - MoviesControllerDiscoverMoviesData, 167 - MoviesControllerDiscoverMoviesResponse, 168 - MoviesControllerDiscoverMoviesResponses, 169 - MoviesControllerGetMovieData, 170 - MoviesControllerGetMovieDetailsData, 171 - MoviesControllerGetMovieDetailsResponse, 172 - MoviesControllerGetMovieDetailsResponses, 173 - MoviesControllerGetMovieResponse, 174 - MoviesControllerGetMovieResponses, 175 - MoviesControllerGetMovieWatchHistoryData, 176 - MoviesControllerGetMovieWatchHistoryErrors, 177 - MoviesControllerGetMovieWatchHistoryResponse, 178 - MoviesControllerGetMovieWatchHistoryResponses, 179 - MoviesControllerGetUserMoviesData, 180 - MoviesControllerGetUserMoviesPaginatedData, 181 - MoviesControllerGetUserMoviesPaginatedResponse, 182 - MoviesControllerGetUserMoviesPaginatedResponses, 183 - MoviesControllerGetUserMoviesResponse, 184 - MoviesControllerGetUserMoviesResponses, 185 - MoviesControllerMarkWatchedData, 186 - MoviesControllerMarkWatchedErrors, 187 - MoviesControllerMarkWatchedResponse, 188 - MoviesControllerMarkWatchedResponses, 189 - MoviesControllerSearchMoviesData, 190 - MoviesControllerSearchMoviesResponse, 191 - MoviesControllerSearchMoviesResponses, 192 - MoviesControllerUnmarkWatchedData, 193 - MoviesControllerUnmarkWatchedErrors, 194 - MoviesControllerUnmarkWatchedResponse, 195 - MoviesControllerUnmarkWatchedResponses, 196 - NormalizedImportItemDto, 197 - PaginatedEpisodesResponseDto, 198 - PaginatedMoviesResponseDto, 199 - PaginatedSocialUsersDto, 200 - PaginatedUpNextResponseDto, 201 - PublicUserProfileDto, 202 - ReleaseCalendarItemDto, 203 - ReleaseCalendarResponseDto, 204 - SearchControllerDiscoverAllData, 205 - SearchControllerDiscoverAllResponse, 206 - SearchControllerDiscoverAllResponses, 207 - SearchControllerSearchAllData, 208 - SearchControllerSearchAllResponse, 209 - SearchControllerSearchAllResponses, 210 - SearchResultsDto, 211 - SearchShowsResultsDto, 212 - ShelfActivityBucketDto, 213 - ShelfActivitySummaryDto, 214 - ShelfControllerGetUserActivitySummaryData, 215 - ShelfControllerGetUserActivitySummaryResponse, 216 - ShelfControllerGetUserActivitySummaryResponses, 217 - ShelfControllerGetUserShelfData, 218 - ShelfControllerGetUserShelfResponse, 219 - ShelfControllerGetUserShelfResponses, 220 - ShelfResponseDto, 221 - ShowDto, 222 - ShowsControllerDeleteEpisodeWatchHistoryEntryData, 223 - ShowsControllerDeleteEpisodeWatchHistoryEntryErrors, 224 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, 225 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponses, 226 - ShowsControllerDiscoverShowsData, 227 - ShowsControllerDiscoverShowsResponse, 228 - ShowsControllerDiscoverShowsResponses, 229 - ShowsControllerGetEpisodeDetailsData, 230 - ShowsControllerGetEpisodeDetailsResponse, 231 - ShowsControllerGetEpisodeDetailsResponses, 232 - ShowsControllerGetSeasonDetailsData, 233 - ShowsControllerGetSeasonDetailsResponse, 234 - ShowsControllerGetSeasonDetailsResponses, 235 - ShowsControllerGetShowData, 236 - ShowsControllerGetShowDetailsData, 237 - ShowsControllerGetShowDetailsResponse, 238 - ShowsControllerGetShowDetailsResponses, 239 - ShowsControllerGetShowResponse, 240 - ShowsControllerGetShowResponses, 241 - ShowsControllerGetShowWatchHistoryData, 242 - ShowsControllerGetShowWatchHistoryErrors, 243 - ShowsControllerGetShowWatchHistoryResponse, 244 - ShowsControllerGetShowWatchHistoryResponses, 245 - ShowsControllerGetUserEpisodesPaginatedData, 246 - ShowsControllerGetUserEpisodesPaginatedResponse, 247 - ShowsControllerGetUserEpisodesPaginatedResponses, 248 - ShowsControllerGetUserReleaseCalendarData, 249 - ShowsControllerGetUserReleaseCalendarResponse, 250 - ShowsControllerGetUserReleaseCalendarResponses, 251 - ShowsControllerGetUserShowsData, 252 - ShowsControllerGetUserShowsResponse, 253 - ShowsControllerGetUserShowsResponses, 254 - ShowsControllerGetUserUpNextData, 255 - ShowsControllerGetUserUpNextResponse, 256 - ShowsControllerGetUserUpNextResponses, 257 - ShowsControllerMarkSeasonWatchedData, 258 - ShowsControllerMarkSeasonWatchedErrors, 259 - ShowsControllerMarkSeasonWatchedResponse, 260 - ShowsControllerMarkSeasonWatchedResponses, 261 - ShowsControllerMarkShowWatchedData, 262 - ShowsControllerMarkShowWatchedErrors, 263 - ShowsControllerMarkShowWatchedResponse, 264 - ShowsControllerMarkShowWatchedResponses, 265 - ShowsControllerMarkWatchedData, 266 - ShowsControllerMarkWatchedErrors, 267 - ShowsControllerMarkWatchedResponse, 268 - ShowsControllerMarkWatchedResponses, 269 - ShowsControllerSearchShowsData, 270 - ShowsControllerSearchShowsResponse, 271 - ShowsControllerSearchShowsResponses, 272 - ShowsControllerUnmarkWatchedData, 273 - ShowsControllerUnmarkWatchedResponse, 274 - ShowsControllerUnmarkWatchedResponses, 275 - SocialActorDto, 276 - SocialControllerFollowData, 277 - SocialControllerFollowResponse, 278 - SocialControllerFollowResponses, 279 - SocialControllerGetFeedData, 280 - SocialControllerGetFeedResponse, 281 - SocialControllerGetFeedResponses, 282 - SocialControllerGetFollowersData, 283 - SocialControllerGetFollowersResponse, 284 - SocialControllerGetFollowersResponses, 285 - SocialControllerGetFollowingData, 286 - SocialControllerGetFollowingResponse, 287 - SocialControllerGetFollowingResponses, 288 - SocialControllerGetRelationshipData, 289 - SocialControllerGetRelationshipResponse, 290 - SocialControllerGetRelationshipResponses, 291 - SocialControllerGetWatchersData, 292 - SocialControllerGetWatchersResponse, 293 - SocialControllerGetWatchersResponses, 294 - SocialControllerSearchPeopleData, 295 - SocialControllerSearchPeopleResponse, 296 - SocialControllerSearchPeopleResponses, 297 - SocialControllerUnfollowData, 298 - SocialControllerUnfollowResponse, 299 - SocialControllerUnfollowResponses, 300 - SocialUserCardDto, 301 - StartTraktImportDto, 302 - StartTraktImportResponseDto, 303 - TmdbCastDto, 304 - TmdbCreditsDto, 305 - TmdbCrewDto, 306 - TmdbEpisodeDto, 307 - TmdbGenreDto, 308 - TmdbMovieDetailDto, 309 - TmdbMovieResultDto, 310 - TmdbNetworkDto, 311 - TmdbSeasonDetailDto, 312 - TmdbSeasonSummaryDto, 313 - TmdbShowDetailDto, 314 - TmdbShowResultDto, 315 - TmdbTrailerDto, 316 - TrackedEpisodeDto, 317 - TrackedMovieDto, 318 - TrackedShowSummaryDto, 319 - TraktHistoryPreviewItemDto, 320 - TraktImportJobDto, 321 - TraktPublicProfileDto, 322 - UnifiedDiscoverResponseDto, 323 - UnifiedSearchResponseDto, 324 - UnifiedSearchResultDto, 325 - UpdateListDto, 326 - UpdateUserProfileDto, 327 - UpdateUserSettingsDto, 328 - UpNextEpisodeDto, 329 - UpNextShowDto, 330 - UserDto, 331 - UserProfileDto, 332 - UserRelationshipDto, 333 - UsersControllerCompleteOnboardingData, 334 - UsersControllerCompleteOnboardingErrors, 335 - UsersControllerCompleteOnboardingResponse, 336 - UsersControllerCompleteOnboardingResponses, 337 - UsersControllerDeleteMyAccountData, 338 - UsersControllerDeleteMyAccountErrors, 339 - UsersControllerDeleteMyAccountResponse, 340 - UsersControllerDeleteMyAccountResponses, 341 - UsersControllerDeleteMyAvatarData, 342 - UsersControllerDeleteMyAvatarResponse, 343 - UsersControllerDeleteMyAvatarResponses, 344 - UsersControllerFetchMyTraktPublicHistoryData, 345 - UsersControllerFetchMyTraktPublicHistoryErrors, 346 - UsersControllerFetchMyTraktPublicHistoryResponse, 347 - UsersControllerFetchMyTraktPublicHistoryResponses, 348 - UsersControllerGetAvatarData, 349 - UsersControllerGetAvatarResponses, 350 - UsersControllerGetMyCurrentTraktImportData, 351 - UsersControllerGetMyCurrentTraktImportErrors, 352 - UsersControllerGetMyCurrentTraktImportResponse, 353 - UsersControllerGetMyCurrentTraktImportResponses, 354 - UsersControllerGetMySettingsData, 355 - UsersControllerGetMySettingsErrors, 356 - UsersControllerGetMySettingsResponse, 357 - UsersControllerGetMySettingsResponses, 358 - UsersControllerGetPublicProfileData, 359 - UsersControllerGetPublicProfileErrors, 360 - UsersControllerGetPublicProfileResponse, 361 - UsersControllerGetPublicProfileResponses, 362 - UsersControllerImportMyBlueskyFollowsData, 363 - UsersControllerImportMyBlueskyFollowsErrors, 364 - UsersControllerImportMyBlueskyFollowsResponse, 365 - UsersControllerImportMyBlueskyFollowsResponses, 366 - UsersControllerImportMyHistoryData, 367 - UsersControllerImportMyHistoryErrors, 368 - UsersControllerImportMyHistoryResponse, 369 - UsersControllerImportMyHistoryResponses, 370 - UsersControllerStartMyTraktImportData, 371 - UsersControllerStartMyTraktImportErrors, 372 - UsersControllerStartMyTraktImportResponse, 373 - UsersControllerStartMyTraktImportResponses, 374 - UsersControllerUpdateMyProfileData, 375 - UsersControllerUpdateMyProfileErrors, 376 - UsersControllerUpdateMyProfileResponse, 377 - UsersControllerUpdateMyProfileResponses, 378 - UsersControllerUpdateMySettingsData, 379 - UsersControllerUpdateMySettingsErrors, 380 - UsersControllerUpdateMySettingsResponse, 381 - UsersControllerUpdateMySettingsResponses, 382 - UsersControllerUploadMyAvatarData, 383 - UsersControllerUploadMyAvatarResponse, 384 - UsersControllerUploadMyAvatarResponses, 385 - UserSettingsDto, 386 - WatchHistoryItemDto, 387 - } from "./types.gen"; 3 + export { authControllerBlueskyProfileStatus, authControllerCallback, authControllerGetClientMetadata, authControllerLogin, authControllerLogout, authControllerMe, authControllerSignup, authControllerSuggestions, listsControllerAddItemToList, listsControllerCreateList, listsControllerDeleteList, listsControllerGetList, listsControllerGetListsForItem, listsControllerGetPublicUserList, listsControllerGetPublicUserLists, listsControllerGetUserLists, listsControllerRemoveItemFromList, listsControllerUpdateList, moviesControllerDeleteWatchHistoryEntry, moviesControllerDiscoverMovies, moviesControllerGetMovie, moviesControllerGetMovieDetails, moviesControllerGetMovieWatchHistory, moviesControllerGetUserMovies, moviesControllerGetUserMoviesPaginated, moviesControllerMarkWatched, moviesControllerSearchMovies, moviesControllerUnmarkWatched, type Options, searchControllerDiscoverAll, searchControllerSearchAll, shelfControllerGetUserActivitySummary, shelfControllerGetUserShelf, showsControllerDeleteEpisodeWatchHistoryEntry, showsControllerDiscoverShows, showsControllerGetEpisodeDetails, showsControllerGetLocalEpisodes, showsControllerGetLocalSeasons, showsControllerGetSeasonDetails, showsControllerGetShow, showsControllerGetShowDetails, showsControllerGetShowWatchHistory, showsControllerGetUserEpisodesPaginated, showsControllerGetUserReleaseCalendar, showsControllerGetUserShows, showsControllerGetUserUpNext, showsControllerMarkSeasonWatched, showsControllerMarkShowWatched, showsControllerMarkWatched, showsControllerSearchShows, showsControllerUnmarkWatched, socialControllerFollow, socialControllerGetFeed, socialControllerGetFollowers, socialControllerGetFollowing, socialControllerGetRelationship, socialControllerGetWatchers, socialControllerSearchPeople, socialControllerUnfollow, usersControllerCompleteOnboarding, usersControllerDeleteMyAccount, usersControllerDeleteMyAvatar, usersControllerFetchMyTraktPublicHistory, usersControllerGetAvatar, usersControllerGetMyCurrentTraktImport, usersControllerGetMySettings, usersControllerGetPublicProfile, usersControllerImportMyBlueskyFollows, usersControllerImportMyHistory, usersControllerStartMyTraktImport, usersControllerUpdateMyProfile, usersControllerUpdateMySettings, usersControllerUploadMyAvatar } from './sdk.gen'; 4 + export type { AddToListDto, AuthControllerBlueskyProfileStatusData, AuthControllerBlueskyProfileStatusErrors, AuthControllerBlueskyProfileStatusResponse, AuthControllerBlueskyProfileStatusResponses, AuthControllerCallbackData, AuthControllerGetClientMetadataData, AuthControllerGetClientMetadataResponses, AuthControllerLoginData, AuthControllerLogoutData, AuthControllerLogoutResponses, AuthControllerMeData, AuthControllerMeErrors, AuthControllerMeResponse, AuthControllerMeResponses, AuthControllerSignupData, AuthControllerSuggestionsData, AuthControllerSuggestionsResponses, BlueskyProfileStatusDto, ClientOptions, CompleteOnboardingResponseDto, CreateListDto, DeleteUserAccountDto, EpisodeContextDto, EpisodeHistoryItemDto, EpisodeReferenceDto, FetchTraktPublicHistoryDto, FetchTraktPublicHistoryResponseDto, FollowedActivityFeedDto, FollowedActivityItemDto, FollowedWatcherActorDto, FollowedWatcherDto, FollowedWatchersDto, ImportBlueskyFollowsResponseDto, ImportErrorDto, ImportHistoryDto, ImportHistoryResponseDto, ImportSkipDto, ListDto, ListsControllerAddItemToListData, ListsControllerAddItemToListErrors, ListsControllerAddItemToListResponses, ListsControllerCreateListData, ListsControllerCreateListErrors, ListsControllerCreateListResponse, ListsControllerCreateListResponses, ListsControllerDeleteListData, ListsControllerDeleteListErrors, ListsControllerDeleteListResponses, ListsControllerGetListData, ListsControllerGetListErrors, ListsControllerGetListResponse, ListsControllerGetListResponses, ListsControllerGetListsForItemData, ListsControllerGetListsForItemErrors, ListsControllerGetListsForItemResponse, ListsControllerGetListsForItemResponses, ListsControllerGetPublicUserListData, ListsControllerGetPublicUserListErrors, ListsControllerGetPublicUserListResponse, ListsControllerGetPublicUserListResponses, ListsControllerGetPublicUserListsData, ListsControllerGetPublicUserListsResponse, ListsControllerGetPublicUserListsResponses, ListsControllerGetUserListsData, ListsControllerGetUserListsErrors, ListsControllerGetUserListsResponse, ListsControllerGetUserListsResponses, ListsControllerRemoveItemFromListData, ListsControllerRemoveItemFromListErrors, ListsControllerRemoveItemFromListResponses, ListsControllerUpdateListData, ListsControllerUpdateListErrors, ListsControllerUpdateListResponse, ListsControllerUpdateListResponses, ListsForItemDto, ListSummaryDto, ListWithItemsDto, LocalEpisodeDto, LocalSeasonDto, MarkedEpisodesResponseDto, MarkEpisodeWatchedDto, MarkSeasonWatchedDto, MarkShowWatchedDto, MediaInListDto, MovieColorsDto, MovieDto, MoviesControllerDeleteWatchHistoryEntryData, MoviesControllerDeleteWatchHistoryEntryErrors, MoviesControllerDeleteWatchHistoryEntryResponse, MoviesControllerDeleteWatchHistoryEntryResponses, MoviesControllerDiscoverMoviesData, MoviesControllerDiscoverMoviesResponse, MoviesControllerDiscoverMoviesResponses, MoviesControllerGetMovieData, MoviesControllerGetMovieDetailsData, MoviesControllerGetMovieDetailsResponse, MoviesControllerGetMovieDetailsResponses, MoviesControllerGetMovieResponse, MoviesControllerGetMovieResponses, MoviesControllerGetMovieWatchHistoryData, MoviesControllerGetMovieWatchHistoryErrors, MoviesControllerGetMovieWatchHistoryResponse, MoviesControllerGetMovieWatchHistoryResponses, MoviesControllerGetUserMoviesData, MoviesControllerGetUserMoviesPaginatedData, MoviesControllerGetUserMoviesPaginatedResponse, MoviesControllerGetUserMoviesPaginatedResponses, MoviesControllerGetUserMoviesResponse, MoviesControllerGetUserMoviesResponses, MoviesControllerMarkWatchedData, MoviesControllerMarkWatchedErrors, MoviesControllerMarkWatchedResponse, MoviesControllerMarkWatchedResponses, MoviesControllerSearchMoviesData, MoviesControllerSearchMoviesResponse, MoviesControllerSearchMoviesResponses, MoviesControllerUnmarkWatchedData, MoviesControllerUnmarkWatchedErrors, MoviesControllerUnmarkWatchedResponse, MoviesControllerUnmarkWatchedResponses, NormalizedImportItemDto, PaginatedEpisodesResponseDto, PaginatedMoviesResponseDto, PaginatedSocialUsersDto, PaginatedUpNextResponseDto, PublicUserProfileDto, ReleaseCalendarItemDto, ReleaseCalendarResponseDto, SearchControllerDiscoverAllData, SearchControllerDiscoverAllResponse, SearchControllerDiscoverAllResponses, SearchControllerSearchAllData, SearchControllerSearchAllResponse, SearchControllerSearchAllResponses, SearchResultsDto, SearchShowsResultsDto, ShelfActivityBucketDto, ShelfActivitySummaryDto, ShelfControllerGetUserActivitySummaryData, ShelfControllerGetUserActivitySummaryResponse, ShelfControllerGetUserActivitySummaryResponses, ShelfControllerGetUserShelfData, ShelfControllerGetUserShelfResponse, ShelfControllerGetUserShelfResponses, ShelfResponseDto, ShowDto, ShowsControllerDeleteEpisodeWatchHistoryEntryData, ShowsControllerDeleteEpisodeWatchHistoryEntryErrors, ShowsControllerDeleteEpisodeWatchHistoryEntryResponse, ShowsControllerDeleteEpisodeWatchHistoryEntryResponses, ShowsControllerDiscoverShowsData, ShowsControllerDiscoverShowsResponse, ShowsControllerDiscoverShowsResponses, ShowsControllerGetEpisodeDetailsData, ShowsControllerGetEpisodeDetailsResponse, ShowsControllerGetEpisodeDetailsResponses, ShowsControllerGetLocalEpisodesData, ShowsControllerGetLocalEpisodesResponse, ShowsControllerGetLocalEpisodesResponses, ShowsControllerGetLocalSeasonsData, ShowsControllerGetLocalSeasonsResponse, ShowsControllerGetLocalSeasonsResponses, ShowsControllerGetSeasonDetailsData, ShowsControllerGetSeasonDetailsResponse, ShowsControllerGetSeasonDetailsResponses, ShowsControllerGetShowData, ShowsControllerGetShowDetailsData, ShowsControllerGetShowDetailsResponse, ShowsControllerGetShowDetailsResponses, ShowsControllerGetShowResponse, ShowsControllerGetShowResponses, ShowsControllerGetShowWatchHistoryData, ShowsControllerGetShowWatchHistoryErrors, ShowsControllerGetShowWatchHistoryResponse, ShowsControllerGetShowWatchHistoryResponses, ShowsControllerGetUserEpisodesPaginatedData, ShowsControllerGetUserEpisodesPaginatedResponse, ShowsControllerGetUserEpisodesPaginatedResponses, ShowsControllerGetUserReleaseCalendarData, ShowsControllerGetUserReleaseCalendarResponse, ShowsControllerGetUserReleaseCalendarResponses, ShowsControllerGetUserShowsData, ShowsControllerGetUserShowsResponse, ShowsControllerGetUserShowsResponses, ShowsControllerGetUserUpNextData, ShowsControllerGetUserUpNextResponse, ShowsControllerGetUserUpNextResponses, ShowsControllerMarkSeasonWatchedData, ShowsControllerMarkSeasonWatchedErrors, ShowsControllerMarkSeasonWatchedResponse, ShowsControllerMarkSeasonWatchedResponses, ShowsControllerMarkShowWatchedData, ShowsControllerMarkShowWatchedErrors, ShowsControllerMarkShowWatchedResponse, ShowsControllerMarkShowWatchedResponses, ShowsControllerMarkWatchedData, ShowsControllerMarkWatchedErrors, ShowsControllerMarkWatchedResponse, ShowsControllerMarkWatchedResponses, ShowsControllerSearchShowsData, ShowsControllerSearchShowsResponse, ShowsControllerSearchShowsResponses, ShowsControllerUnmarkWatchedData, ShowsControllerUnmarkWatchedResponse, ShowsControllerUnmarkWatchedResponses, SocialActorDto, SocialControllerFollowData, SocialControllerFollowResponse, SocialControllerFollowResponses, SocialControllerGetFeedData, SocialControllerGetFeedResponse, SocialControllerGetFeedResponses, SocialControllerGetFollowersData, SocialControllerGetFollowersResponse, SocialControllerGetFollowersResponses, SocialControllerGetFollowingData, SocialControllerGetFollowingResponse, SocialControllerGetFollowingResponses, SocialControllerGetRelationshipData, SocialControllerGetRelationshipResponse, SocialControllerGetRelationshipResponses, SocialControllerGetWatchersData, SocialControllerGetWatchersResponse, SocialControllerGetWatchersResponses, SocialControllerSearchPeopleData, SocialControllerSearchPeopleResponse, SocialControllerSearchPeopleResponses, SocialControllerUnfollowData, SocialControllerUnfollowResponse, SocialControllerUnfollowResponses, SocialUserCardDto, StartTraktImportDto, StartTraktImportResponseDto, TmdbCastDto, TmdbCreditsDto, TmdbCrewDto, TmdbEpisodeDto, TmdbGenreDto, TmdbMovieDetailDto, TmdbMovieResultDto, TmdbNetworkDto, TmdbSeasonDetailDto, TmdbSeasonSummaryDto, TmdbShowDetailDto, TmdbShowResultDto, TmdbTrailerDto, TrackedEpisodeDto, TrackedMovieDto, TrackedShowSummaryDto, TraktHistoryPreviewItemDto, TraktImportJobDto, TraktPublicProfileDto, UnifiedDiscoverResponseDto, UnifiedSearchResponseDto, UnifiedSearchResultDto, UpdateListDto, UpdateUserProfileDto, UpdateUserSettingsDto, UpNextEpisodeDto, UpNextShowDto, UserDto, UserProfileDto, UserRelationshipDto, UsersControllerCompleteOnboardingData, UsersControllerCompleteOnboardingErrors, UsersControllerCompleteOnboardingResponse, UsersControllerCompleteOnboardingResponses, UsersControllerDeleteMyAccountData, UsersControllerDeleteMyAccountErrors, UsersControllerDeleteMyAccountResponse, UsersControllerDeleteMyAccountResponses, UsersControllerDeleteMyAvatarData, UsersControllerDeleteMyAvatarResponse, UsersControllerDeleteMyAvatarResponses, UsersControllerFetchMyTraktPublicHistoryData, UsersControllerFetchMyTraktPublicHistoryErrors, UsersControllerFetchMyTraktPublicHistoryResponse, UsersControllerFetchMyTraktPublicHistoryResponses, UsersControllerGetAvatarData, UsersControllerGetAvatarResponses, UsersControllerGetMyCurrentTraktImportData, UsersControllerGetMyCurrentTraktImportErrors, UsersControllerGetMyCurrentTraktImportResponse, UsersControllerGetMyCurrentTraktImportResponses, UsersControllerGetMySettingsData, UsersControllerGetMySettingsErrors, UsersControllerGetMySettingsResponse, UsersControllerGetMySettingsResponses, UsersControllerGetPublicProfileData, UsersControllerGetPublicProfileErrors, UsersControllerGetPublicProfileResponse, UsersControllerGetPublicProfileResponses, UsersControllerImportMyBlueskyFollowsData, UsersControllerImportMyBlueskyFollowsErrors, UsersControllerImportMyBlueskyFollowsResponse, UsersControllerImportMyBlueskyFollowsResponses, UsersControllerImportMyHistoryData, UsersControllerImportMyHistoryErrors, UsersControllerImportMyHistoryResponse, UsersControllerImportMyHistoryResponses, UsersControllerStartMyTraktImportData, UsersControllerStartMyTraktImportErrors, UsersControllerStartMyTraktImportResponse, UsersControllerStartMyTraktImportResponses, UsersControllerUpdateMyProfileData, UsersControllerUpdateMyProfileErrors, UsersControllerUpdateMyProfileResponse, UsersControllerUpdateMyProfileResponses, UsersControllerUpdateMySettingsData, UsersControllerUpdateMySettingsErrors, UsersControllerUpdateMySettingsResponse, UsersControllerUpdateMySettingsResponses, UsersControllerUploadMyAvatarData, UsersControllerUploadMyAvatarResponse, UsersControllerUploadMyAvatarResponses, UserSettingsDto, WatchHistoryItemDto } from './types.gen';
+194 -960
packages/api/src/generated/sdk.gen.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 - import { 4 - type Client, 5 - formDataBodySerializer, 6 - type Options as Options2, 7 - type TDataShape, 8 - } from "./client"; 9 - import { client } from "./client.gen"; 10 - import type { 11 - AuthControllerBlueskyProfileStatusData, 12 - AuthControllerBlueskyProfileStatusErrors, 13 - AuthControllerBlueskyProfileStatusResponses, 14 - AuthControllerCallbackData, 15 - AuthControllerGetClientMetadataData, 16 - AuthControllerGetClientMetadataResponses, 17 - AuthControllerLoginData, 18 - AuthControllerLogoutData, 19 - AuthControllerLogoutResponses, 20 - AuthControllerMeData, 21 - AuthControllerMeErrors, 22 - AuthControllerMeResponses, 23 - AuthControllerSignupData, 24 - AuthControllerSuggestionsData, 25 - AuthControllerSuggestionsResponses, 26 - ListsControllerAddItemToListData, 27 - ListsControllerAddItemToListErrors, 28 - ListsControllerAddItemToListResponses, 29 - ListsControllerCreateListData, 30 - ListsControllerCreateListErrors, 31 - ListsControllerCreateListResponses, 32 - ListsControllerDeleteListData, 33 - ListsControllerDeleteListErrors, 34 - ListsControllerDeleteListResponses, 35 - ListsControllerGetListData, 36 - ListsControllerGetListErrors, 37 - ListsControllerGetListResponses, 38 - ListsControllerGetListsForItemData, 39 - ListsControllerGetListsForItemErrors, 40 - ListsControllerGetListsForItemResponses, 41 - ListsControllerGetPublicUserListData, 42 - ListsControllerGetPublicUserListErrors, 43 - ListsControllerGetPublicUserListResponses, 44 - ListsControllerGetPublicUserListsData, 45 - ListsControllerGetPublicUserListsResponses, 46 - ListsControllerGetUserListsData, 47 - ListsControllerGetUserListsErrors, 48 - ListsControllerGetUserListsResponses, 49 - ListsControllerRemoveItemFromListData, 50 - ListsControllerRemoveItemFromListErrors, 51 - ListsControllerRemoveItemFromListResponses, 52 - ListsControllerUpdateListData, 53 - ListsControllerUpdateListErrors, 54 - ListsControllerUpdateListResponses, 55 - MoviesControllerDeleteWatchHistoryEntryData, 56 - MoviesControllerDeleteWatchHistoryEntryErrors, 57 - MoviesControllerDeleteWatchHistoryEntryResponses, 58 - MoviesControllerDiscoverMoviesData, 59 - MoviesControllerDiscoverMoviesResponses, 60 - MoviesControllerGetMovieData, 61 - MoviesControllerGetMovieDetailsData, 62 - MoviesControllerGetMovieDetailsResponses, 63 - MoviesControllerGetMovieResponses, 64 - MoviesControllerGetMovieWatchHistoryData, 65 - MoviesControllerGetMovieWatchHistoryErrors, 66 - MoviesControllerGetMovieWatchHistoryResponses, 67 - MoviesControllerGetUserMoviesData, 68 - MoviesControllerGetUserMoviesPaginatedData, 69 - MoviesControllerGetUserMoviesPaginatedResponses, 70 - MoviesControllerGetUserMoviesResponses, 71 - MoviesControllerMarkWatchedData, 72 - MoviesControllerMarkWatchedErrors, 73 - MoviesControllerMarkWatchedResponses, 74 - MoviesControllerSearchMoviesData, 75 - MoviesControllerSearchMoviesResponses, 76 - MoviesControllerUnmarkWatchedData, 77 - MoviesControllerUnmarkWatchedErrors, 78 - MoviesControllerUnmarkWatchedResponses, 79 - SearchControllerDiscoverAllData, 80 - SearchControllerDiscoverAllResponses, 81 - SearchControllerSearchAllData, 82 - SearchControllerSearchAllResponses, 83 - ShelfControllerGetUserActivitySummaryData, 84 - ShelfControllerGetUserActivitySummaryResponses, 85 - ShelfControllerGetUserShelfData, 86 - ShelfControllerGetUserShelfResponses, 87 - ShowsControllerDeleteEpisodeWatchHistoryEntryData, 88 - ShowsControllerDeleteEpisodeWatchHistoryEntryErrors, 89 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponses, 90 - ShowsControllerDiscoverShowsData, 91 - ShowsControllerDiscoverShowsResponses, 92 - ShowsControllerGetEpisodeDetailsData, 93 - ShowsControllerGetEpisodeDetailsResponses, 94 - ShowsControllerGetSeasonDetailsData, 95 - ShowsControllerGetSeasonDetailsResponses, 96 - ShowsControllerGetShowData, 97 - ShowsControllerGetShowDetailsData, 98 - ShowsControllerGetShowDetailsResponses, 99 - ShowsControllerGetShowResponses, 100 - ShowsControllerGetShowWatchHistoryData, 101 - ShowsControllerGetShowWatchHistoryErrors, 102 - ShowsControllerGetShowWatchHistoryResponses, 103 - ShowsControllerGetUserEpisodesPaginatedData, 104 - ShowsControllerGetUserEpisodesPaginatedResponses, 105 - ShowsControllerGetUserReleaseCalendarData, 106 - ShowsControllerGetUserReleaseCalendarResponses, 107 - ShowsControllerGetUserShowsData, 108 - ShowsControllerGetUserShowsResponses, 109 - ShowsControllerGetUserUpNextData, 110 - ShowsControllerGetUserUpNextResponses, 111 - ShowsControllerMarkSeasonWatchedData, 112 - ShowsControllerMarkSeasonWatchedErrors, 113 - ShowsControllerMarkSeasonWatchedResponses, 114 - ShowsControllerMarkShowWatchedData, 115 - ShowsControllerMarkShowWatchedErrors, 116 - ShowsControllerMarkShowWatchedResponses, 117 - ShowsControllerMarkWatchedData, 118 - ShowsControllerMarkWatchedErrors, 119 - ShowsControllerMarkWatchedResponses, 120 - ShowsControllerSearchShowsData, 121 - ShowsControllerSearchShowsResponses, 122 - ShowsControllerUnmarkWatchedData, 123 - ShowsControllerUnmarkWatchedResponses, 124 - SocialControllerFollowData, 125 - SocialControllerFollowResponses, 126 - SocialControllerGetFeedData, 127 - SocialControllerGetFeedResponses, 128 - SocialControllerGetFollowersData, 129 - SocialControllerGetFollowersResponses, 130 - SocialControllerGetFollowingData, 131 - SocialControllerGetFollowingResponses, 132 - SocialControllerGetRelationshipData, 133 - SocialControllerGetRelationshipResponses, 134 - SocialControllerGetWatchersData, 135 - SocialControllerGetWatchersResponses, 136 - SocialControllerSearchPeopleData, 137 - SocialControllerSearchPeopleResponses, 138 - SocialControllerUnfollowData, 139 - SocialControllerUnfollowResponses, 140 - UsersControllerCompleteOnboardingData, 141 - UsersControllerCompleteOnboardingErrors, 142 - UsersControllerCompleteOnboardingResponses, 143 - UsersControllerDeleteMyAccountData, 144 - UsersControllerDeleteMyAccountErrors, 145 - UsersControllerDeleteMyAccountResponses, 146 - UsersControllerDeleteMyAvatarData, 147 - UsersControllerDeleteMyAvatarResponses, 148 - UsersControllerFetchMyTraktPublicHistoryData, 149 - UsersControllerFetchMyTraktPublicHistoryErrors, 150 - UsersControllerFetchMyTraktPublicHistoryResponses, 151 - UsersControllerGetAvatarData, 152 - UsersControllerGetAvatarResponses, 153 - UsersControllerGetMyCurrentTraktImportData, 154 - UsersControllerGetMyCurrentTraktImportErrors, 155 - UsersControllerGetMyCurrentTraktImportResponses, 156 - UsersControllerGetMySettingsData, 157 - UsersControllerGetMySettingsErrors, 158 - UsersControllerGetMySettingsResponses, 159 - UsersControllerGetPublicProfileData, 160 - UsersControllerGetPublicProfileErrors, 161 - UsersControllerGetPublicProfileResponses, 162 - UsersControllerImportMyBlueskyFollowsData, 163 - UsersControllerImportMyBlueskyFollowsErrors, 164 - UsersControllerImportMyBlueskyFollowsResponses, 165 - UsersControllerImportMyHistoryData, 166 - UsersControllerImportMyHistoryErrors, 167 - UsersControllerImportMyHistoryResponses, 168 - UsersControllerStartMyTraktImportData, 169 - UsersControllerStartMyTraktImportErrors, 170 - UsersControllerStartMyTraktImportResponses, 171 - UsersControllerUpdateMyProfileData, 172 - UsersControllerUpdateMyProfileErrors, 173 - UsersControllerUpdateMyProfileResponses, 174 - UsersControllerUpdateMySettingsData, 175 - UsersControllerUpdateMySettingsErrors, 176 - UsersControllerUpdateMySettingsResponses, 177 - UsersControllerUploadMyAvatarData, 178 - UsersControllerUploadMyAvatarResponses, 179 - } from "./types.gen"; 3 + import { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client'; 4 + import { client } from './client.gen'; 5 + import type { AuthControllerBlueskyProfileStatusData, AuthControllerBlueskyProfileStatusErrors, AuthControllerBlueskyProfileStatusResponses, AuthControllerCallbackData, AuthControllerGetClientMetadataData, AuthControllerGetClientMetadataResponses, AuthControllerLoginData, AuthControllerLogoutData, AuthControllerLogoutResponses, AuthControllerMeData, AuthControllerMeErrors, AuthControllerMeResponses, AuthControllerSignupData, AuthControllerSuggestionsData, AuthControllerSuggestionsResponses, ListsControllerAddItemToListData, ListsControllerAddItemToListErrors, ListsControllerAddItemToListResponses, ListsControllerCreateListData, ListsControllerCreateListErrors, ListsControllerCreateListResponses, ListsControllerDeleteListData, ListsControllerDeleteListErrors, ListsControllerDeleteListResponses, ListsControllerGetListData, ListsControllerGetListErrors, ListsControllerGetListResponses, ListsControllerGetListsForItemData, ListsControllerGetListsForItemErrors, ListsControllerGetListsForItemResponses, ListsControllerGetPublicUserListData, ListsControllerGetPublicUserListErrors, ListsControllerGetPublicUserListResponses, ListsControllerGetPublicUserListsData, ListsControllerGetPublicUserListsResponses, ListsControllerGetUserListsData, ListsControllerGetUserListsErrors, ListsControllerGetUserListsResponses, ListsControllerRemoveItemFromListData, ListsControllerRemoveItemFromListErrors, ListsControllerRemoveItemFromListResponses, ListsControllerUpdateListData, ListsControllerUpdateListErrors, ListsControllerUpdateListResponses, MoviesControllerDeleteWatchHistoryEntryData, MoviesControllerDeleteWatchHistoryEntryErrors, MoviesControllerDeleteWatchHistoryEntryResponses, MoviesControllerDiscoverMoviesData, MoviesControllerDiscoverMoviesResponses, MoviesControllerGetMovieData, MoviesControllerGetMovieDetailsData, MoviesControllerGetMovieDetailsResponses, MoviesControllerGetMovieResponses, MoviesControllerGetMovieWatchHistoryData, MoviesControllerGetMovieWatchHistoryErrors, MoviesControllerGetMovieWatchHistoryResponses, MoviesControllerGetUserMoviesData, MoviesControllerGetUserMoviesPaginatedData, MoviesControllerGetUserMoviesPaginatedResponses, MoviesControllerGetUserMoviesResponses, MoviesControllerMarkWatchedData, MoviesControllerMarkWatchedErrors, MoviesControllerMarkWatchedResponses, MoviesControllerSearchMoviesData, MoviesControllerSearchMoviesResponses, MoviesControllerUnmarkWatchedData, MoviesControllerUnmarkWatchedErrors, MoviesControllerUnmarkWatchedResponses, SearchControllerDiscoverAllData, SearchControllerDiscoverAllResponses, SearchControllerSearchAllData, SearchControllerSearchAllResponses, ShelfControllerGetUserActivitySummaryData, ShelfControllerGetUserActivitySummaryResponses, ShelfControllerGetUserShelfData, ShelfControllerGetUserShelfResponses, ShowsControllerDeleteEpisodeWatchHistoryEntryData, ShowsControllerDeleteEpisodeWatchHistoryEntryErrors, ShowsControllerDeleteEpisodeWatchHistoryEntryResponses, ShowsControllerDiscoverShowsData, ShowsControllerDiscoverShowsResponses, ShowsControllerGetEpisodeDetailsData, ShowsControllerGetEpisodeDetailsResponses, ShowsControllerGetLocalEpisodesData, ShowsControllerGetLocalEpisodesResponses, ShowsControllerGetLocalSeasonsData, ShowsControllerGetLocalSeasonsResponses, ShowsControllerGetSeasonDetailsData, ShowsControllerGetSeasonDetailsResponses, ShowsControllerGetShowData, ShowsControllerGetShowDetailsData, ShowsControllerGetShowDetailsResponses, ShowsControllerGetShowResponses, ShowsControllerGetShowWatchHistoryData, ShowsControllerGetShowWatchHistoryErrors, ShowsControllerGetShowWatchHistoryResponses, ShowsControllerGetUserEpisodesPaginatedData, ShowsControllerGetUserEpisodesPaginatedResponses, ShowsControllerGetUserReleaseCalendarData, ShowsControllerGetUserReleaseCalendarResponses, ShowsControllerGetUserShowsData, ShowsControllerGetUserShowsResponses, ShowsControllerGetUserUpNextData, ShowsControllerGetUserUpNextResponses, ShowsControllerMarkSeasonWatchedData, ShowsControllerMarkSeasonWatchedErrors, ShowsControllerMarkSeasonWatchedResponses, ShowsControllerMarkShowWatchedData, ShowsControllerMarkShowWatchedErrors, ShowsControllerMarkShowWatchedResponses, ShowsControllerMarkWatchedData, ShowsControllerMarkWatchedErrors, ShowsControllerMarkWatchedResponses, ShowsControllerSearchShowsData, ShowsControllerSearchShowsResponses, ShowsControllerUnmarkWatchedData, ShowsControllerUnmarkWatchedResponses, SocialControllerFollowData, SocialControllerFollowResponses, SocialControllerGetFeedData, SocialControllerGetFeedResponses, SocialControllerGetFollowersData, SocialControllerGetFollowersResponses, SocialControllerGetFollowingData, SocialControllerGetFollowingResponses, SocialControllerGetRelationshipData, SocialControllerGetRelationshipResponses, SocialControllerGetWatchersData, SocialControllerGetWatchersResponses, SocialControllerSearchPeopleData, SocialControllerSearchPeopleResponses, SocialControllerUnfollowData, SocialControllerUnfollowResponses, UsersControllerCompleteOnboardingData, UsersControllerCompleteOnboardingErrors, UsersControllerCompleteOnboardingResponses, UsersControllerDeleteMyAccountData, UsersControllerDeleteMyAccountErrors, UsersControllerDeleteMyAccountResponses, UsersControllerDeleteMyAvatarData, UsersControllerDeleteMyAvatarResponses, UsersControllerFetchMyTraktPublicHistoryData, UsersControllerFetchMyTraktPublicHistoryErrors, UsersControllerFetchMyTraktPublicHistoryResponses, UsersControllerGetAvatarData, UsersControllerGetAvatarResponses, UsersControllerGetMyCurrentTraktImportData, UsersControllerGetMyCurrentTraktImportErrors, UsersControllerGetMyCurrentTraktImportResponses, UsersControllerGetMySettingsData, UsersControllerGetMySettingsErrors, UsersControllerGetMySettingsResponses, UsersControllerGetPublicProfileData, UsersControllerGetPublicProfileErrors, UsersControllerGetPublicProfileResponses, UsersControllerImportMyBlueskyFollowsData, UsersControllerImportMyBlueskyFollowsErrors, UsersControllerImportMyBlueskyFollowsResponses, UsersControllerImportMyHistoryData, UsersControllerImportMyHistoryErrors, UsersControllerImportMyHistoryResponses, UsersControllerStartMyTraktImportData, UsersControllerStartMyTraktImportErrors, UsersControllerStartMyTraktImportResponses, UsersControllerUpdateMyProfileData, UsersControllerUpdateMyProfileErrors, UsersControllerUpdateMyProfileResponses, UsersControllerUpdateMySettingsData, UsersControllerUpdateMySettingsErrors, UsersControllerUpdateMySettingsResponses, UsersControllerUploadMyAvatarData, UsersControllerUploadMyAvatarResponses } from './types.gen'; 180 6 181 - export type Options< 182 - TData extends TDataShape = TDataShape, 183 - ThrowOnError extends boolean = boolean, 184 - > = Options2<TData, ThrowOnError> & { 185 - /** 186 - * You can provide a client instance returned by `createClient()` instead of 187 - * individual options. This might be also useful if you want to implement a 188 - * custom client. 189 - */ 190 - client?: Client; 191 - /** 192 - * You can pass arbitrary values through the `meta` object. This can be 193 - * used to access values that aren't defined as part of the SDK function. 194 - */ 195 - meta?: Record<string, unknown>; 7 + export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & { 8 + /** 9 + * You can provide a client instance returned by `createClient()` instead of 10 + * individual options. This might be also useful if you want to implement a 11 + * custom client. 12 + */ 13 + client?: Client; 14 + /** 15 + * You can pass arbitrary values through the `meta` object. This can be 16 + * used to access values that aren't defined as part of the SDK function. 17 + */ 18 + meta?: Record<string, unknown>; 196 19 }; 197 20 198 21 /** 199 22 * Search movies from TMDB 200 23 */ 201 - export const moviesControllerSearchMovies = < 202 - ThrowOnError extends boolean = false, 203 - >( 204 - options: Options<MoviesControllerSearchMoviesData, ThrowOnError>, 205 - ) => 206 - (options.client ?? client).get< 207 - MoviesControllerSearchMoviesResponses, 208 - unknown, 209 - ThrowOnError 210 - >({ url: "/movies/search", ...options }); 24 + export const moviesControllerSearchMovies = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerSearchMoviesData, ThrowOnError>) => (options.client ?? client).get<MoviesControllerSearchMoviesResponses, unknown, ThrowOnError>({ url: '/movies/search', ...options }); 211 25 212 26 /** 213 27 * Discover popular movies from TMDB 214 28 */ 215 - export const moviesControllerDiscoverMovies = < 216 - ThrowOnError extends boolean = false, 217 - >( 218 - options?: Options<MoviesControllerDiscoverMoviesData, ThrowOnError>, 219 - ) => 220 - (options?.client ?? client).get< 221 - MoviesControllerDiscoverMoviesResponses, 222 - unknown, 223 - ThrowOnError 224 - >({ url: "/movies/discover", ...options }); 29 + export const moviesControllerDiscoverMovies = <ThrowOnError extends boolean = false>(options?: Options<MoviesControllerDiscoverMoviesData, ThrowOnError>) => (options?.client ?? client).get<MoviesControllerDiscoverMoviesResponses, unknown, ThrowOnError>({ url: '/movies/discover', ...options }); 225 30 226 31 /** 227 32 * Get movie details from TMDB 228 33 */ 229 - export const moviesControllerGetMovieDetails = < 230 - ThrowOnError extends boolean = false, 231 - >( 232 - options: Options<MoviesControllerGetMovieDetailsData, ThrowOnError>, 233 - ) => 234 - (options.client ?? client).get< 235 - MoviesControllerGetMovieDetailsResponses, 236 - unknown, 237 - ThrowOnError 238 - >({ url: "/movies/tmdb/{movieId}", ...options }); 34 + export const moviesControllerGetMovieDetails = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerGetMovieDetailsData, ThrowOnError>) => (options.client ?? client).get<MoviesControllerGetMovieDetailsResponses, unknown, ThrowOnError>({ url: '/movies/tmdb/{movieId}', ...options }); 239 35 240 36 /** 241 37 * Get tracked movies for a user 242 38 */ 243 - export const moviesControllerGetUserMovies = < 244 - ThrowOnError extends boolean = false, 245 - >( 246 - options: Options<MoviesControllerGetUserMoviesData, ThrowOnError>, 247 - ) => 248 - (options.client ?? client).get< 249 - MoviesControllerGetUserMoviesResponses, 250 - unknown, 251 - ThrowOnError 252 - >({ url: "/movies/user/{userDid}", ...options }); 39 + export const moviesControllerGetUserMovies = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerGetUserMoviesData, ThrowOnError>) => (options.client ?? client).get<MoviesControllerGetUserMoviesResponses, unknown, ThrowOnError>({ url: '/movies/user/{userDid}', ...options }); 253 40 254 41 /** 255 42 * Get paginated tracked movies for a user 256 43 */ 257 - export const moviesControllerGetUserMoviesPaginated = < 258 - ThrowOnError extends boolean = false, 259 - >( 260 - options: Options<MoviesControllerGetUserMoviesPaginatedData, ThrowOnError>, 261 - ) => 262 - (options.client ?? client).get< 263 - MoviesControllerGetUserMoviesPaginatedResponses, 264 - unknown, 265 - ThrowOnError 266 - >({ url: "/movies/user/{userDid}/paginated", ...options }); 44 + export const moviesControllerGetUserMoviesPaginated = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerGetUserMoviesPaginatedData, ThrowOnError>) => (options.client ?? client).get<MoviesControllerGetUserMoviesPaginatedResponses, unknown, ThrowOnError>({ url: '/movies/user/{userDid}/paginated', ...options }); 267 45 268 46 /** 269 47 * Mark a movie as watched 270 48 */ 271 - export const moviesControllerMarkWatched = < 272 - ThrowOnError extends boolean = false, 273 - >( 274 - options: Options<MoviesControllerMarkWatchedData, ThrowOnError>, 275 - ) => 276 - (options.client ?? client).post< 277 - MoviesControllerMarkWatchedResponses, 278 - MoviesControllerMarkWatchedErrors, 279 - ThrowOnError 280 - >({ 281 - url: "/movies/watched", 282 - ...options, 283 - headers: { 284 - "Content-Type": "application/json", 285 - ...options.headers, 286 - }, 287 - }); 49 + export const moviesControllerMarkWatched = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerMarkWatchedData, ThrowOnError>) => (options.client ?? client).post<MoviesControllerMarkWatchedResponses, MoviesControllerMarkWatchedErrors, ThrowOnError>({ 50 + url: '/movies/watched', 51 + ...options, 52 + headers: { 53 + 'Content-Type': 'application/json', 54 + ...options.headers 55 + } 56 + }); 288 57 289 58 /** 290 59 * Unmark a movie as watched 291 60 */ 292 - export const moviesControllerUnmarkWatched = < 293 - ThrowOnError extends boolean = false, 294 - >( 295 - options: Options<MoviesControllerUnmarkWatchedData, ThrowOnError>, 296 - ) => 297 - (options.client ?? client).delete< 298 - MoviesControllerUnmarkWatchedResponses, 299 - MoviesControllerUnmarkWatchedErrors, 300 - ThrowOnError 301 - >({ url: "/movies/watched/{movieId}", ...options }); 61 + export const moviesControllerUnmarkWatched = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerUnmarkWatchedData, ThrowOnError>) => (options.client ?? client).delete<MoviesControllerUnmarkWatchedResponses, MoviesControllerUnmarkWatchedErrors, ThrowOnError>({ url: '/movies/watched/{movieId}', ...options }); 302 62 303 63 /** 304 64 * Get movie from database 305 65 */ 306 - export const moviesControllerGetMovie = <ThrowOnError extends boolean = false>( 307 - options: Options<MoviesControllerGetMovieData, ThrowOnError>, 308 - ) => 309 - (options.client ?? client).get< 310 - MoviesControllerGetMovieResponses, 311 - unknown, 312 - ThrowOnError 313 - >({ url: "/movies/{movieId}", ...options }); 66 + export const moviesControllerGetMovie = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerGetMovieData, ThrowOnError>) => (options.client ?? client).get<MoviesControllerGetMovieResponses, unknown, ThrowOnError>({ url: '/movies/{movieId}', ...options }); 314 67 315 68 /** 316 69 * Get watch history for a specific movie 317 70 */ 318 - export const moviesControllerGetMovieWatchHistory = < 319 - ThrowOnError extends boolean = false, 320 - >( 321 - options: Options<MoviesControllerGetMovieWatchHistoryData, ThrowOnError>, 322 - ) => 323 - (options.client ?? client).get< 324 - MoviesControllerGetMovieWatchHistoryResponses, 325 - MoviesControllerGetMovieWatchHistoryErrors, 326 - ThrowOnError 327 - >({ url: "/movies/user/{userDid}/movie/{movieId}/history", ...options }); 71 + export const moviesControllerGetMovieWatchHistory = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerGetMovieWatchHistoryData, ThrowOnError>) => (options.client ?? client).get<MoviesControllerGetMovieWatchHistoryResponses, MoviesControllerGetMovieWatchHistoryErrors, ThrowOnError>({ url: '/movies/user/{userDid}/movie/{movieId}/history', ...options }); 328 72 329 73 /** 330 74 * Delete a specific watch history entry 331 75 */ 332 - export const moviesControllerDeleteWatchHistoryEntry = < 333 - ThrowOnError extends boolean = false, 334 - >( 335 - options: Options<MoviesControllerDeleteWatchHistoryEntryData, ThrowOnError>, 336 - ) => 337 - (options.client ?? client).delete< 338 - MoviesControllerDeleteWatchHistoryEntryResponses, 339 - MoviesControllerDeleteWatchHistoryEntryErrors, 340 - ThrowOnError 341 - >({ url: "/movies/history/{trackedMovieId}", ...options }); 76 + export const moviesControllerDeleteWatchHistoryEntry = <ThrowOnError extends boolean = false>(options: Options<MoviesControllerDeleteWatchHistoryEntryData, ThrowOnError>) => (options.client ?? client).delete<MoviesControllerDeleteWatchHistoryEntryResponses, MoviesControllerDeleteWatchHistoryEntryErrors, ThrowOnError>({ url: '/movies/history/{trackedMovieId}', ...options }); 342 77 343 78 /** 344 79 * OAuth client metadata 345 80 */ 346 - export const authControllerGetClientMetadata = < 347 - ThrowOnError extends boolean = false, 348 - >( 349 - options?: Options<AuthControllerGetClientMetadataData, ThrowOnError>, 350 - ) => 351 - (options?.client ?? client).get< 352 - AuthControllerGetClientMetadataResponses, 353 - unknown, 354 - ThrowOnError 355 - >({ url: "/.well-known/oauth-client-metadata.json", ...options }); 81 + export const authControllerGetClientMetadata = <ThrowOnError extends boolean = false>(options?: Options<AuthControllerGetClientMetadataData, ThrowOnError>) => (options?.client ?? client).get<AuthControllerGetClientMetadataResponses, unknown, ThrowOnError>({ url: '/.well-known/oauth-client-metadata.json', ...options }); 356 82 357 83 /** 358 84 * Start AT Protocol OAuth login 359 85 */ 360 - export const authControllerLogin = <ThrowOnError extends boolean = false>( 361 - options: Options<AuthControllerLoginData, ThrowOnError>, 362 - ) => 363 - (options.client ?? client).get<unknown, unknown, ThrowOnError>({ 364 - url: "/auth/login", 365 - ...options, 366 - }); 86 + export const authControllerLogin = <ThrowOnError extends boolean = false>(options: Options<AuthControllerLoginData, ThrowOnError>) => (options.client ?? client).get<unknown, unknown, ThrowOnError>({ url: '/auth/login', ...options }); 367 87 368 88 /** 369 89 * Start AT Protocol OAuth signup via PDS 370 90 */ 371 - export const authControllerSignup = <ThrowOnError extends boolean = false>( 372 - options?: Options<AuthControllerSignupData, ThrowOnError>, 373 - ) => 374 - (options?.client ?? client).get<unknown, unknown, ThrowOnError>({ 375 - url: "/auth/signup", 376 - ...options, 377 - }); 91 + export const authControllerSignup = <ThrowOnError extends boolean = false>(options?: Options<AuthControllerSignupData, ThrowOnError>) => (options?.client ?? client).get<unknown, unknown, ThrowOnError>({ url: '/auth/signup', ...options }); 378 92 379 93 /** 380 94 * Search for actor suggestions by handle prefix 381 95 */ 382 - export const authControllerSuggestions = <ThrowOnError extends boolean = false>( 383 - options: Options<AuthControllerSuggestionsData, ThrowOnError>, 384 - ) => 385 - (options.client ?? client).get< 386 - AuthControllerSuggestionsResponses, 387 - unknown, 388 - ThrowOnError 389 - >({ url: "/auth/suggestions", ...options }); 96 + export const authControllerSuggestions = <ThrowOnError extends boolean = false>(options: Options<AuthControllerSuggestionsData, ThrowOnError>) => (options.client ?? client).get<AuthControllerSuggestionsResponses, unknown, ThrowOnError>({ url: '/auth/suggestions', ...options }); 390 97 391 98 /** 392 99 * AT Protocol OAuth callback 393 100 */ 394 - export const authControllerCallback = <ThrowOnError extends boolean = false>( 395 - options?: Options<AuthControllerCallbackData, ThrowOnError>, 396 - ) => 397 - (options?.client ?? client).get<unknown, unknown, ThrowOnError>({ 398 - url: "/auth/callback", 399 - ...options, 400 - }); 101 + export const authControllerCallback = <ThrowOnError extends boolean = false>(options?: Options<AuthControllerCallbackData, ThrowOnError>) => (options?.client ?? client).get<unknown, unknown, ThrowOnError>({ url: '/auth/callback', ...options }); 401 102 402 103 /** 403 104 * Get current authenticated user 404 105 */ 405 - export const authControllerMe = <ThrowOnError extends boolean = false>( 406 - options?: Options<AuthControllerMeData, ThrowOnError>, 407 - ) => 408 - (options?.client ?? client).get< 409 - AuthControllerMeResponses, 410 - AuthControllerMeErrors, 411 - ThrowOnError 412 - >({ url: "/auth/me", ...options }); 106 + export const authControllerMe = <ThrowOnError extends boolean = false>(options?: Options<AuthControllerMeData, ThrowOnError>) => (options?.client ?? client).get<AuthControllerMeResponses, AuthControllerMeErrors, ThrowOnError>({ url: '/auth/me', ...options }); 413 107 414 108 /** 415 109 * Get current authenticated user's Bluesky profile status 416 110 */ 417 - export const authControllerBlueskyProfileStatus = < 418 - ThrowOnError extends boolean = false, 419 - >( 420 - options?: Options<AuthControllerBlueskyProfileStatusData, ThrowOnError>, 421 - ) => 422 - (options?.client ?? client).get< 423 - AuthControllerBlueskyProfileStatusResponses, 424 - AuthControllerBlueskyProfileStatusErrors, 425 - ThrowOnError 426 - >({ url: "/auth/me/bluesky-profile-status", ...options }); 111 + export const authControllerBlueskyProfileStatus = <ThrowOnError extends boolean = false>(options?: Options<AuthControllerBlueskyProfileStatusData, ThrowOnError>) => (options?.client ?? client).get<AuthControllerBlueskyProfileStatusResponses, AuthControllerBlueskyProfileStatusErrors, ThrowOnError>({ url: '/auth/me/bluesky-profile-status', ...options }); 427 112 428 113 /** 429 114 * Logout and clear session 430 115 */ 431 - export const authControllerLogout = <ThrowOnError extends boolean = false>( 432 - options?: Options<AuthControllerLogoutData, ThrowOnError>, 433 - ) => 434 - (options?.client ?? client).post< 435 - AuthControllerLogoutResponses, 436 - unknown, 437 - ThrowOnError 438 - >({ url: "/auth/logout", ...options }); 116 + export const authControllerLogout = <ThrowOnError extends boolean = false>(options?: Options<AuthControllerLogoutData, ThrowOnError>) => (options?.client ?? client).post<AuthControllerLogoutResponses, unknown, ThrowOnError>({ url: '/auth/logout', ...options }); 439 117 440 118 /** 441 119 * Search shows from TMDB 442 120 */ 443 - export const showsControllerSearchShows = < 444 - ThrowOnError extends boolean = false, 445 - >( 446 - options: Options<ShowsControllerSearchShowsData, ThrowOnError>, 447 - ) => 448 - (options.client ?? client).get< 449 - ShowsControllerSearchShowsResponses, 450 - unknown, 451 - ThrowOnError 452 - >({ url: "/shows/search", ...options }); 121 + export const showsControllerSearchShows = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerSearchShowsData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerSearchShowsResponses, unknown, ThrowOnError>({ url: '/shows/search', ...options }); 453 122 454 123 /** 455 124 * Discover popular shows from TMDB 456 125 */ 457 - export const showsControllerDiscoverShows = < 458 - ThrowOnError extends boolean = false, 459 - >( 460 - options?: Options<ShowsControllerDiscoverShowsData, ThrowOnError>, 461 - ) => 462 - (options?.client ?? client).get< 463 - ShowsControllerDiscoverShowsResponses, 464 - unknown, 465 - ThrowOnError 466 - >({ url: "/shows/discover", ...options }); 126 + export const showsControllerDiscoverShows = <ThrowOnError extends boolean = false>(options?: Options<ShowsControllerDiscoverShowsData, ThrowOnError>) => (options?.client ?? client).get<ShowsControllerDiscoverShowsResponses, unknown, ThrowOnError>({ url: '/shows/discover', ...options }); 467 127 468 128 /** 469 129 * Get show details from TMDB 470 130 */ 471 - export const showsControllerGetShowDetails = < 472 - ThrowOnError extends boolean = false, 473 - >( 474 - options: Options<ShowsControllerGetShowDetailsData, ThrowOnError>, 475 - ) => 476 - (options.client ?? client).get< 477 - ShowsControllerGetShowDetailsResponses, 478 - unknown, 479 - ThrowOnError 480 - >({ url: "/shows/tmdb/{showId}", ...options }); 131 + export const showsControllerGetShowDetails = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetShowDetailsData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetShowDetailsResponses, unknown, ThrowOnError>({ url: '/shows/tmdb/{showId}', ...options }); 481 132 482 133 /** 483 134 * Get season details from TMDB 484 135 */ 485 - export const showsControllerGetSeasonDetails = < 486 - ThrowOnError extends boolean = false, 487 - >( 488 - options: Options<ShowsControllerGetSeasonDetailsData, ThrowOnError>, 489 - ) => 490 - (options.client ?? client).get< 491 - ShowsControllerGetSeasonDetailsResponses, 492 - unknown, 493 - ThrowOnError 494 - >({ url: "/shows/tmdb/{showId}/season/{seasonNumber}", ...options }); 136 + export const showsControllerGetSeasonDetails = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetSeasonDetailsData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetSeasonDetailsResponses, unknown, ThrowOnError>({ url: '/shows/tmdb/{showId}/season/{seasonNumber}', ...options }); 137 + 138 + /** 139 + * Get seasons from local database (populated via sync on first interaction) 140 + */ 141 + export const showsControllerGetLocalSeasons = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetLocalSeasonsData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetLocalSeasonsResponses, unknown, ThrowOnError>({ url: '/shows/tmdb/{showId}/local-seasons', ...options }); 142 + 143 + /** 144 + * Get episodes from local database (populated via sync on first interaction) 145 + */ 146 + export const showsControllerGetLocalEpisodes = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetLocalEpisodesData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetLocalEpisodesResponses, unknown, ThrowOnError>({ url: '/shows/tmdb/{showId}/season/{seasonNumber}/local-episodes', ...options }); 495 147 496 148 /** 497 149 * Get episode details from TMDB 498 150 */ 499 - export const showsControllerGetEpisodeDetails = < 500 - ThrowOnError extends boolean = false, 501 - >( 502 - options: Options<ShowsControllerGetEpisodeDetailsData, ThrowOnError>, 503 - ) => 504 - (options.client ?? client).get< 505 - ShowsControllerGetEpisodeDetailsResponses, 506 - unknown, 507 - ThrowOnError 508 - >({ 509 - url: "/shows/tmdb/{showId}/season/{seasonNumber}/episode/{episodeNumber}", 510 - ...options, 511 - }); 151 + export const showsControllerGetEpisodeDetails = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetEpisodeDetailsData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetEpisodeDetailsResponses, unknown, ThrowOnError>({ url: '/shows/tmdb/{showId}/season/{seasonNumber}/episode/{episodeNumber}', ...options }); 512 152 513 153 /** 514 154 * Get tracked shows for a user 515 155 */ 516 - export const showsControllerGetUserShows = < 517 - ThrowOnError extends boolean = false, 518 - >( 519 - options: Options<ShowsControllerGetUserShowsData, ThrowOnError>, 520 - ) => 521 - (options.client ?? client).get< 522 - ShowsControllerGetUserShowsResponses, 523 - unknown, 524 - ThrowOnError 525 - >({ url: "/shows/user/{userDid}", ...options }); 156 + export const showsControllerGetUserShows = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetUserShowsData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetUserShowsResponses, unknown, ThrowOnError>({ url: '/shows/user/{userDid}', ...options }); 526 157 527 158 /** 528 159 * Get up next episodes for a user 529 160 */ 530 - export const showsControllerGetUserUpNext = < 531 - ThrowOnError extends boolean = false, 532 - >( 533 - options: Options<ShowsControllerGetUserUpNextData, ThrowOnError>, 534 - ) => 535 - (options.client ?? client).get< 536 - ShowsControllerGetUserUpNextResponses, 537 - unknown, 538 - ThrowOnError 539 - >({ url: "/shows/user/{userDid}/up-next", ...options }); 161 + export const showsControllerGetUserUpNext = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetUserUpNextData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetUserUpNextResponses, unknown, ThrowOnError>({ url: '/shows/user/{userDid}/up-next', ...options }); 540 162 541 163 /** 542 164 * Get upcoming releases for watched shows and future-dated watchlist items 543 165 */ 544 - export const showsControllerGetUserReleaseCalendar = < 545 - ThrowOnError extends boolean = false, 546 - >( 547 - options: Options<ShowsControllerGetUserReleaseCalendarData, ThrowOnError>, 548 - ) => 549 - (options.client ?? client).get< 550 - ShowsControllerGetUserReleaseCalendarResponses, 551 - unknown, 552 - ThrowOnError 553 - >({ url: "/shows/user/{userDid}/release-calendar", ...options }); 166 + export const showsControllerGetUserReleaseCalendar = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetUserReleaseCalendarData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetUserReleaseCalendarResponses, unknown, ThrowOnError>({ url: '/shows/user/{userDid}/release-calendar', ...options }); 554 167 555 168 /** 556 169 * Get paginated watched episodes for a user 557 170 */ 558 - export const showsControllerGetUserEpisodesPaginated = < 559 - ThrowOnError extends boolean = false, 560 - >( 561 - options: Options<ShowsControllerGetUserEpisodesPaginatedData, ThrowOnError>, 562 - ) => 563 - (options.client ?? client).get< 564 - ShowsControllerGetUserEpisodesPaginatedResponses, 565 - unknown, 566 - ThrowOnError 567 - >({ url: "/shows/user/{userDid}/episodes", ...options }); 171 + export const showsControllerGetUserEpisodesPaginated = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetUserEpisodesPaginatedData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetUserEpisodesPaginatedResponses, unknown, ThrowOnError>({ url: '/shows/user/{userDid}/episodes', ...options }); 568 172 569 173 /** 570 174 * Mark an episode as watched 571 175 */ 572 - export const showsControllerMarkWatched = < 573 - ThrowOnError extends boolean = false, 574 - >( 575 - options: Options<ShowsControllerMarkWatchedData, ThrowOnError>, 576 - ) => 577 - (options.client ?? client).post< 578 - ShowsControllerMarkWatchedResponses, 579 - ShowsControllerMarkWatchedErrors, 580 - ThrowOnError 581 - >({ 582 - url: "/shows/watched", 583 - ...options, 584 - headers: { 585 - "Content-Type": "application/json", 586 - ...options.headers, 587 - }, 588 - }); 176 + export const showsControllerMarkWatched = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerMarkWatchedData, ThrowOnError>) => (options.client ?? client).post<ShowsControllerMarkWatchedResponses, ShowsControllerMarkWatchedErrors, ThrowOnError>({ 177 + url: '/shows/watched', 178 + ...options, 179 + headers: { 180 + 'Content-Type': 'application/json', 181 + ...options.headers 182 + } 183 + }); 589 184 590 185 /** 591 186 * Unmark episode(s) as watched 592 187 */ 593 - export const showsControllerUnmarkWatched = < 594 - ThrowOnError extends boolean = false, 595 - >( 596 - options: Options<ShowsControllerUnmarkWatchedData, ThrowOnError>, 597 - ) => 598 - (options.client ?? client).delete< 599 - ShowsControllerUnmarkWatchedResponses, 600 - unknown, 601 - ThrowOnError 602 - >({ url: "/shows/watched/{showId}", ...options }); 188 + export const showsControllerUnmarkWatched = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerUnmarkWatchedData, ThrowOnError>) => (options.client ?? client).delete<ShowsControllerUnmarkWatchedResponses, unknown, ThrowOnError>({ url: '/shows/watched/{showId}', ...options }); 603 189 604 190 /** 605 191 * Get show from database 606 192 */ 607 - export const showsControllerGetShow = <ThrowOnError extends boolean = false>( 608 - options: Options<ShowsControllerGetShowData, ThrowOnError>, 609 - ) => 610 - (options.client ?? client).get< 611 - ShowsControllerGetShowResponses, 612 - unknown, 613 - ThrowOnError 614 - >({ url: "/shows/{showId}", ...options }); 193 + export const showsControllerGetShow = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetShowData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetShowResponses, unknown, ThrowOnError>({ url: '/shows/{showId}', ...options }); 615 194 616 195 /** 617 196 * Get watch history for a specific show 618 197 */ 619 - export const showsControllerGetShowWatchHistory = < 620 - ThrowOnError extends boolean = false, 621 - >( 622 - options: Options<ShowsControllerGetShowWatchHistoryData, ThrowOnError>, 623 - ) => 624 - (options.client ?? client).get< 625 - ShowsControllerGetShowWatchHistoryResponses, 626 - ShowsControllerGetShowWatchHistoryErrors, 627 - ThrowOnError 628 - >({ url: "/shows/user/{userDid}/show/{showId}/history", ...options }); 198 + export const showsControllerGetShowWatchHistory = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerGetShowWatchHistoryData, ThrowOnError>) => (options.client ?? client).get<ShowsControllerGetShowWatchHistoryResponses, ShowsControllerGetShowWatchHistoryErrors, ThrowOnError>({ url: '/shows/user/{userDid}/show/{showId}/history', ...options }); 629 199 630 200 /** 631 201 * Delete a specific episode watch history entry 632 202 */ 633 - export const showsControllerDeleteEpisodeWatchHistoryEntry = < 634 - ThrowOnError extends boolean = false, 635 - >( 636 - options: Options< 637 - ShowsControllerDeleteEpisodeWatchHistoryEntryData, 638 - ThrowOnError 639 - >, 640 - ) => 641 - (options.client ?? client).delete< 642 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponses, 643 - ShowsControllerDeleteEpisodeWatchHistoryEntryErrors, 644 - ThrowOnError 645 - >({ url: "/shows/history/{trackedEpisodeId}", ...options }); 203 + export const showsControllerDeleteEpisodeWatchHistoryEntry = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerDeleteEpisodeWatchHistoryEntryData, ThrowOnError>) => (options.client ?? client).delete<ShowsControllerDeleteEpisodeWatchHistoryEntryResponses, ShowsControllerDeleteEpisodeWatchHistoryEntryErrors, ThrowOnError>({ url: '/shows/history/{trackedEpisodeId}', ...options }); 646 204 647 205 /** 648 206 * Mark all episodes in a season as watched 649 207 */ 650 - export const showsControllerMarkSeasonWatched = < 651 - ThrowOnError extends boolean = false, 652 - >( 653 - options: Options<ShowsControllerMarkSeasonWatchedData, ThrowOnError>, 654 - ) => 655 - (options.client ?? client).post< 656 - ShowsControllerMarkSeasonWatchedResponses, 657 - ShowsControllerMarkSeasonWatchedErrors, 658 - ThrowOnError 659 - >({ 660 - url: "/shows/season/watched", 661 - ...options, 662 - headers: { 663 - "Content-Type": "application/json", 664 - ...options.headers, 665 - }, 666 - }); 208 + export const showsControllerMarkSeasonWatched = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerMarkSeasonWatchedData, ThrowOnError>) => (options.client ?? client).post<ShowsControllerMarkSeasonWatchedResponses, ShowsControllerMarkSeasonWatchedErrors, ThrowOnError>({ 209 + url: '/shows/season/watched', 210 + ...options, 211 + headers: { 212 + 'Content-Type': 'application/json', 213 + ...options.headers 214 + } 215 + }); 667 216 668 217 /** 669 218 * Mark all episodes in a show as watched 670 219 */ 671 - export const showsControllerMarkShowWatched = < 672 - ThrowOnError extends boolean = false, 673 - >( 674 - options: Options<ShowsControllerMarkShowWatchedData, ThrowOnError>, 675 - ) => 676 - (options.client ?? client).post< 677 - ShowsControllerMarkShowWatchedResponses, 678 - ShowsControllerMarkShowWatchedErrors, 679 - ThrowOnError 680 - >({ 681 - url: "/shows/show/watched", 682 - ...options, 683 - headers: { 684 - "Content-Type": "application/json", 685 - ...options.headers, 686 - }, 687 - }); 220 + export const showsControllerMarkShowWatched = <ThrowOnError extends boolean = false>(options: Options<ShowsControllerMarkShowWatchedData, ThrowOnError>) => (options.client ?? client).post<ShowsControllerMarkShowWatchedResponses, ShowsControllerMarkShowWatchedErrors, ThrowOnError>({ 221 + url: '/shows/show/watched', 222 + ...options, 223 + headers: { 224 + 'Content-Type': 'application/json', 225 + ...options.headers 226 + } 227 + }); 688 228 689 229 /** 690 230 * Get a public user profile by handle 691 231 */ 692 - export const usersControllerGetPublicProfile = < 693 - ThrowOnError extends boolean = false, 694 - >( 695 - options: Options<UsersControllerGetPublicProfileData, ThrowOnError>, 696 - ) => 697 - (options.client ?? client).get< 698 - UsersControllerGetPublicProfileResponses, 699 - UsersControllerGetPublicProfileErrors, 700 - ThrowOnError 701 - >({ url: "/users/{handle}/profile", ...options }); 232 + export const usersControllerGetPublicProfile = <ThrowOnError extends boolean = false>(options: Options<UsersControllerGetPublicProfileData, ThrowOnError>) => (options.client ?? client).get<UsersControllerGetPublicProfileResponses, UsersControllerGetPublicProfileErrors, ThrowOnError>({ url: '/users/{handle}/profile', ...options }); 702 233 703 234 /** 704 235 * Get a public user avatar from the user's PDS 705 236 */ 706 - export const usersControllerGetAvatar = <ThrowOnError extends boolean = false>( 707 - options: Options<UsersControllerGetAvatarData, ThrowOnError>, 708 - ) => 709 - (options.client ?? client).get< 710 - UsersControllerGetAvatarResponses, 711 - unknown, 712 - ThrowOnError 713 - >({ url: "/users/avatar", ...options }); 237 + export const usersControllerGetAvatar = <ThrowOnError extends boolean = false>(options: Options<UsersControllerGetAvatarData, ThrowOnError>) => (options.client ?? client).get<UsersControllerGetAvatarResponses, unknown, ThrowOnError>({ url: '/users/avatar', ...options }); 714 238 715 239 /** 716 240 * Get current user's settings 717 241 */ 718 - export const usersControllerGetMySettings = < 719 - ThrowOnError extends boolean = false, 720 - >( 721 - options?: Options<UsersControllerGetMySettingsData, ThrowOnError>, 722 - ) => 723 - (options?.client ?? client).get< 724 - UsersControllerGetMySettingsResponses, 725 - UsersControllerGetMySettingsErrors, 726 - ThrowOnError 727 - >({ url: "/users/me/settings", ...options }); 242 + export const usersControllerGetMySettings = <ThrowOnError extends boolean = false>(options?: Options<UsersControllerGetMySettingsData, ThrowOnError>) => (options?.client ?? client).get<UsersControllerGetMySettingsResponses, UsersControllerGetMySettingsErrors, ThrowOnError>({ url: '/users/me/settings', ...options }); 728 243 729 244 /** 730 245 * Update current user's settings 731 246 */ 732 - export const usersControllerUpdateMySettings = < 733 - ThrowOnError extends boolean = false, 734 - >( 735 - options: Options<UsersControllerUpdateMySettingsData, ThrowOnError>, 736 - ) => 737 - (options.client ?? client).patch< 738 - UsersControllerUpdateMySettingsResponses, 739 - UsersControllerUpdateMySettingsErrors, 740 - ThrowOnError 741 - >({ 742 - url: "/users/me/settings", 743 - ...options, 744 - headers: { 745 - "Content-Type": "application/json", 746 - ...options.headers, 747 - }, 748 - }); 247 + export const usersControllerUpdateMySettings = <ThrowOnError extends boolean = false>(options: Options<UsersControllerUpdateMySettingsData, ThrowOnError>) => (options.client ?? client).patch<UsersControllerUpdateMySettingsResponses, UsersControllerUpdateMySettingsErrors, ThrowOnError>({ 248 + url: '/users/me/settings', 249 + ...options, 250 + headers: { 251 + 'Content-Type': 'application/json', 252 + ...options.headers 253 + } 254 + }); 749 255 750 256 /** 751 257 * Update current user's profile 752 258 */ 753 - export const usersControllerUpdateMyProfile = < 754 - ThrowOnError extends boolean = false, 755 - >( 756 - options: Options<UsersControllerUpdateMyProfileData, ThrowOnError>, 757 - ) => 758 - (options.client ?? client).patch< 759 - UsersControllerUpdateMyProfileResponses, 760 - UsersControllerUpdateMyProfileErrors, 761 - ThrowOnError 762 - >({ 763 - url: "/users/me/profile", 764 - ...options, 765 - headers: { 766 - "Content-Type": "application/json", 767 - ...options.headers, 768 - }, 769 - }); 259 + export const usersControllerUpdateMyProfile = <ThrowOnError extends boolean = false>(options: Options<UsersControllerUpdateMyProfileData, ThrowOnError>) => (options.client ?? client).patch<UsersControllerUpdateMyProfileResponses, UsersControllerUpdateMyProfileErrors, ThrowOnError>({ 260 + url: '/users/me/profile', 261 + ...options, 262 + headers: { 263 + 'Content-Type': 'application/json', 264 + ...options.headers 265 + } 266 + }); 770 267 771 268 /** 772 269 * Delete current user's profile avatar 773 270 */ 774 - export const usersControllerDeleteMyAvatar = < 775 - ThrowOnError extends boolean = false, 776 - >( 777 - options?: Options<UsersControllerDeleteMyAvatarData, ThrowOnError>, 778 - ) => 779 - (options?.client ?? client).delete< 780 - UsersControllerDeleteMyAvatarResponses, 781 - unknown, 782 - ThrowOnError 783 - >({ url: "/users/me/profile/avatar", ...options }); 271 + export const usersControllerDeleteMyAvatar = <ThrowOnError extends boolean = false>(options?: Options<UsersControllerDeleteMyAvatarData, ThrowOnError>) => (options?.client ?? client).delete<UsersControllerDeleteMyAvatarResponses, unknown, ThrowOnError>({ url: '/users/me/profile/avatar', ...options }); 784 272 785 273 /** 786 274 * Upload current user's profile avatar 787 275 */ 788 - export const usersControllerUploadMyAvatar = < 789 - ThrowOnError extends boolean = false, 790 - >( 791 - options: Options<UsersControllerUploadMyAvatarData, ThrowOnError>, 792 - ) => 793 - (options.client ?? client).post< 794 - UsersControllerUploadMyAvatarResponses, 795 - unknown, 796 - ThrowOnError 797 - >({ 798 - ...formDataBodySerializer, 799 - url: "/users/me/profile/avatar", 800 - ...options, 801 - headers: { 802 - "Content-Type": null, 803 - ...options.headers, 804 - }, 805 - }); 276 + export const usersControllerUploadMyAvatar = <ThrowOnError extends boolean = false>(options: Options<UsersControllerUploadMyAvatarData, ThrowOnError>) => (options.client ?? client).post<UsersControllerUploadMyAvatarResponses, unknown, ThrowOnError>({ 277 + ...formDataBodySerializer, 278 + url: '/users/me/profile/avatar', 279 + ...options, 280 + headers: { 281 + 'Content-Type': null, 282 + ...options.headers 283 + } 284 + }); 806 285 807 286 /** 808 287 * Delete current user's account 809 288 */ 810 - export const usersControllerDeleteMyAccount = < 811 - ThrowOnError extends boolean = false, 812 - >( 813 - options: Options<UsersControllerDeleteMyAccountData, ThrowOnError>, 814 - ) => 815 - (options.client ?? client).delete< 816 - UsersControllerDeleteMyAccountResponses, 817 - UsersControllerDeleteMyAccountErrors, 818 - ThrowOnError 819 - >({ 820 - url: "/users/me/account", 821 - ...options, 822 - headers: { 823 - "Content-Type": "application/json", 824 - ...options.headers, 825 - }, 826 - }); 289 + export const usersControllerDeleteMyAccount = <ThrowOnError extends boolean = false>(options: Options<UsersControllerDeleteMyAccountData, ThrowOnError>) => (options.client ?? client).delete<UsersControllerDeleteMyAccountResponses, UsersControllerDeleteMyAccountErrors, ThrowOnError>({ 290 + url: '/users/me/account', 291 + ...options, 292 + headers: { 293 + 'Content-Type': 'application/json', 294 + ...options.headers 295 + } 296 + }); 827 297 828 298 /** 829 299 * Complete onboarding for the current user 830 300 */ 831 - export const usersControllerCompleteOnboarding = < 832 - ThrowOnError extends boolean = false, 833 - >( 834 - options?: Options<UsersControllerCompleteOnboardingData, ThrowOnError>, 835 - ) => 836 - (options?.client ?? client).post< 837 - UsersControllerCompleteOnboardingResponses, 838 - UsersControllerCompleteOnboardingErrors, 839 - ThrowOnError 840 - >({ url: "/users/me/onboarding/complete", ...options }); 301 + export const usersControllerCompleteOnboarding = <ThrowOnError extends boolean = false>(options?: Options<UsersControllerCompleteOnboardingData, ThrowOnError>) => (options?.client ?? client).post<UsersControllerCompleteOnboardingResponses, UsersControllerCompleteOnboardingErrors, ThrowOnError>({ url: '/users/me/onboarding/complete', ...options }); 841 302 842 303 /** 843 304 * Fetch normalized history from a public Trakt profile 844 305 */ 845 - export const usersControllerFetchMyTraktPublicHistory = < 846 - ThrowOnError extends boolean = false, 847 - >( 848 - options: Options<UsersControllerFetchMyTraktPublicHistoryData, ThrowOnError>, 849 - ) => 850 - (options.client ?? client).post< 851 - UsersControllerFetchMyTraktPublicHistoryResponses, 852 - UsersControllerFetchMyTraktPublicHistoryErrors, 853 - ThrowOnError 854 - >({ 855 - url: "/users/me/import/trakt/public/fetch", 856 - ...options, 857 - headers: { 858 - "Content-Type": "application/json", 859 - ...options.headers, 860 - }, 861 - }); 306 + export const usersControllerFetchMyTraktPublicHistory = <ThrowOnError extends boolean = false>(options: Options<UsersControllerFetchMyTraktPublicHistoryData, ThrowOnError>) => (options.client ?? client).post<UsersControllerFetchMyTraktPublicHistoryResponses, UsersControllerFetchMyTraktPublicHistoryErrors, ThrowOnError>({ 307 + url: '/users/me/import/trakt/public/fetch', 308 + ...options, 309 + headers: { 310 + 'Content-Type': 'application/json', 311 + ...options.headers 312 + } 313 + }); 862 314 863 315 /** 864 316 * Start a background import for a public Trakt profile 865 317 */ 866 - export const usersControllerStartMyTraktImport = < 867 - ThrowOnError extends boolean = false, 868 - >( 869 - options: Options<UsersControllerStartMyTraktImportData, ThrowOnError>, 870 - ) => 871 - (options.client ?? client).post< 872 - UsersControllerStartMyTraktImportResponses, 873 - UsersControllerStartMyTraktImportErrors, 874 - ThrowOnError 875 - >({ 876 - url: "/users/me/import/trakt/public/start", 877 - ...options, 878 - headers: { 879 - "Content-Type": "application/json", 880 - ...options.headers, 881 - }, 882 - }); 318 + export const usersControllerStartMyTraktImport = <ThrowOnError extends boolean = false>(options: Options<UsersControllerStartMyTraktImportData, ThrowOnError>) => (options.client ?? client).post<UsersControllerStartMyTraktImportResponses, UsersControllerStartMyTraktImportErrors, ThrowOnError>({ 319 + url: '/users/me/import/trakt/public/start', 320 + ...options, 321 + headers: { 322 + 'Content-Type': 'application/json', 323 + ...options.headers 324 + } 325 + }); 883 326 884 327 /** 885 328 * Get the current or most recent background Trakt import for the current user 886 329 */ 887 - export const usersControllerGetMyCurrentTraktImport = < 888 - ThrowOnError extends boolean = false, 889 - >( 890 - options?: Options<UsersControllerGetMyCurrentTraktImportData, ThrowOnError>, 891 - ) => 892 - (options?.client ?? client).get< 893 - UsersControllerGetMyCurrentTraktImportResponses, 894 - UsersControllerGetMyCurrentTraktImportErrors, 895 - ThrowOnError 896 - >({ url: "/users/me/import/trakt/public/current", ...options }); 330 + export const usersControllerGetMyCurrentTraktImport = <ThrowOnError extends boolean = false>(options?: Options<UsersControllerGetMyCurrentTraktImportData, ThrowOnError>) => (options?.client ?? client).get<UsersControllerGetMyCurrentTraktImportResponses, UsersControllerGetMyCurrentTraktImportErrors, ThrowOnError>({ url: '/users/me/import/trakt/public/current', ...options }); 897 331 898 332 /** 899 333 * Import Bluesky follows that already have OpnShelf accounts 900 334 */ 901 - export const usersControllerImportMyBlueskyFollows = < 902 - ThrowOnError extends boolean = false, 903 - >( 904 - options?: Options<UsersControllerImportMyBlueskyFollowsData, ThrowOnError>, 905 - ) => 906 - (options?.client ?? client).post< 907 - UsersControllerImportMyBlueskyFollowsResponses, 908 - UsersControllerImportMyBlueskyFollowsErrors, 909 - ThrowOnError 910 - >({ url: "/users/me/import/bluesky-follows", ...options }); 335 + export const usersControllerImportMyBlueskyFollows = <ThrowOnError extends boolean = false>(options?: Options<UsersControllerImportMyBlueskyFollowsData, ThrowOnError>) => (options?.client ?? client).post<UsersControllerImportMyBlueskyFollowsResponses, UsersControllerImportMyBlueskyFollowsErrors, ThrowOnError>({ url: '/users/me/import/bluesky-follows', ...options }); 911 336 912 337 /** 913 338 * Import normalized watch history items 914 339 */ 915 - export const usersControllerImportMyHistory = < 916 - ThrowOnError extends boolean = false, 917 - >( 918 - options: Options<UsersControllerImportMyHistoryData, ThrowOnError>, 919 - ) => 920 - (options.client ?? client).post< 921 - UsersControllerImportMyHistoryResponses, 922 - UsersControllerImportMyHistoryErrors, 923 - ThrowOnError 924 - >({ 925 - url: "/users/me/import/history", 926 - ...options, 927 - headers: { 928 - "Content-Type": "application/json", 929 - ...options.headers, 930 - }, 931 - }); 340 + export const usersControllerImportMyHistory = <ThrowOnError extends boolean = false>(options: Options<UsersControllerImportMyHistoryData, ThrowOnError>) => (options.client ?? client).post<UsersControllerImportMyHistoryResponses, UsersControllerImportMyHistoryErrors, ThrowOnError>({ 341 + url: '/users/me/import/history', 342 + ...options, 343 + headers: { 344 + 'Content-Type': 'application/json', 345 + ...options.headers 346 + } 347 + }); 932 348 933 349 /** 934 350 * Get all lists for the authenticated user 935 351 */ 936 - export const listsControllerGetUserLists = < 937 - ThrowOnError extends boolean = false, 938 - >( 939 - options?: Options<ListsControllerGetUserListsData, ThrowOnError>, 940 - ) => 941 - (options?.client ?? client).get< 942 - ListsControllerGetUserListsResponses, 943 - ListsControllerGetUserListsErrors, 944 - ThrowOnError 945 - >({ url: "/lists", ...options }); 352 + export const listsControllerGetUserLists = <ThrowOnError extends boolean = false>(options?: Options<ListsControllerGetUserListsData, ThrowOnError>) => (options?.client ?? client).get<ListsControllerGetUserListsResponses, ListsControllerGetUserListsErrors, ThrowOnError>({ url: '/lists', ...options }); 946 353 947 354 /** 948 355 * Create a new list 949 356 */ 950 - export const listsControllerCreateList = <ThrowOnError extends boolean = false>( 951 - options: Options<ListsControllerCreateListData, ThrowOnError>, 952 - ) => 953 - (options.client ?? client).post< 954 - ListsControllerCreateListResponses, 955 - ListsControllerCreateListErrors, 956 - ThrowOnError 957 - >({ 958 - url: "/lists", 959 - ...options, 960 - headers: { 961 - "Content-Type": "application/json", 962 - ...options.headers, 963 - }, 964 - }); 357 + export const listsControllerCreateList = <ThrowOnError extends boolean = false>(options: Options<ListsControllerCreateListData, ThrowOnError>) => (options.client ?? client).post<ListsControllerCreateListResponses, ListsControllerCreateListErrors, ThrowOnError>({ 358 + url: '/lists', 359 + ...options, 360 + headers: { 361 + 'Content-Type': 'application/json', 362 + ...options.headers 363 + } 364 + }); 965 365 966 366 /** 967 367 * Get public list summaries for a user 968 368 */ 969 - export const listsControllerGetPublicUserLists = < 970 - ThrowOnError extends boolean = false, 971 - >( 972 - options: Options<ListsControllerGetPublicUserListsData, ThrowOnError>, 973 - ) => 974 - (options.client ?? client).get< 975 - ListsControllerGetPublicUserListsResponses, 976 - unknown, 977 - ThrowOnError 978 - >({ url: "/lists/user/{userDid}", ...options }); 369 + export const listsControllerGetPublicUserLists = <ThrowOnError extends boolean = false>(options: Options<ListsControllerGetPublicUserListsData, ThrowOnError>) => (options.client ?? client).get<ListsControllerGetPublicUserListsResponses, unknown, ThrowOnError>({ url: '/lists/user/{userDid}', ...options }); 979 370 980 371 /** 981 372 * Get a public list with its items for a user 982 373 */ 983 - export const listsControllerGetPublicUserList = < 984 - ThrowOnError extends boolean = false, 985 - >( 986 - options: Options<ListsControllerGetPublicUserListData, ThrowOnError>, 987 - ) => 988 - (options.client ?? client).get< 989 - ListsControllerGetPublicUserListResponses, 990 - ListsControllerGetPublicUserListErrors, 991 - ThrowOnError 992 - >({ url: "/lists/user/{userDid}/{slug}", ...options }); 374 + export const listsControllerGetPublicUserList = <ThrowOnError extends boolean = false>(options: Options<ListsControllerGetPublicUserListData, ThrowOnError>) => (options.client ?? client).get<ListsControllerGetPublicUserListResponses, ListsControllerGetPublicUserListErrors, ThrowOnError>({ url: '/lists/user/{userDid}/{slug}', ...options }); 993 375 994 376 /** 995 377 * Delete a list (not allowed for default lists) 996 378 */ 997 - export const listsControllerDeleteList = <ThrowOnError extends boolean = false>( 998 - options: Options<ListsControllerDeleteListData, ThrowOnError>, 999 - ) => 1000 - (options.client ?? client).delete< 1001 - ListsControllerDeleteListResponses, 1002 - ListsControllerDeleteListErrors, 1003 - ThrowOnError 1004 - >({ url: "/lists/{slug}", ...options }); 379 + export const listsControllerDeleteList = <ThrowOnError extends boolean = false>(options: Options<ListsControllerDeleteListData, ThrowOnError>) => (options.client ?? client).delete<ListsControllerDeleteListResponses, ListsControllerDeleteListErrors, ThrowOnError>({ url: '/lists/{slug}', ...options }); 1005 380 1006 381 /** 1007 382 * Get a specific list with its items 1008 383 */ 1009 - export const listsControllerGetList = <ThrowOnError extends boolean = false>( 1010 - options: Options<ListsControllerGetListData, ThrowOnError>, 1011 - ) => 1012 - (options.client ?? client).get< 1013 - ListsControllerGetListResponses, 1014 - ListsControllerGetListErrors, 1015 - ThrowOnError 1016 - >({ url: "/lists/{slug}", ...options }); 384 + export const listsControllerGetList = <ThrowOnError extends boolean = false>(options: Options<ListsControllerGetListData, ThrowOnError>) => (options.client ?? client).get<ListsControllerGetListResponses, ListsControllerGetListErrors, ThrowOnError>({ url: '/lists/{slug}', ...options }); 1017 385 1018 386 /** 1019 387 * Update a list 1020 388 */ 1021 - export const listsControllerUpdateList = <ThrowOnError extends boolean = false>( 1022 - options: Options<ListsControllerUpdateListData, ThrowOnError>, 1023 - ) => 1024 - (options.client ?? client).put< 1025 - ListsControllerUpdateListResponses, 1026 - ListsControllerUpdateListErrors, 1027 - ThrowOnError 1028 - >({ 1029 - url: "/lists/{slug}", 1030 - ...options, 1031 - headers: { 1032 - "Content-Type": "application/json", 1033 - ...options.headers, 1034 - }, 1035 - }); 389 + export const listsControllerUpdateList = <ThrowOnError extends boolean = false>(options: Options<ListsControllerUpdateListData, ThrowOnError>) => (options.client ?? client).put<ListsControllerUpdateListResponses, ListsControllerUpdateListErrors, ThrowOnError>({ 390 + url: '/lists/{slug}', 391 + ...options, 392 + headers: { 393 + 'Content-Type': 'application/json', 394 + ...options.headers 395 + } 396 + }); 1036 397 1037 398 /** 1038 399 * Add an item to a list 1039 400 */ 1040 - export const listsControllerAddItemToList = < 1041 - ThrowOnError extends boolean = false, 1042 - >( 1043 - options: Options<ListsControllerAddItemToListData, ThrowOnError>, 1044 - ) => 1045 - (options.client ?? client).post< 1046 - ListsControllerAddItemToListResponses, 1047 - ListsControllerAddItemToListErrors, 1048 - ThrowOnError 1049 - >({ 1050 - url: "/lists/{slug}/items", 1051 - ...options, 1052 - headers: { 1053 - "Content-Type": "application/json", 1054 - ...options.headers, 1055 - }, 1056 - }); 401 + export const listsControllerAddItemToList = <ThrowOnError extends boolean = false>(options: Options<ListsControllerAddItemToListData, ThrowOnError>) => (options.client ?? client).post<ListsControllerAddItemToListResponses, ListsControllerAddItemToListErrors, ThrowOnError>({ 402 + url: '/lists/{slug}/items', 403 + ...options, 404 + headers: { 405 + 'Content-Type': 'application/json', 406 + ...options.headers 407 + } 408 + }); 1057 409 1058 410 /** 1059 411 * Remove an item from a list 1060 412 */ 1061 - export const listsControllerRemoveItemFromList = < 1062 - ThrowOnError extends boolean = false, 1063 - >( 1064 - options: Options<ListsControllerRemoveItemFromListData, ThrowOnError>, 1065 - ) => 1066 - (options.client ?? client).delete< 1067 - ListsControllerRemoveItemFromListResponses, 1068 - ListsControllerRemoveItemFromListErrors, 1069 - ThrowOnError 1070 - >({ url: "/lists/{slug}/items/{mediaType}/{mediaId}", ...options }); 413 + export const listsControllerRemoveItemFromList = <ThrowOnError extends boolean = false>(options: Options<ListsControllerRemoveItemFromListData, ThrowOnError>) => (options.client ?? client).delete<ListsControllerRemoveItemFromListResponses, ListsControllerRemoveItemFromListErrors, ThrowOnError>({ url: '/lists/{slug}/items/{mediaType}/{mediaId}', ...options }); 1071 414 1072 415 /** 1073 416 * Get all lists with membership status for an item 1074 417 */ 1075 - export const listsControllerGetListsForItem = < 1076 - ThrowOnError extends boolean = false, 1077 - >( 1078 - options: Options<ListsControllerGetListsForItemData, ThrowOnError>, 1079 - ) => 1080 - (options.client ?? client).get< 1081 - ListsControllerGetListsForItemResponses, 1082 - ListsControllerGetListsForItemErrors, 1083 - ThrowOnError 1084 - >({ url: "/lists/for-item/{mediaType}/{mediaId}", ...options }); 418 + export const listsControllerGetListsForItem = <ThrowOnError extends boolean = false>(options: Options<ListsControllerGetListsForItemData, ThrowOnError>) => (options.client ?? client).get<ListsControllerGetListsForItemResponses, ListsControllerGetListsForItemErrors, ThrowOnError>({ url: '/lists/for-item/{mediaType}/{mediaId}', ...options }); 1085 419 1086 420 /** 1087 421 * Search OpnShelf people by handle or display name 1088 422 */ 1089 - export const socialControllerSearchPeople = < 1090 - ThrowOnError extends boolean = false, 1091 - >( 1092 - options: Options<SocialControllerSearchPeopleData, ThrowOnError>, 1093 - ) => 1094 - (options.client ?? client).get< 1095 - SocialControllerSearchPeopleResponses, 1096 - unknown, 1097 - ThrowOnError 1098 - >({ url: "/social/search", ...options }); 423 + export const socialControllerSearchPeople = <ThrowOnError extends boolean = false>(options: Options<SocialControllerSearchPeopleData, ThrowOnError>) => (options.client ?? client).get<SocialControllerSearchPeopleResponses, unknown, ThrowOnError>({ url: '/social/search', ...options }); 1099 424 1100 425 /** 1101 426 * Unfollow an OpnShelf user 1102 427 */ 1103 - export const socialControllerUnfollow = <ThrowOnError extends boolean = false>( 1104 - options: Options<SocialControllerUnfollowData, ThrowOnError>, 1105 - ) => 1106 - (options.client ?? client).delete< 1107 - SocialControllerUnfollowResponses, 1108 - unknown, 1109 - ThrowOnError 1110 - >({ url: "/social/follows/{targetDid}", ...options }); 428 + export const socialControllerUnfollow = <ThrowOnError extends boolean = false>(options: Options<SocialControllerUnfollowData, ThrowOnError>) => (options.client ?? client).delete<SocialControllerUnfollowResponses, unknown, ThrowOnError>({ url: '/social/follows/{targetDid}', ...options }); 1111 429 1112 430 /** 1113 431 * Follow an OpnShelf user 1114 432 */ 1115 - export const socialControllerFollow = <ThrowOnError extends boolean = false>( 1116 - options: Options<SocialControllerFollowData, ThrowOnError>, 1117 - ) => 1118 - (options.client ?? client).post< 1119 - SocialControllerFollowResponses, 1120 - unknown, 1121 - ThrowOnError 1122 - >({ url: "/social/follows/{targetDid}", ...options }); 433 + export const socialControllerFollow = <ThrowOnError extends boolean = false>(options: Options<SocialControllerFollowData, ThrowOnError>) => (options.client ?? client).post<SocialControllerFollowResponses, unknown, ThrowOnError>({ url: '/social/follows/{targetDid}', ...options }); 1123 434 1124 435 /** 1125 436 * Get the viewer's relationship to a user 1126 437 */ 1127 - export const socialControllerGetRelationship = < 1128 - ThrowOnError extends boolean = false, 1129 - >( 1130 - options: Options<SocialControllerGetRelationshipData, ThrowOnError>, 1131 - ) => 1132 - (options.client ?? client).get< 1133 - SocialControllerGetRelationshipResponses, 1134 - unknown, 1135 - ThrowOnError 1136 - >({ url: "/social/relationship/{targetDid}", ...options }); 438 + export const socialControllerGetRelationship = <ThrowOnError extends boolean = false>(options: Options<SocialControllerGetRelationshipData, ThrowOnError>) => (options.client ?? client).get<SocialControllerGetRelationshipResponses, unknown, ThrowOnError>({ url: '/social/relationship/{targetDid}', ...options }); 1137 439 1138 440 /** 1139 441 * Get followers for a public profile 1140 442 */ 1141 - export const socialControllerGetFollowers = < 1142 - ThrowOnError extends boolean = false, 1143 - >( 1144 - options: Options<SocialControllerGetFollowersData, ThrowOnError>, 1145 - ) => 1146 - (options.client ?? client).get< 1147 - SocialControllerGetFollowersResponses, 1148 - unknown, 1149 - ThrowOnError 1150 - >({ url: "/social/profiles/{handle}/followers", ...options }); 443 + export const socialControllerGetFollowers = <ThrowOnError extends boolean = false>(options: Options<SocialControllerGetFollowersData, ThrowOnError>) => (options.client ?? client).get<SocialControllerGetFollowersResponses, unknown, ThrowOnError>({ url: '/social/profiles/{handle}/followers', ...options }); 1151 444 1152 445 /** 1153 446 * Get following for a public profile 1154 447 */ 1155 - export const socialControllerGetFollowing = < 1156 - ThrowOnError extends boolean = false, 1157 - >( 1158 - options: Options<SocialControllerGetFollowingData, ThrowOnError>, 1159 - ) => 1160 - (options.client ?? client).get< 1161 - SocialControllerGetFollowingResponses, 1162 - unknown, 1163 - ThrowOnError 1164 - >({ url: "/social/profiles/{handle}/following", ...options }); 448 + export const socialControllerGetFollowing = <ThrowOnError extends boolean = false>(options: Options<SocialControllerGetFollowingData, ThrowOnError>) => (options.client ?? client).get<SocialControllerGetFollowingResponses, unknown, ThrowOnError>({ url: '/social/profiles/{handle}/following', ...options }); 1165 449 1166 450 /** 1167 451 * Get recent watched activity from followed users 1168 452 */ 1169 - export const socialControllerGetFeed = <ThrowOnError extends boolean = false>( 1170 - options?: Options<SocialControllerGetFeedData, ThrowOnError>, 1171 - ) => 1172 - (options?.client ?? client).get< 1173 - SocialControllerGetFeedResponses, 1174 - unknown, 1175 - ThrowOnError 1176 - >({ url: "/social/feed", ...options }); 453 + export const socialControllerGetFeed = <ThrowOnError extends boolean = false>(options?: Options<SocialControllerGetFeedData, ThrowOnError>) => (options?.client ?? client).get<SocialControllerGetFeedResponses, unknown, ThrowOnError>({ url: '/social/feed', ...options }); 1177 454 1178 455 /** 1179 456 * Get followed users who watched a scoped movie, show, season, or episode 1180 457 */ 1181 - export const socialControllerGetWatchers = < 1182 - ThrowOnError extends boolean = false, 1183 - >( 1184 - options: Options<SocialControllerGetWatchersData, ThrowOnError>, 1185 - ) => 1186 - (options.client ?? client).get< 1187 - SocialControllerGetWatchersResponses, 1188 - unknown, 1189 - ThrowOnError 1190 - >({ url: "/social/watchers", ...options }); 458 + export const socialControllerGetWatchers = <ThrowOnError extends boolean = false>(options: Options<SocialControllerGetWatchersData, ThrowOnError>) => (options.client ?? client).get<SocialControllerGetWatchersResponses, unknown, ThrowOnError>({ url: '/social/watchers', ...options }); 1191 459 1192 460 /** 1193 461 * Get paginated shelf items for a user (movies and episodes) 1194 462 */ 1195 - export const shelfControllerGetUserShelf = < 1196 - ThrowOnError extends boolean = false, 1197 - >( 1198 - options: Options<ShelfControllerGetUserShelfData, ThrowOnError>, 1199 - ) => 1200 - (options.client ?? client).get< 1201 - ShelfControllerGetUserShelfResponses, 1202 - unknown, 1203 - ThrowOnError 1204 - >({ url: "/users/{userDid}/shelf", ...options }); 463 + export const shelfControllerGetUserShelf = <ThrowOnError extends boolean = false>(options: Options<ShelfControllerGetUserShelfData, ThrowOnError>) => (options.client ?? client).get<ShelfControllerGetUserShelfResponses, unknown, ThrowOnError>({ url: '/users/{userDid}/shelf', ...options }); 1205 464 1206 465 /** 1207 466 * Get timezone-aware activity summary for a user's dashboard 1208 467 */ 1209 - export const shelfControllerGetUserActivitySummary = < 1210 - ThrowOnError extends boolean = false, 1211 - >( 1212 - options: Options<ShelfControllerGetUserActivitySummaryData, ThrowOnError>, 1213 - ) => 1214 - (options.client ?? client).get< 1215 - ShelfControllerGetUserActivitySummaryResponses, 1216 - unknown, 1217 - ThrowOnError 1218 - >({ url: "/users/{userDid}/shelf/activity-summary", ...options }); 468 + export const shelfControllerGetUserActivitySummary = <ThrowOnError extends boolean = false>(options: Options<ShelfControllerGetUserActivitySummaryData, ThrowOnError>) => (options.client ?? client).get<ShelfControllerGetUserActivitySummaryResponses, unknown, ThrowOnError>({ url: '/users/{userDid}/shelf/activity-summary', ...options }); 1219 469 1220 470 /** 1221 471 * Search movies and shows from TMDB 1222 472 */ 1223 - export const searchControllerSearchAll = <ThrowOnError extends boolean = false>( 1224 - options: Options<SearchControllerSearchAllData, ThrowOnError>, 1225 - ) => 1226 - (options.client ?? client).get< 1227 - SearchControllerSearchAllResponses, 1228 - unknown, 1229 - ThrowOnError 1230 - >({ url: "/search/all", ...options }); 473 + export const searchControllerSearchAll = <ThrowOnError extends boolean = false>(options: Options<SearchControllerSearchAllData, ThrowOnError>) => (options.client ?? client).get<SearchControllerSearchAllResponses, unknown, ThrowOnError>({ url: '/search/all', ...options }); 1231 474 1232 475 /** 1233 476 * Discover popular movies and shows from TMDB 1234 477 */ 1235 - export const searchControllerDiscoverAll = < 1236 - ThrowOnError extends boolean = false, 1237 - >( 1238 - options?: Options<SearchControllerDiscoverAllData, ThrowOnError>, 1239 - ) => 1240 - (options?.client ?? client).get< 1241 - SearchControllerDiscoverAllResponses, 1242 - unknown, 1243 - ThrowOnError 1244 - >({ url: "/search/discover", ...options }); 478 + export const searchControllerDiscoverAll = <ThrowOnError extends boolean = false>(options?: Options<SearchControllerDiscoverAllData, ThrowOnError>) => (options?.client ?? client).get<SearchControllerDiscoverAllResponses, unknown, ThrowOnError>({ url: '/search/discover', ...options });
+1820 -1812
packages/api/src/generated/types.gen.ts
··· 1 1 // This file is auto-generated by @hey-api/openapi-ts 2 2 3 3 export type ClientOptions = { 4 - baseUrl: string; 4 + baseUrl: string; 5 5 }; 6 6 7 7 export type TmdbMovieResultDto = { 8 - id: number; 9 - title: string; 10 - poster_path?: string; 11 - backdrop_path?: string; 12 - release_date?: string; 13 - overview?: string; 8 + id: number; 9 + title: string; 10 + poster_path?: string; 11 + backdrop_path?: string; 12 + release_date?: string; 13 + overview?: string; 14 14 }; 15 15 16 16 export type SearchResultsDto = { 17 - results: Array<TmdbMovieResultDto>; 18 - total_results: number; 19 - page: number; 17 + results: Array<TmdbMovieResultDto>; 18 + total_results: number; 19 + page: number; 20 20 }; 21 21 22 22 export type TmdbGenreDto = { 23 - id: number; 24 - name: string; 23 + id: number; 24 + name: string; 25 25 }; 26 26 27 27 export type MovieColorsDto = { 28 - primary?: string; 29 - secondary?: string; 30 - accent?: string; 31 - muted?: string; 28 + primary?: string; 29 + secondary?: string; 30 + accent?: string; 31 + muted?: string; 32 32 }; 33 33 34 34 export type TmdbCastDto = { 35 - id: number; 36 - name: string; 37 - character?: string; 38 - profile_path?: string; 39 - order: number; 35 + id: number; 36 + name: string; 37 + character?: string; 38 + profile_path?: string; 39 + order: number; 40 40 }; 41 41 42 42 export type TmdbCrewDto = { 43 - id: number; 44 - name: string; 45 - job?: string; 46 - department?: string; 47 - profile_path?: string; 43 + id: number; 44 + name: string; 45 + job?: string; 46 + department?: string; 47 + profile_path?: string; 48 48 }; 49 49 50 50 export type TmdbCreditsDto = { 51 - cast: Array<TmdbCastDto>; 52 - crew: Array<TmdbCrewDto>; 51 + cast: Array<TmdbCastDto>; 52 + crew: Array<TmdbCrewDto>; 53 53 }; 54 54 55 55 export type TmdbTrailerDto = { 56 - id: string; 57 - key: string; 58 - name: string; 59 - site: string; 60 - type: string; 61 - official?: boolean; 62 - published_at?: string; 63 - sourceMediaType: "movie" | "show" | "season" | "episode"; 56 + id: string; 57 + key: string; 58 + name: string; 59 + site: string; 60 + type: string; 61 + official?: boolean; 62 + published_at?: string; 63 + sourceMediaType: 'movie' | 'show' | 'season' | 'episode'; 64 64 }; 65 65 66 66 export type TmdbMovieDetailDto = { 67 - id: number; 68 - title: string; 69 - poster_path?: string; 70 - backdrop_path?: string; 71 - release_date?: string; 72 - overview?: string; 73 - runtime?: number; 74 - vote_average?: number; 75 - vote_count?: number; 76 - genres?: Array<TmdbGenreDto>; 77 - colors?: MovieColorsDto; 78 - credits?: TmdbCreditsDto; 79 - trailer?: TmdbTrailerDto; 67 + id: number; 68 + title: string; 69 + poster_path?: string; 70 + backdrop_path?: string; 71 + release_date?: string; 72 + overview?: string; 73 + runtime?: number; 74 + vote_average?: number; 75 + vote_count?: number; 76 + genres?: Array<TmdbGenreDto>; 77 + colors?: MovieColorsDto; 78 + credits?: TmdbCreditsDto; 79 + trailer?: TmdbTrailerDto; 80 80 }; 81 81 82 82 export type MovieDto = { 83 - movieId: string; 84 - title: string; 85 - posterPath?: string; 86 - backdropPath?: string; 87 - releaseYear?: number; 88 - releaseDate?: string; 89 - overview?: string; 90 - colors?: MovieColorsDto; 83 + movieId: string; 84 + title: string; 85 + posterPath?: string; 86 + backdropPath?: string; 87 + releaseYear?: number; 88 + releaseDate?: string; 89 + overview?: string; 90 + colors?: MovieColorsDto; 91 91 }; 92 92 93 93 export type TrackedMovieDto = { 94 - id: string; 95 - rkey: string; 96 - uri: string; 97 - cid: string; 98 - userDid: string; 99 - movieId: string; 100 - status: string; 101 - watchedDate?: string; 102 - createdAt: string; 103 - updatedAt: string; 104 - movie: MovieDto; 94 + id: string; 95 + rkey: string; 96 + uri: string; 97 + cid: string; 98 + userDid: string; 99 + movieId: string; 100 + status: string; 101 + watchedDate?: string; 102 + createdAt: string; 103 + updatedAt: string; 104 + movie: MovieDto; 105 105 }; 106 106 107 107 export type PaginatedMoviesResponseDto = { 108 - items: Array<TrackedMovieDto>; 109 - /** 110 - * Cursor for next page (null if no more items) 111 - */ 112 - nextCursor: { 113 - [key: string]: unknown; 114 - }; 115 - /** 116 - * Total count of items 117 - */ 118 - total: number; 108 + items: Array<TrackedMovieDto>; 109 + /** 110 + * Cursor for next page (null if no more items) 111 + */ 112 + nextCursor: { 113 + [key: string]: unknown; 114 + }; 115 + /** 116 + * Total count of items 117 + */ 118 + total: number; 119 119 }; 120 120 121 121 export type WatchHistoryItemDto = { 122 - id: string; 123 - watchedDate: string; 122 + id: string; 123 + watchedDate: string; 124 124 }; 125 125 126 126 export type UserDto = { 127 - /** 128 - * User DID (decentralized identifier) 129 - */ 130 - did: string; 131 - /** 132 - * User handle (e.g., user.bsky.social) 133 - */ 134 - handle: string; 135 - /** 136 - * Display name 137 - */ 138 - displayName: string | null; 139 - /** 140 - * OpnShelf profile avatar URL 141 - */ 142 - avatar: string | null; 143 - /** 144 - * When onboarding was completed 145 - */ 146 - onboardingCompletedAt: string | null; 147 - /** 148 - * Whether this user should complete onboarding 149 - */ 150 - needsOnboarding: boolean; 127 + /** 128 + * User DID (decentralized identifier) 129 + */ 130 + did: string; 131 + /** 132 + * User handle (e.g., user.bsky.social) 133 + */ 134 + handle: string; 135 + /** 136 + * Display name 137 + */ 138 + displayName: string | null; 139 + /** 140 + * OpnShelf profile avatar URL 141 + */ 142 + avatar: string | null; 143 + /** 144 + * When onboarding was completed 145 + */ 146 + onboardingCompletedAt: string | null; 147 + /** 148 + * Whether this user should complete onboarding 149 + */ 150 + needsOnboarding: boolean; 151 151 }; 152 152 153 153 export type BlueskyProfileStatusDto = { 154 - /** 155 - * Whether this DID resolves to a real Bluesky/AppView profile 156 - */ 157 - hasBlueskyProfile: boolean; 154 + /** 155 + * Whether this DID resolves to a real Bluesky/AppView profile 156 + */ 157 + hasBlueskyProfile: boolean; 158 158 }; 159 159 160 160 export type TmdbShowResultDto = { 161 - id: number; 162 - name: string; 163 - poster_path?: string; 164 - backdrop_path?: string; 165 - first_air_date?: string; 166 - overview?: string; 161 + id: number; 162 + name: string; 163 + poster_path?: string; 164 + backdrop_path?: string; 165 + first_air_date?: string; 166 + overview?: string; 167 167 }; 168 168 169 169 export type SearchShowsResultsDto = { 170 - results: Array<TmdbShowResultDto>; 171 - total_results: number; 172 - page: number; 170 + results: Array<TmdbShowResultDto>; 171 + total_results: number; 172 + page: number; 173 173 }; 174 174 175 175 export type TmdbSeasonSummaryDto = { 176 - id: number; 177 - name: string; 178 - season_number: number; 179 - overview?: string; 180 - poster_path?: string; 181 - air_date?: string; 182 - episode_count?: number; 183 - vote_average?: number; 176 + id: number; 177 + name: string; 178 + season_number: number; 179 + overview?: string; 180 + poster_path?: string; 181 + air_date?: string; 182 + episode_count?: number; 183 + vote_average?: number; 184 184 }; 185 185 186 186 export type TmdbShowDetailDto = { 187 - id: number; 188 - name: string; 189 - poster_path?: string; 190 - backdrop_path?: string; 191 - first_air_date?: string; 192 - overview?: string; 193 - genres?: Array<TmdbGenreDto>; 194 - number_of_seasons?: number; 195 - number_of_episodes?: number; 196 - seasons?: Array<TmdbSeasonSummaryDto>; 197 - colors?: MovieColorsDto; 198 - credits?: TmdbCreditsDto; 199 - trailer?: TmdbTrailerDto; 187 + id: number; 188 + name: string; 189 + poster_path?: string; 190 + backdrop_path?: string; 191 + first_air_date?: string; 192 + overview?: string; 193 + genres?: Array<TmdbGenreDto>; 194 + number_of_seasons?: number; 195 + number_of_episodes?: number; 196 + seasons?: Array<TmdbSeasonSummaryDto>; 197 + colors?: MovieColorsDto; 198 + credits?: TmdbCreditsDto; 199 + trailer?: TmdbTrailerDto; 200 200 }; 201 201 202 202 export type TmdbNetworkDto = { 203 - id: number; 204 - name: string; 205 - logo_path?: string; 206 - origin_country?: string; 203 + id: number; 204 + name: string; 205 + logo_path?: string; 206 + origin_country?: string; 207 207 }; 208 208 209 209 export type EpisodeReferenceDto = { 210 - seasonNumber: number; 211 - episodeNumber: number; 210 + seasonNumber: number; 211 + episodeNumber: number; 212 212 }; 213 213 214 214 export type EpisodeContextDto = { 215 - previous?: EpisodeReferenceDto; 216 - next?: EpisodeReferenceDto; 215 + previous?: EpisodeReferenceDto; 216 + next?: EpisodeReferenceDto; 217 217 }; 218 218 219 219 export type TmdbEpisodeDto = { 220 - id: number; 221 - name: string; 222 - episode_number: number; 223 - season_number: number; 224 - air_date?: string; 225 - overview?: string; 226 - still_path?: string; 227 - vote_average?: number; 228 - vote_count?: number; 229 - runtime?: number; 230 - episode_type?: string; 231 - production_code?: string; 232 - show_id?: number; 233 - crew?: Array<TmdbCrewDto>; 234 - guest_stars?: Array<TmdbCastDto>; 235 - _context?: EpisodeContextDto; 236 - trailer?: TmdbTrailerDto; 220 + id: number; 221 + name: string; 222 + episode_number: number; 223 + season_number: number; 224 + air_date?: string; 225 + overview?: string; 226 + still_path?: string; 227 + vote_average?: number; 228 + vote_count?: number; 229 + runtime?: number; 230 + episode_type?: string; 231 + production_code?: string; 232 + show_id?: number; 233 + crew?: Array<TmdbCrewDto>; 234 + guest_stars?: Array<TmdbCastDto>; 235 + _context?: EpisodeContextDto; 236 + trailer?: TmdbTrailerDto; 237 237 }; 238 238 239 239 export type TmdbSeasonDetailDto = { 240 - id: number; 241 - _id?: string; 242 - name: string; 243 - season_number: number; 244 - overview?: string; 245 - poster_path?: string; 246 - air_date?: string; 247 - vote_average?: number; 248 - networks?: Array<TmdbNetworkDto>; 249 - episodes: Array<TmdbEpisodeDto>; 250 - trailer?: TmdbTrailerDto; 240 + id: number; 241 + _id?: string; 242 + name: string; 243 + season_number: number; 244 + overview?: string; 245 + poster_path?: string; 246 + air_date?: string; 247 + vote_average?: number; 248 + networks?: Array<TmdbNetworkDto>; 249 + episodes: Array<TmdbEpisodeDto>; 250 + trailer?: TmdbTrailerDto; 251 + }; 252 + 253 + export type LocalSeasonDto = { 254 + seasonNumber: number; 255 + name: string; 256 + posterPath?: { 257 + [key: string]: unknown; 258 + }; 259 + airDate?: { 260 + [key: string]: unknown; 261 + }; 262 + /** 263 + * Number of episodes stored locally 264 + */ 265 + episodeCount: number; 266 + }; 267 + 268 + export type LocalEpisodeDto = { 269 + episodeNumber: number; 270 + seasonNumber: number; 271 + name: string; 272 + airDate?: { 273 + [key: string]: unknown; 274 + }; 275 + overview?: { 276 + [key: string]: unknown; 277 + }; 278 + stillPath?: { 279 + [key: string]: unknown; 280 + }; 251 281 }; 252 282 253 283 export type ShowDto = { 254 - showId: string; 255 - title: string; 256 - posterPath?: string; 257 - backdropPath?: string; 258 - firstAirYear?: number; 259 - firstAirDate?: string; 260 - overview?: string; 261 - colors?: MovieColorsDto; 284 + showId: string; 285 + title: string; 286 + posterPath?: string; 287 + backdropPath?: string; 288 + firstAirYear?: number; 289 + firstAirDate?: string; 290 + overview?: string; 291 + colors?: MovieColorsDto; 262 292 }; 263 293 264 294 export type TrackedShowSummaryDto = { 265 - showId: string; 266 - watchCount: number; 267 - latestWatchedDate?: string; 268 - show: ShowDto; 295 + showId: string; 296 + watchCount: number; 297 + latestWatchedDate?: string; 298 + show: ShowDto; 269 299 }; 270 300 271 301 export type UpNextEpisodeDto = { 272 - seasonNumber: number; 273 - episodeNumber: number; 274 - name: string; 275 - airDate?: string; 276 - overview?: string; 277 - stillPath?: string; 302 + seasonNumber: number; 303 + episodeNumber: number; 304 + name: string; 305 + airDate?: string; 306 + overview?: string; 307 + stillPath?: string; 278 308 }; 279 309 280 310 export type UpNextShowDto = { 281 - showId: string; 282 - watchCount: number; 283 - latestWatchedDate: string; 284 - lastWatched: EpisodeReferenceDto; 285 - nextEpisode: UpNextEpisodeDto; 286 - show: ShowDto; 311 + showId: string; 312 + watchCount: number; 313 + /** 314 + * Total aired non-special episodes for the show 315 + */ 316 + totalEpisodes: number; 317 + /** 318 + * Distinct episodes the user has watched (non-special) 319 + */ 320 + episodesWatched: number; 321 + latestWatchedDate: string; 322 + lastWatched: EpisodeReferenceDto; 323 + nextEpisode: UpNextEpisodeDto; 324 + show: ShowDto; 287 325 }; 288 326 289 327 export type PaginatedUpNextResponseDto = { 290 - items: Array<UpNextShowDto>; 291 - /** 292 - * Total count of items 293 - */ 294 - total: number; 295 - /** 296 - * Current page number after server-side clamping 297 - */ 298 - page: number; 299 - /** 300 - * Number of items returned per page 301 - */ 302 - pageSize: number; 303 - /** 304 - * Total number of available pages 305 - */ 306 - totalPages: number; 307 - /** 308 - * Whether a previous page exists 309 - */ 310 - hasPreviousPage: boolean; 311 - /** 312 - * Whether a next page exists 313 - */ 314 - hasNextPage: boolean; 328 + items: Array<UpNextShowDto>; 329 + /** 330 + * Total count of items 331 + */ 332 + total: number; 333 + /** 334 + * Current page number after server-side clamping 335 + */ 336 + page: number; 337 + /** 338 + * Number of items returned per page 339 + */ 340 + pageSize: number; 341 + /** 342 + * Total number of available pages 343 + */ 344 + totalPages: number; 345 + /** 346 + * Whether a previous page exists 347 + */ 348 + hasPreviousPage: boolean; 349 + /** 350 + * Whether a next page exists 351 + */ 352 + hasNextPage: boolean; 315 353 }; 316 354 317 355 export type ReleaseCalendarItemDto = { 318 - source: "watching" | "watchlist"; 319 - mediaType: "movie" | "show"; 320 - releaseKind: "movie" | "show" | "episode"; 321 - /** 322 - * Upcoming release date 323 - */ 324 - releaseDate: string; 325 - title: string; 326 - subtitle?: string; 327 - overview?: string; 328 - posterPath?: string; 329 - backdropPath?: string; 330 - showId?: string; 331 - movieId?: string; 332 - seasonNumber?: number; 333 - episodeNumber?: number; 334 - colors?: MovieColorsDto; 356 + source: 'watching' | 'watchlist'; 357 + mediaType: 'movie' | 'show'; 358 + releaseKind: 'movie' | 'show' | 'episode'; 359 + /** 360 + * Upcoming release date 361 + */ 362 + releaseDate: string; 363 + title: string; 364 + subtitle?: string; 365 + overview?: string; 366 + posterPath?: string; 367 + backdropPath?: string; 368 + showId?: string; 369 + movieId?: string; 370 + seasonNumber?: number; 371 + episodeNumber?: number; 372 + colors?: MovieColorsDto; 335 373 }; 336 374 337 375 export type ReleaseCalendarResponseDto = { 338 - items: Array<ReleaseCalendarItemDto>; 339 - /** 340 - * Total count of upcoming release items 341 - */ 342 - total: number; 376 + items: Array<ReleaseCalendarItemDto>; 377 + /** 378 + * Total count of upcoming release items 379 + */ 380 + total: number; 343 381 }; 344 382 345 383 export type TrackedEpisodeDto = { 346 - id: string; 347 - rkey: string; 348 - uri: string; 349 - cid: string; 350 - userDid: string; 351 - showId: string; 352 - seasonNumber: number; 353 - episodeNumber: number; 354 - status: string; 355 - watchedDate?: string; 356 - createdAt: string; 357 - updatedAt: string; 358 - show: ShowDto; 384 + id: string; 385 + rkey: string; 386 + uri: string; 387 + cid: string; 388 + userDid: string; 389 + showId: string; 390 + seasonNumber: number; 391 + episodeNumber: number; 392 + status: string; 393 + watchedDate?: string; 394 + createdAt: string; 395 + updatedAt: string; 396 + show: ShowDto; 359 397 }; 360 398 361 399 export type PaginatedEpisodesResponseDto = { 362 - items: Array<TrackedEpisodeDto>; 363 - /** 364 - * Cursor for next page (null if no more items) 365 - */ 366 - nextCursor: { 367 - [key: string]: unknown; 368 - }; 369 - /** 370 - * Total count of items 371 - */ 372 - total: number; 400 + items: Array<TrackedEpisodeDto>; 401 + /** 402 + * Cursor for next page (null if no more items) 403 + */ 404 + nextCursor: { 405 + [key: string]: unknown; 406 + }; 407 + /** 408 + * Total count of items 409 + */ 410 + total: number; 373 411 }; 374 412 375 413 export type MarkEpisodeWatchedDto = { 376 - /** 377 - * TMDB show ID 378 - */ 379 - showId: string; 380 - /** 381 - * TMDB season number 382 - */ 383 - seasonNumber: number; 384 - /** 385 - * TMDB episode number 386 - */ 387 - episodeNumber: number; 388 - /** 389 - * Custom watch datetime (ISO 8601). If not provided, current time is used. 390 - */ 391 - watchedAt?: string; 414 + /** 415 + * TMDB show ID 416 + */ 417 + showId: string; 418 + /** 419 + * TMDB season number 420 + */ 421 + seasonNumber: number; 422 + /** 423 + * TMDB episode number 424 + */ 425 + episodeNumber: number; 426 + /** 427 + * Custom watch datetime (ISO 8601). If not provided, current time is used. 428 + */ 429 + watchedAt?: string; 392 430 }; 393 431 394 432 export type EpisodeHistoryItemDto = { 395 - id: string; 396 - watchedDate: string; 397 - seasonNumber: number; 398 - episodeNumber: number; 433 + id: string; 434 + watchedDate: string; 435 + seasonNumber: number; 436 + episodeNumber: number; 399 437 }; 400 438 401 439 export type MarkSeasonWatchedDto = { 402 - /** 403 - * TMDB show ID 404 - */ 405 - showId: string; 406 - /** 407 - * TMDB season number 408 - */ 409 - seasonNumber: number; 410 - /** 411 - * Custom watch datetime (ISO 8601). If not provided, current time is used. 412 - */ 413 - watchedAt?: string; 440 + /** 441 + * TMDB show ID 442 + */ 443 + showId: string; 444 + /** 445 + * TMDB season number 446 + */ 447 + seasonNumber: number; 448 + /** 449 + * Custom watch datetime (ISO 8601). If not provided, current time is used. 450 + */ 451 + watchedAt?: string; 414 452 }; 415 453 416 454 export type MarkedEpisodesResponseDto = { 417 - episodes: Array<TrackedEpisodeDto>; 418 - /** 419 - * Number of episodes marked as watched 420 - */ 421 - count: number; 455 + episodes: Array<TrackedEpisodeDto>; 456 + /** 457 + * Number of episodes marked as watched 458 + */ 459 + count: number; 422 460 }; 423 461 424 462 export type MarkShowWatchedDto = { 425 - /** 426 - * TMDB show ID 427 - */ 428 - showId: string; 429 - /** 430 - * Custom watch datetime (ISO 8601). If not provided, current time is used. 431 - */ 432 - watchedAt?: string; 463 + /** 464 + * TMDB show ID 465 + */ 466 + showId: string; 467 + /** 468 + * Custom watch datetime (ISO 8601). If not provided, current time is used. 469 + */ 470 + watchedAt?: string; 433 471 }; 434 472 435 473 export type PublicUserProfileDto = { 436 - /** 437 - * Stable DID for the user 438 - */ 439 - did: string; 440 - /** 441 - * AT Protocol handle 442 - */ 443 - handle: string; 444 - /** 445 - * Display name shown in OpnShelf 446 - */ 447 - displayName: string | null; 448 - /** 449 - * OpnShelf profile avatar URL 450 - */ 451 - avatar: string | null; 452 - /** 453 - * Public follower count 454 - */ 455 - followersCount: number; 456 - /** 457 - * Public following count 458 - */ 459 - followingCount: number; 474 + /** 475 + * Stable DID for the user 476 + */ 477 + did: string; 478 + /** 479 + * AT Protocol handle 480 + */ 481 + handle: string; 482 + /** 483 + * Display name shown in OpnShelf 484 + */ 485 + displayName: string | null; 486 + /** 487 + * OpnShelf profile avatar URL 488 + */ 489 + avatar: string | null; 490 + /** 491 + * Public follower count 492 + */ 493 + followersCount: number; 494 + /** 495 + * Public following count 496 + */ 497 + followingCount: number; 460 498 }; 461 499 462 500 export type UserSettingsDto = { 463 - /** 464 - * Time format preference 465 - */ 466 - timeFormat: "12h" | "24h"; 467 - /** 468 - * IANA timezone identifier (e.g., America/New_York) 469 - */ 470 - timezone: string; 501 + /** 502 + * Time format preference 503 + */ 504 + timeFormat: '12h' | '24h'; 505 + /** 506 + * IANA timezone identifier (e.g., America/New_York) 507 + */ 508 + timezone: string; 471 509 }; 472 510 473 511 export type UpdateUserSettingsDto = { 474 - /** 475 - * Time format preference 476 - */ 477 - timeFormat?: "12h" | "24h"; 478 - /** 479 - * IANA timezone identifier (e.g., America/New_York) 480 - */ 481 - timezone?: string; 512 + /** 513 + * Time format preference 514 + */ 515 + timeFormat?: '12h' | '24h'; 516 + /** 517 + * IANA timezone identifier (e.g., America/New_York) 518 + */ 519 + timezone?: string; 482 520 }; 483 521 484 522 export type UpdateUserProfileDto = { 485 - /** 486 - * Display name shown in OpnShelf 487 - */ 488 - displayName?: string; 523 + /** 524 + * Display name shown in OpnShelf 525 + */ 526 + displayName?: string; 489 527 }; 490 528 491 529 export type UserProfileDto = { 492 - /** 493 - * Display name shown in OpnShelf 494 - */ 495 - displayName: string | null; 496 - /** 497 - * OpnShelf profile avatar URL 498 - */ 499 - avatar: string | null; 530 + /** 531 + * Display name shown in OpnShelf 532 + */ 533 + displayName: string | null; 534 + /** 535 + * OpnShelf profile avatar URL 536 + */ 537 + avatar: string | null; 500 538 }; 501 539 502 540 export type DeleteUserAccountDto = { 503 - /** 504 - * Whether to delete the user's OpnShelf data from their PDS, including watch history, follows, lists, and list items. If false, the data remains on their PDS. 505 - */ 506 - deletePDSData: boolean; 541 + /** 542 + * Whether to delete the user's OpnShelf data from their PDS, including watch history, follows, lists, and list items. If false, the data remains on their PDS. 543 + */ 544 + deletePDSData: boolean; 507 545 }; 508 546 509 547 export type CompleteOnboardingResponseDto = { 510 - /** 511 - * Timestamp when onboarding was completed 512 - */ 513 - onboardingCompletedAt: string; 514 - needsOnboarding: boolean; 548 + /** 549 + * Timestamp when onboarding was completed 550 + */ 551 + onboardingCompletedAt: string; 552 + needsOnboarding: boolean; 515 553 }; 516 554 517 555 export type FetchTraktPublicHistoryDto = { 518 - /** 519 - * Trakt username or slug 520 - */ 521 - username: string; 522 - /** 523 - * Maximum items to fetch. If omitted, fetches full available history via pagination. 524 - */ 525 - maxItems?: number; 556 + /** 557 + * Trakt username or slug 558 + */ 559 + username: string; 560 + /** 561 + * Maximum items to fetch. If omitted, fetches full available history via pagination. 562 + */ 563 + maxItems?: number; 526 564 }; 527 565 528 566 export type TraktPublicProfileDto = { 529 - /** 530 - * Trakt username 531 - */ 532 - username: string; 533 - /** 534 - * Trakt profile slug 535 - */ 536 - slug: string; 537 - /** 538 - * Trakt display name 539 - */ 540 - name?: string; 541 - /** 542 - * Whether the profile is private 543 - */ 544 - isPrivate: boolean; 545 - /** 546 - * Whether the profile has Trakt VIP 547 - */ 548 - isVip: boolean; 549 - /** 550 - * Profile avatar URL 551 - */ 552 - avatarUrl?: string; 567 + /** 568 + * Trakt username 569 + */ 570 + username: string; 571 + /** 572 + * Trakt profile slug 573 + */ 574 + slug: string; 575 + /** 576 + * Trakt display name 577 + */ 578 + name?: string; 579 + /** 580 + * Whether the profile is private 581 + */ 582 + isPrivate: boolean; 583 + /** 584 + * Whether the profile has Trakt VIP 585 + */ 586 + isVip: boolean; 587 + /** 588 + * Profile avatar URL 589 + */ 590 + avatarUrl?: string; 553 591 }; 554 592 555 593 export type TraktHistoryPreviewItemDto = { 556 - type: "movie" | "episode"; 557 - /** 558 - * Primary display title for this watch item 559 - */ 560 - title: string; 561 - /** 562 - * Secondary context for this watch item 563 - */ 564 - subtitle?: string; 565 - /** 566 - * UTC datetime in ISO-8601 format 567 - */ 568 - watchedAt: string; 594 + type: 'movie' | 'episode'; 595 + /** 596 + * Primary display title for this watch item 597 + */ 598 + title: string; 599 + /** 600 + * Secondary context for this watch item 601 + */ 602 + subtitle?: string; 603 + /** 604 + * UTC datetime in ISO-8601 format 605 + */ 606 + watchedAt: string; 569 607 }; 570 608 571 609 export type NormalizedImportItemDto = { 572 - type: "movie" | "episode"; 573 - /** 574 - * UTC datetime in ISO-8601 format 575 - */ 576 - watchedAt: string; 577 - /** 578 - * TMDB movie id 579 - */ 580 - movieTmdbId?: number; 581 - /** 582 - * TMDB show id 583 - */ 584 - showTmdbId?: number; 585 - seasonNumber?: number; 586 - episodeNumber?: number; 587 - action?: "watch" | "scrobble" | "checkin"; 610 + type: 'movie' | 'episode'; 611 + /** 612 + * UTC datetime in ISO-8601 format 613 + */ 614 + watchedAt: string; 615 + /** 616 + * TMDB movie id 617 + */ 618 + movieTmdbId?: number; 619 + /** 620 + * TMDB show id 621 + */ 622 + showTmdbId?: number; 623 + seasonNumber?: number; 624 + episodeNumber?: number; 625 + action?: 'watch' | 'scrobble' | 'checkin'; 588 626 }; 589 627 590 628 export type ImportSkipDto = { 591 - /** 592 - * 1-based item index from source payload 593 - */ 594 - index: number; 595 - reason: 596 - | "unsupported_type" 597 - | "unsupported_action" 598 - | "missing_tmdb_id" 599 - | "missing_episode_ref" 600 - | "invalid_watched_at"; 601 - message?: string; 629 + /** 630 + * 1-based item index from source payload 631 + */ 632 + index: number; 633 + reason: 'unsupported_type' | 'unsupported_action' | 'missing_tmdb_id' | 'missing_episode_ref' | 'invalid_watched_at'; 634 + message?: string; 602 635 }; 603 636 604 637 export type FetchTraktPublicHistoryResponseDto = { 605 - profile: TraktPublicProfileDto; 606 - /** 607 - * Count of importable rows after normalization 608 - */ 609 - importableCount: number; 610 - previewItems: Array<TraktHistoryPreviewItemDto>; 611 - items: Array<NormalizedImportItemDto>; 612 - skipped: Array<ImportSkipDto>; 613 - /** 614 - * Count of rows returned by Trakt before filtering 615 - */ 616 - sourceCount: number; 638 + profile: TraktPublicProfileDto; 639 + /** 640 + * Count of importable rows after normalization 641 + */ 642 + importableCount: number; 643 + previewItems: Array<TraktHistoryPreviewItemDto>; 644 + items: Array<NormalizedImportItemDto>; 645 + skipped: Array<ImportSkipDto>; 646 + /** 647 + * Count of rows returned by Trakt before filtering 648 + */ 649 + sourceCount: number; 617 650 }; 618 651 619 652 export type StartTraktImportDto = { 620 - /** 621 - * Trakt username or slug 622 - */ 623 - username: string; 653 + /** 654 + * Trakt username or slug 655 + */ 656 + username: string; 624 657 }; 625 658 626 659 export type TraktImportJobDto = { 627 - id: string; 628 - traktUsername: string; 629 - status: "queued" | "running" | "waiting_retry" | "completed" | "failed"; 630 - currentPage: number; 631 - totalPages?: number; 632 - sourceCount: number; 633 - normalizedCount: number; 634 - importedCount: number; 635 - skippedCount: number; 636 - failedCount: number; 637 - nextRunAt: string; 638 - lastError?: string; 639 - profileUsername?: string; 640 - profileSlug?: string; 641 - profileName?: string; 642 - profileAvatarUrl?: string; 643 - startedAt?: string; 644 - completedAt?: string; 645 - createdAt: string; 646 - updatedAt: string; 660 + id: string; 661 + traktUsername: string; 662 + status: 'queued' | 'running' | 'waiting_retry' | 'completed' | 'failed'; 663 + currentPage: number; 664 + totalPages?: number; 665 + sourceCount: number; 666 + normalizedCount: number; 667 + importedCount: number; 668 + skippedCount: number; 669 + failedCount: number; 670 + nextRunAt: string; 671 + lastError?: string; 672 + profileUsername?: string; 673 + profileSlug?: string; 674 + profileName?: string; 675 + profileAvatarUrl?: string; 676 + startedAt?: string; 677 + completedAt?: string; 678 + createdAt: string; 679 + updatedAt: string; 647 680 }; 648 681 649 682 export type StartTraktImportResponseDto = { 650 - profile: TraktPublicProfileDto; 651 - previewItems: Array<TraktHistoryPreviewItemDto>; 652 - /** 653 - * Count of rows returned by Trakt for the preview page 654 - */ 655 - sourcePreviewCount: number; 656 - job: TraktImportJobDto; 683 + profile: TraktPublicProfileDto; 684 + previewItems: Array<TraktHistoryPreviewItemDto>; 685 + /** 686 + * Count of rows returned by Trakt for the preview page 687 + */ 688 + sourcePreviewCount: number; 689 + job: TraktImportJobDto; 657 690 }; 658 691 659 692 export type ImportBlueskyFollowsResponseDto = { 660 - /** 661 - * Total Bluesky follows scanned from AppView 662 - */ 663 - scannedCount: number; 664 - /** 665 - * How many Bluesky follows already have OpnShelf accounts 666 - */ 667 - matchedCount: number; 668 - /** 669 - * How many new OpnShelf follows were created 670 - */ 671 - createdCount: number; 672 - /** 673 - * How many matched users were already followed 674 - */ 675 - alreadyFollowingCount: number; 693 + /** 694 + * Total Bluesky follows scanned from AppView 695 + */ 696 + scannedCount: number; 697 + /** 698 + * How many Bluesky follows already have OpnShelf accounts 699 + */ 700 + matchedCount: number; 701 + /** 702 + * How many new OpnShelf follows were created 703 + */ 704 + createdCount: number; 705 + /** 706 + * How many matched users were already followed 707 + */ 708 + alreadyFollowingCount: number; 676 709 }; 677 710 678 711 export type ImportHistoryDto = { 679 - items: Array<NormalizedImportItemDto>; 712 + items: Array<NormalizedImportItemDto>; 680 713 }; 681 714 682 715 export type ImportErrorDto = { 683 - /** 684 - * 1-based item index from request payload 685 - */ 686 - index: number; 687 - code: 688 - | "invalid_item" 689 - | "already_exists" 690 - | "write_failed" 691 - | "duplicate_in_request"; 692 - message: string; 716 + /** 717 + * 1-based item index from request payload 718 + */ 719 + index: number; 720 + code: 'invalid_item' | 'already_exists' | 'write_failed' | 'duplicate_in_request'; 721 + message: string; 693 722 }; 694 723 695 724 export type ImportHistoryResponseDto = { 696 - imported: number; 697 - skipped: number; 698 - failed: number; 699 - errors: Array<ImportErrorDto>; 725 + imported: number; 726 + skipped: number; 727 + failed: number; 728 + errors: Array<ImportErrorDto>; 700 729 }; 701 730 702 731 export type ListSummaryDto = { 703 - id: string; 704 - rkey: string; 705 - name: string; 706 - description?: string; 707 - slug: string; 708 - isDefault: boolean; 709 - itemCount: number; 710 - createdAt: string; 711 - updatedAt: string; 732 + id: string; 733 + rkey: string; 734 + name: string; 735 + description?: string; 736 + slug: string; 737 + isDefault: boolean; 738 + itemCount: number; 739 + createdAt: string; 740 + updatedAt: string; 712 741 }; 713 742 714 743 export type CreateListDto = { 715 - /** 716 - * Name of the list 717 - */ 718 - name: string; 719 - /** 720 - * Description of the list 721 - */ 722 - description?: string; 744 + /** 745 + * Name of the list 746 + */ 747 + name: string; 748 + /** 749 + * Description of the list 750 + */ 751 + description?: string; 723 752 }; 724 753 725 754 export type MediaInListDto = { 726 - id: string; 727 - rkey: string; 728 - mediaType: string; 729 - mediaId: string; 730 - /** 731 - * Season number for season/episode show items 732 - */ 733 - seasonNumber?: number; 734 - /** 735 - * Episode number for episode show items 736 - */ 737 - episodeNumber?: number; 738 - notes?: string; 739 - position: number; 740 - createdAt: string; 741 - media: { 742 - [key: string]: unknown; 743 - }; 755 + id: string; 756 + rkey: string; 757 + mediaType: string; 758 + mediaId: string; 759 + /** 760 + * Season number for season/episode show items 761 + */ 762 + seasonNumber?: number; 763 + /** 764 + * Episode number for episode show items 765 + */ 766 + episodeNumber?: number; 767 + notes?: string; 768 + position: number; 769 + createdAt: string; 770 + media: { 771 + [key: string]: unknown; 772 + }; 744 773 }; 745 774 746 775 export type ListDto = { 747 - id: string; 748 - rkey: string; 749 - uri: string; 750 - userDid: string; 751 - name: string; 752 - description?: string; 753 - slug: string; 754 - isDefault: boolean; 755 - createdAt: string; 756 - updatedAt: string; 757 - items?: Array<MediaInListDto>; 776 + id: string; 777 + rkey: string; 778 + uri: string; 779 + userDid: string; 780 + name: string; 781 + description?: string; 782 + slug: string; 783 + isDefault: boolean; 784 + createdAt: string; 785 + updatedAt: string; 786 + items?: Array<MediaInListDto>; 758 787 }; 759 788 760 789 export type ListWithItemsDto = { 761 - id: string; 762 - rkey: string; 763 - uri: string; 764 - userDid: string; 765 - name: string; 766 - description?: string; 767 - slug: string; 768 - isDefault: boolean; 769 - createdAt: string; 770 - updatedAt: string; 771 - items: Array<MediaInListDto>; 772 - /** 773 - * Total count of items 774 - */ 775 - total: number; 776 - /** 777 - * Current page number after server-side clamping 778 - */ 779 - page: number; 780 - /** 781 - * Number of items returned per page 782 - */ 783 - pageSize: number; 784 - /** 785 - * Total number of available pages 786 - */ 787 - totalPages: number; 788 - /** 789 - * Whether a previous page exists 790 - */ 791 - hasPreviousPage: boolean; 792 - /** 793 - * Whether a next page exists 794 - */ 795 - hasNextPage: boolean; 790 + id: string; 791 + rkey: string; 792 + uri: string; 793 + userDid: string; 794 + name: string; 795 + description?: string; 796 + slug: string; 797 + isDefault: boolean; 798 + createdAt: string; 799 + updatedAt: string; 800 + items: Array<MediaInListDto>; 801 + /** 802 + * Total count of items 803 + */ 804 + total: number; 805 + /** 806 + * Current page number after server-side clamping 807 + */ 808 + page: number; 809 + /** 810 + * Number of items returned per page 811 + */ 812 + pageSize: number; 813 + /** 814 + * Total number of available pages 815 + */ 816 + totalPages: number; 817 + /** 818 + * Whether a previous page exists 819 + */ 820 + hasPreviousPage: boolean; 821 + /** 822 + * Whether a next page exists 823 + */ 824 + hasNextPage: boolean; 796 825 }; 797 826 798 827 export type UpdateListDto = { 799 - /** 800 - * Name of the list 801 - */ 802 - name?: string; 803 - /** 804 - * Description of the list 805 - */ 806 - description?: string; 828 + /** 829 + * Name of the list 830 + */ 831 + name?: string; 832 + /** 833 + * Description of the list 834 + */ 835 + description?: string; 807 836 }; 808 837 809 838 export type AddToListDto = { 810 - /** 811 - * Media type 812 - */ 813 - mediaType: "movie" | "show"; 814 - /** 815 - * TMDB media ID 816 - */ 817 - mediaId: string; 818 - /** 819 - * Optional notes about the media 820 - */ 821 - notes?: string; 839 + /** 840 + * Media type 841 + */ 842 + mediaType: 'movie' | 'show'; 843 + /** 844 + * TMDB media ID 845 + */ 846 + mediaId: string; 847 + /** 848 + * Optional notes about the media 849 + */ 850 + notes?: string; 822 851 }; 823 852 824 853 export type ListsForItemDto = { 825 - listId: string; 826 - listName: string; 827 - listSlug: string; 828 - isDefault: boolean; 829 - isInList: boolean; 854 + listId: string; 855 + listName: string; 856 + listSlug: string; 857 + isDefault: boolean; 858 + isInList: boolean; 830 859 }; 831 860 832 861 export type SocialUserCardDto = { 833 - did: string; 834 - handle: string; 835 - displayName?: { 836 - [key: string]: unknown; 837 - } | null; 838 - avatar?: { 839 - [key: string]: unknown; 840 - } | null; 841 - followersCount: number; 842 - followingCount: number; 843 - isFollowing: boolean; 844 - isFollowedBy: boolean; 862 + did: string; 863 + handle: string; 864 + displayName?: { 865 + [key: string]: unknown; 866 + } | null; 867 + avatar?: { 868 + [key: string]: unknown; 869 + } | null; 870 + followersCount: number; 871 + followingCount: number; 872 + isFollowing: boolean; 873 + isFollowedBy: boolean; 845 874 }; 846 875 847 876 export type PaginatedSocialUsersDto = { 848 - items: Array<SocialUserCardDto>; 849 - page: number; 850 - pageSize: number; 851 - total: number; 852 - totalPages: number; 853 - hasNextPage: boolean; 854 - hasPreviousPage: boolean; 877 + items: Array<SocialUserCardDto>; 878 + page: number; 879 + pageSize: number; 880 + total: number; 881 + totalPages: number; 882 + hasNextPage: boolean; 883 + hasPreviousPage: boolean; 855 884 }; 856 885 857 886 export type UserRelationshipDto = { 858 - targetDid: string; 859 - isFollowing: boolean; 860 - isFollowedBy: boolean; 861 - canFollow: boolean; 887 + targetDid: string; 888 + isFollowing: boolean; 889 + isFollowedBy: boolean; 890 + canFollow: boolean; 862 891 }; 863 892 864 893 export type SocialActorDto = { 865 - did: string; 866 - handle: string; 867 - displayName?: { 868 - [key: string]: unknown; 869 - } | null; 870 - avatar?: { 871 - [key: string]: unknown; 872 - } | null; 873 - followersCount: number; 874 - followingCount: number; 894 + did: string; 895 + handle: string; 896 + displayName?: { 897 + [key: string]: unknown; 898 + } | null; 899 + avatar?: { 900 + [key: string]: unknown; 901 + } | null; 902 + followersCount: number; 903 + followingCount: number; 875 904 }; 876 905 877 906 export type FollowedActivityItemDto = { 878 - actor: SocialActorDto; 879 - id: string; 880 - type: "movie" | "episode"; 881 - activityAt: string; 882 - movieId?: string; 883 - title?: string; 884 - showId?: string; 885 - showTitle?: string; 886 - seasonNumber?: number; 887 - episodeNumber?: number; 888 - posterPath?: string; 889 - backdropPath?: string; 890 - releaseYear?: number; 891 - firstAirYear?: number; 892 - overview?: string; 893 - colors?: MovieColorsDto; 894 - watchedDate?: string; 895 - createdAt: string; 907 + actor: SocialActorDto; 908 + id: string; 909 + type: 'movie' | 'episode'; 910 + activityAt: string; 911 + movieId?: string; 912 + title?: string; 913 + showId?: string; 914 + showTitle?: string; 915 + seasonNumber?: number; 916 + episodeNumber?: number; 917 + posterPath?: string; 918 + backdropPath?: string; 919 + releaseYear?: number; 920 + firstAirYear?: number; 921 + overview?: string; 922 + colors?: MovieColorsDto; 923 + watchedDate?: string; 924 + createdAt: string; 896 925 }; 897 926 898 927 export type FollowedActivityFeedDto = { 899 - items: Array<FollowedActivityItemDto>; 900 - page: number; 901 - pageSize: number; 902 - total: number; 903 - totalPages: number; 904 - hasNextPage: boolean; 905 - hasPreviousPage: boolean; 928 + items: Array<FollowedActivityItemDto>; 929 + page: number; 930 + pageSize: number; 931 + total: number; 932 + totalPages: number; 933 + hasNextPage: boolean; 934 + hasPreviousPage: boolean; 906 935 }; 907 936 908 937 export type FollowedWatcherActorDto = { 909 - did: string; 910 - handle: string; 911 - displayName?: string | null; 912 - avatar?: string | null; 938 + did: string; 939 + handle: string; 940 + displayName?: string | null; 941 + avatar?: string | null; 913 942 }; 914 943 915 944 export type FollowedWatcherDto = { 916 - actor: FollowedWatcherActorDto; 917 - activityAt: string; 945 + actor: FollowedWatcherActorDto; 946 + activityAt: string; 918 947 }; 919 948 920 949 export type FollowedWatchersDto = { 921 - items: Array<FollowedWatcherDto>; 922 - pageSize: number; 923 - total: number; 950 + items: Array<FollowedWatcherDto>; 951 + pageSize: number; 952 + total: number; 924 953 }; 925 954 926 955 export type ShelfResponseDto = { 927 - items: Array< 928 - | { 929 - id: string; 930 - type: "movie"; 931 - movieId: string; 932 - title: string; 933 - posterPath?: string; 934 - backdropPath?: string; 935 - releaseYear?: number; 936 - overview?: string; 937 - colors?: { 938 - [key: string]: unknown; 939 - }; 940 - watchedDate?: string; 941 - createdAt: string; 942 - } 943 - | { 944 - id: string; 945 - type: "episode"; 946 - showId: string; 947 - showTitle: string; 948 - seasonNumber: number; 949 - episodeNumber: number; 950 - posterPath?: string; 951 - backdropPath?: string; 952 - firstAirYear?: number; 953 - overview?: string; 954 - colors?: { 955 - [key: string]: unknown; 956 - }; 957 - watchedDate?: string; 958 - createdAt: string; 959 - } 960 - >; 961 - /** 962 - * Total count of items 963 - */ 964 - total: number; 965 - /** 966 - * Current page number after server-side clamping 967 - */ 968 - page: number; 969 - /** 970 - * Number of items returned per page 971 - */ 972 - pageSize: number; 973 - /** 974 - * Total number of available pages 975 - */ 976 - totalPages: number; 977 - /** 978 - * Whether a previous page exists 979 - */ 980 - hasPreviousPage: boolean; 981 - /** 982 - * Whether a next page exists 983 - */ 984 - hasNextPage: boolean; 956 + items: Array<{ 957 + id: string; 958 + type: 'movie'; 959 + movieId: string; 960 + title: string; 961 + posterPath?: string; 962 + backdropPath?: string; 963 + releaseYear?: number; 964 + overview?: string; 965 + colors?: { 966 + [key: string]: unknown; 967 + }; 968 + watchedDate?: string; 969 + createdAt: string; 970 + } | { 971 + id: string; 972 + type: 'episode'; 973 + showId: string; 974 + showTitle: string; 975 + seasonNumber: number; 976 + episodeNumber: number; 977 + posterPath?: string; 978 + backdropPath?: string; 979 + firstAirYear?: number; 980 + overview?: string; 981 + colors?: { 982 + [key: string]: unknown; 983 + }; 984 + watchedDate?: string; 985 + createdAt: string; 986 + }>; 987 + /** 988 + * Total count of items 989 + */ 990 + total: number; 991 + /** 992 + * Current page number after server-side clamping 993 + */ 994 + page: number; 995 + /** 996 + * Number of items returned per page 997 + */ 998 + pageSize: number; 999 + /** 1000 + * Total number of available pages 1001 + */ 1002 + totalPages: number; 1003 + /** 1004 + * Whether a previous page exists 1005 + */ 1006 + hasPreviousPage: boolean; 1007 + /** 1008 + * Whether a next page exists 1009 + */ 1010 + hasNextPage: boolean; 985 1011 }; 986 1012 987 1013 export type ShelfActivityBucketDto = { 988 - /** 989 - * Local day key in YYYY-MM-DD format 990 - */ 991 - date: string; 992 - /** 993 - * Number of items watched on that local day 994 - */ 995 - count: number; 1014 + /** 1015 + * Local day key in YYYY-MM-DD format 1016 + */ 1017 + date: string; 1018 + /** 1019 + * Number of items watched on that local day 1020 + */ 1021 + count: number; 996 1022 }; 997 1023 998 1024 export type ShelfActivitySummaryDto = { 999 - /** 1000 - * Total watched in the last 7 days 1001 - */ 1002 - watchedLast7Days: number; 1003 - /** 1004 - * Total watched in the last 30 days 1005 - */ 1006 - watchedLast30Days: number; 1007 - dailyActivity: Array<ShelfActivityBucketDto>; 1025 + /** 1026 + * Total watched in the last 7 days 1027 + */ 1028 + watchedLast7Days: number; 1029 + /** 1030 + * Total watched in the last 30 days 1031 + */ 1032 + watchedLast30Days: number; 1033 + dailyActivity: Array<ShelfActivityBucketDto>; 1008 1034 }; 1009 1035 1010 1036 export type UnifiedSearchResultDto = { 1011 - id: number; 1012 - media_type: "movie" | "tv"; 1013 - title?: string; 1014 - name?: string; 1015 - poster_path?: string; 1016 - backdrop_path?: string; 1017 - release_date?: string; 1018 - first_air_date?: string; 1019 - overview?: string; 1020 - popularity: number; 1021 - vote_average: number; 1022 - vote_count: number; 1023 - original_language?: string; 1024 - genre_ids?: Array<string>; 1025 - original_title?: string; 1026 - original_name?: string; 1027 - adult?: boolean; 1028 - video?: boolean; 1037 + id: number; 1038 + media_type: 'movie' | 'tv'; 1039 + title?: string; 1040 + name?: string; 1041 + poster_path?: string; 1042 + backdrop_path?: string; 1043 + release_date?: string; 1044 + first_air_date?: string; 1045 + overview?: string; 1046 + popularity: number; 1047 + vote_average: number; 1048 + vote_count: number; 1049 + original_language?: string; 1050 + genre_ids?: Array<string>; 1051 + original_title?: string; 1052 + original_name?: string; 1053 + adult?: boolean; 1054 + video?: boolean; 1029 1055 }; 1030 1056 1031 1057 export type UnifiedSearchResponseDto = { 1032 - results: Array<UnifiedSearchResultDto>; 1033 - total_results: number; 1034 - page: number; 1058 + results: Array<UnifiedSearchResultDto>; 1059 + total_results: number; 1060 + page: number; 1035 1061 }; 1036 1062 1037 1063 export type UnifiedDiscoverResponseDto = { 1038 - results: Array<UnifiedSearchResultDto>; 1039 - total_results: number; 1040 - page: number; 1064 + results: Array<UnifiedSearchResultDto>; 1065 + total_results: number; 1066 + page: number; 1041 1067 }; 1042 1068 1043 1069 export type MoviesControllerSearchMoviesData = { 1044 - body?: never; 1045 - path?: never; 1046 - query: { 1047 - /** 1048 - * Search term 1049 - */ 1050 - query: string; 1051 - }; 1052 - url: "/movies/search"; 1070 + body?: never; 1071 + path?: never; 1072 + query: { 1073 + /** 1074 + * Search term 1075 + */ 1076 + query: string; 1077 + }; 1078 + url: '/movies/search'; 1053 1079 }; 1054 1080 1055 1081 export type MoviesControllerSearchMoviesResponses = { 1056 - 200: SearchResultsDto; 1082 + 200: SearchResultsDto; 1057 1083 }; 1058 1084 1059 - export type MoviesControllerSearchMoviesResponse = 1060 - MoviesControllerSearchMoviesResponses[keyof MoviesControllerSearchMoviesResponses]; 1085 + export type MoviesControllerSearchMoviesResponse = MoviesControllerSearchMoviesResponses[keyof MoviesControllerSearchMoviesResponses]; 1061 1086 1062 1087 export type MoviesControllerDiscoverMoviesData = { 1063 - body?: never; 1064 - path?: never; 1065 - query?: never; 1066 - url: "/movies/discover"; 1088 + body?: never; 1089 + path?: never; 1090 + query?: never; 1091 + url: '/movies/discover'; 1067 1092 }; 1068 1093 1069 1094 export type MoviesControllerDiscoverMoviesResponses = { 1070 - 200: SearchResultsDto; 1095 + 200: SearchResultsDto; 1071 1096 }; 1072 1097 1073 - export type MoviesControllerDiscoverMoviesResponse = 1074 - MoviesControllerDiscoverMoviesResponses[keyof MoviesControllerDiscoverMoviesResponses]; 1098 + export type MoviesControllerDiscoverMoviesResponse = MoviesControllerDiscoverMoviesResponses[keyof MoviesControllerDiscoverMoviesResponses]; 1075 1099 1076 1100 export type MoviesControllerGetMovieDetailsData = { 1077 - body?: never; 1078 - path: { 1079 - movieId: string; 1080 - }; 1081 - query?: never; 1082 - url: "/movies/tmdb/{movieId}"; 1101 + body?: never; 1102 + path: { 1103 + movieId: string; 1104 + }; 1105 + query?: never; 1106 + url: '/movies/tmdb/{movieId}'; 1083 1107 }; 1084 1108 1085 1109 export type MoviesControllerGetMovieDetailsResponses = { 1086 - 200: TmdbMovieDetailDto; 1110 + 200: TmdbMovieDetailDto; 1087 1111 }; 1088 1112 1089 - export type MoviesControllerGetMovieDetailsResponse = 1090 - MoviesControllerGetMovieDetailsResponses[keyof MoviesControllerGetMovieDetailsResponses]; 1113 + export type MoviesControllerGetMovieDetailsResponse = MoviesControllerGetMovieDetailsResponses[keyof MoviesControllerGetMovieDetailsResponses]; 1091 1114 1092 1115 export type MoviesControllerGetUserMoviesData = { 1093 - body?: never; 1094 - path: { 1095 - userDid: string; 1096 - }; 1097 - query?: never; 1098 - url: "/movies/user/{userDid}"; 1116 + body?: never; 1117 + path: { 1118 + userDid: string; 1119 + }; 1120 + query?: never; 1121 + url: '/movies/user/{userDid}'; 1099 1122 }; 1100 1123 1101 1124 export type MoviesControllerGetUserMoviesResponses = { 1102 - 200: Array<TrackedMovieDto>; 1125 + 200: Array<TrackedMovieDto>; 1103 1126 }; 1104 1127 1105 - export type MoviesControllerGetUserMoviesResponse = 1106 - MoviesControllerGetUserMoviesResponses[keyof MoviesControllerGetUserMoviesResponses]; 1128 + export type MoviesControllerGetUserMoviesResponse = MoviesControllerGetUserMoviesResponses[keyof MoviesControllerGetUserMoviesResponses]; 1107 1129 1108 1130 export type MoviesControllerGetUserMoviesPaginatedData = { 1109 - body?: never; 1110 - path: { 1111 - userDid: string; 1112 - }; 1113 - query?: { 1114 - /** 1115 - * Number of items to return 1116 - */ 1117 - limit?: number; 1118 - /** 1119 - * Cursor for pagination (last item ID from previous page) 1120 - */ 1121 - cursor?: string; 1122 - }; 1123 - url: "/movies/user/{userDid}/paginated"; 1131 + body?: never; 1132 + path: { 1133 + userDid: string; 1134 + }; 1135 + query?: { 1136 + /** 1137 + * Number of items to return 1138 + */ 1139 + limit?: number; 1140 + /** 1141 + * Cursor for pagination (last item ID from previous page) 1142 + */ 1143 + cursor?: string; 1144 + }; 1145 + url: '/movies/user/{userDid}/paginated'; 1124 1146 }; 1125 1147 1126 1148 export type MoviesControllerGetUserMoviesPaginatedResponses = { 1127 - 200: PaginatedMoviesResponseDto; 1149 + 200: PaginatedMoviesResponseDto; 1128 1150 }; 1129 1151 1130 - export type MoviesControllerGetUserMoviesPaginatedResponse = 1131 - MoviesControllerGetUserMoviesPaginatedResponses[keyof MoviesControllerGetUserMoviesPaginatedResponses]; 1152 + export type MoviesControllerGetUserMoviesPaginatedResponse = MoviesControllerGetUserMoviesPaginatedResponses[keyof MoviesControllerGetUserMoviesPaginatedResponses]; 1132 1153 1133 1154 export type MoviesControllerMarkWatchedData = { 1134 - body: { 1135 - /** 1136 - * TMDB movie ID 1137 - */ 1138 - movieId: string; 1139 - /** 1140 - * Custom watch datetime (ISO 8601) 1141 - */ 1142 - watchedAt?: string; 1143 - }; 1144 - path?: never; 1145 - query?: never; 1146 - url: "/movies/watched"; 1155 + body: { 1156 + /** 1157 + * TMDB movie ID 1158 + */ 1159 + movieId: string; 1160 + /** 1161 + * Custom watch datetime (ISO 8601) 1162 + */ 1163 + watchedAt?: string; 1164 + }; 1165 + path?: never; 1166 + query?: never; 1167 + url: '/movies/watched'; 1147 1168 }; 1148 1169 1149 1170 export type MoviesControllerMarkWatchedErrors = { 1150 - /** 1151 - * Not authenticated 1152 - */ 1153 - 401: unknown; 1171 + /** 1172 + * Not authenticated 1173 + */ 1174 + 401: unknown; 1154 1175 }; 1155 1176 1156 1177 export type MoviesControllerMarkWatchedResponses = { 1157 - 201: TrackedMovieDto; 1178 + 201: TrackedMovieDto; 1158 1179 }; 1159 1180 1160 - export type MoviesControllerMarkWatchedResponse = 1161 - MoviesControllerMarkWatchedResponses[keyof MoviesControllerMarkWatchedResponses]; 1181 + export type MoviesControllerMarkWatchedResponse = MoviesControllerMarkWatchedResponses[keyof MoviesControllerMarkWatchedResponses]; 1162 1182 1163 1183 export type MoviesControllerUnmarkWatchedData = { 1164 - body?: never; 1165 - path: { 1166 - movieId: string; 1167 - }; 1168 - query?: { 1169 - /** 1170 - * Remove mode: latest (default) removes most recent watch, all removes all watches 1171 - */ 1172 - mode?: "latest" | "all"; 1173 - }; 1174 - url: "/movies/watched/{movieId}"; 1184 + body?: never; 1185 + path: { 1186 + movieId: string; 1187 + }; 1188 + query?: { 1189 + /** 1190 + * Remove mode: latest (default) removes most recent watch, all removes all watches 1191 + */ 1192 + mode?: 'latest' | 'all'; 1193 + }; 1194 + url: '/movies/watched/{movieId}'; 1175 1195 }; 1176 1196 1177 1197 export type MoviesControllerUnmarkWatchedErrors = { 1178 - /** 1179 - * Not authenticated 1180 - */ 1181 - 401: unknown; 1198 + /** 1199 + * Not authenticated 1200 + */ 1201 + 401: unknown; 1182 1202 }; 1183 1203 1184 1204 export type MoviesControllerUnmarkWatchedResponses = { 1185 - /** 1186 - * Movie unmarked as watched 1187 - */ 1188 - 204: void; 1205 + /** 1206 + * Movie unmarked as watched 1207 + */ 1208 + 204: void; 1189 1209 }; 1190 1210 1191 - export type MoviesControllerUnmarkWatchedResponse = 1192 - MoviesControllerUnmarkWatchedResponses[keyof MoviesControllerUnmarkWatchedResponses]; 1211 + export type MoviesControllerUnmarkWatchedResponse = MoviesControllerUnmarkWatchedResponses[keyof MoviesControllerUnmarkWatchedResponses]; 1193 1212 1194 1213 export type MoviesControllerGetMovieData = { 1195 - body?: never; 1196 - path: { 1197 - movieId: string; 1198 - }; 1199 - query?: never; 1200 - url: "/movies/{movieId}"; 1214 + body?: never; 1215 + path: { 1216 + movieId: string; 1217 + }; 1218 + query?: never; 1219 + url: '/movies/{movieId}'; 1201 1220 }; 1202 1221 1203 1222 export type MoviesControllerGetMovieResponses = { 1204 - 200: MovieDto; 1223 + 200: MovieDto; 1205 1224 }; 1206 1225 1207 - export type MoviesControllerGetMovieResponse = 1208 - MoviesControllerGetMovieResponses[keyof MoviesControllerGetMovieResponses]; 1226 + export type MoviesControllerGetMovieResponse = MoviesControllerGetMovieResponses[keyof MoviesControllerGetMovieResponses]; 1209 1227 1210 1228 export type MoviesControllerGetMovieWatchHistoryData = { 1211 - body?: never; 1212 - path: { 1213 - /** 1214 - * User DID 1215 - */ 1216 - userDid: string; 1217 - /** 1218 - * TMDB movie ID 1219 - */ 1220 - movieId: string; 1221 - }; 1222 - query?: never; 1223 - url: "/movies/user/{userDid}/movie/{movieId}/history"; 1229 + body?: never; 1230 + path: { 1231 + /** 1232 + * User DID 1233 + */ 1234 + userDid: string; 1235 + /** 1236 + * TMDB movie ID 1237 + */ 1238 + movieId: string; 1239 + }; 1240 + query?: never; 1241 + url: '/movies/user/{userDid}/movie/{movieId}/history'; 1224 1242 }; 1225 1243 1226 1244 export type MoviesControllerGetMovieWatchHistoryErrors = { 1227 - /** 1228 - * Not authenticated 1229 - */ 1230 - 401: unknown; 1245 + /** 1246 + * Not authenticated 1247 + */ 1248 + 401: unknown; 1231 1249 }; 1232 1250 1233 1251 export type MoviesControllerGetMovieWatchHistoryResponses = { 1234 - /** 1235 - * Watch history retrieved successfully 1236 - */ 1237 - 200: Array<WatchHistoryItemDto>; 1252 + /** 1253 + * Watch history retrieved successfully 1254 + */ 1255 + 200: Array<WatchHistoryItemDto>; 1238 1256 }; 1239 1257 1240 - export type MoviesControllerGetMovieWatchHistoryResponse = 1241 - MoviesControllerGetMovieWatchHistoryResponses[keyof MoviesControllerGetMovieWatchHistoryResponses]; 1258 + export type MoviesControllerGetMovieWatchHistoryResponse = MoviesControllerGetMovieWatchHistoryResponses[keyof MoviesControllerGetMovieWatchHistoryResponses]; 1242 1259 1243 1260 export type MoviesControllerDeleteWatchHistoryEntryData = { 1244 - body?: never; 1245 - path: { 1246 - /** 1247 - * Tracked movie entry ID 1248 - */ 1249 - trackedMovieId: string; 1250 - }; 1251 - query?: never; 1252 - url: "/movies/history/{trackedMovieId}"; 1261 + body?: never; 1262 + path: { 1263 + /** 1264 + * Tracked movie entry ID 1265 + */ 1266 + trackedMovieId: string; 1267 + }; 1268 + query?: never; 1269 + url: '/movies/history/{trackedMovieId}'; 1253 1270 }; 1254 1271 1255 1272 export type MoviesControllerDeleteWatchHistoryEntryErrors = { 1256 - /** 1257 - * Not authenticated 1258 - */ 1259 - 401: unknown; 1260 - /** 1261 - * Tracked movie entry not found 1262 - */ 1263 - 404: unknown; 1273 + /** 1274 + * Not authenticated 1275 + */ 1276 + 401: unknown; 1277 + /** 1278 + * Tracked movie entry not found 1279 + */ 1280 + 404: unknown; 1264 1281 }; 1265 1282 1266 1283 export type MoviesControllerDeleteWatchHistoryEntryResponses = { 1267 - /** 1268 - * Watch history entry deleted 1269 - */ 1270 - 204: void; 1284 + /** 1285 + * Watch history entry deleted 1286 + */ 1287 + 204: void; 1271 1288 }; 1272 1289 1273 - export type MoviesControllerDeleteWatchHistoryEntryResponse = 1274 - MoviesControllerDeleteWatchHistoryEntryResponses[keyof MoviesControllerDeleteWatchHistoryEntryResponses]; 1290 + export type MoviesControllerDeleteWatchHistoryEntryResponse = MoviesControllerDeleteWatchHistoryEntryResponses[keyof MoviesControllerDeleteWatchHistoryEntryResponses]; 1275 1291 1276 1292 export type AuthControllerGetClientMetadataData = { 1277 - body?: never; 1278 - path?: never; 1279 - query?: never; 1280 - url: "/.well-known/oauth-client-metadata.json"; 1293 + body?: never; 1294 + path?: never; 1295 + query?: never; 1296 + url: '/.well-known/oauth-client-metadata.json'; 1281 1297 }; 1282 1298 1283 1299 export type AuthControllerGetClientMetadataResponses = { 1284 - 200: unknown; 1300 + 200: unknown; 1285 1301 }; 1286 1302 1287 1303 export type AuthControllerLoginData = { 1288 - body?: never; 1289 - path?: never; 1290 - query: { 1291 - /** 1292 - * User's IANA timezone (e.g., Europe/London) 1293 - */ 1294 - timezone?: unknown; 1295 - /** 1296 - * Platform identifier (e.g., "mobile") for redirect handling 1297 - */ 1298 - platform?: unknown; 1299 - /** 1300 - * User handle (e.g., user.bsky.social or user.custompds.com) 1301 - */ 1302 - handle: unknown; 1303 - }; 1304 - url: "/auth/login"; 1304 + body?: never; 1305 + path?: never; 1306 + query: { 1307 + /** 1308 + * User's IANA timezone (e.g., Europe/London) 1309 + */ 1310 + timezone?: unknown; 1311 + /** 1312 + * Platform identifier (e.g., "mobile") for redirect handling 1313 + */ 1314 + platform?: unknown; 1315 + /** 1316 + * User handle (e.g., user.bsky.social or user.custompds.com) 1317 + */ 1318 + handle: unknown; 1319 + }; 1320 + url: '/auth/login'; 1305 1321 }; 1306 1322 1307 1323 export type AuthControllerSignupData = { 1308 - body?: never; 1309 - path?: never; 1310 - query?: { 1311 - /** 1312 - * User's IANA timezone (e.g., Europe/London) 1313 - */ 1314 - timezone?: unknown; 1315 - /** 1316 - * Platform identifier (e.g., "mobile") for redirect handling 1317 - */ 1318 - platform?: unknown; 1319 - }; 1320 - url: "/auth/signup"; 1324 + body?: never; 1325 + path?: never; 1326 + query?: { 1327 + /** 1328 + * User's IANA timezone (e.g., Europe/London) 1329 + */ 1330 + timezone?: unknown; 1331 + /** 1332 + * Platform identifier (e.g., "mobile") for redirect handling 1333 + */ 1334 + platform?: unknown; 1335 + }; 1336 + url: '/auth/signup'; 1321 1337 }; 1322 1338 1323 1339 export type AuthControllerSuggestionsData = { 1324 - body?: never; 1325 - path?: never; 1326 - query: { 1327 - /** 1328 - * Search query (handle prefix) 1329 - */ 1330 - q: unknown; 1331 - }; 1332 - url: "/auth/suggestions"; 1340 + body?: never; 1341 + path?: never; 1342 + query: { 1343 + /** 1344 + * Search query (handle prefix) 1345 + */ 1346 + q: unknown; 1347 + }; 1348 + url: '/auth/suggestions'; 1333 1349 }; 1334 1350 1335 1351 export type AuthControllerSuggestionsResponses = { 1336 - /** 1337 - * Array of actor suggestions 1338 - */ 1339 - 200: unknown; 1352 + /** 1353 + * Array of actor suggestions 1354 + */ 1355 + 200: unknown; 1340 1356 }; 1341 1357 1342 1358 export type AuthControllerCallbackData = { 1343 - body?: never; 1344 - path?: never; 1345 - query?: never; 1346 - url: "/auth/callback"; 1359 + body?: never; 1360 + path?: never; 1361 + query?: never; 1362 + url: '/auth/callback'; 1347 1363 }; 1348 1364 1349 1365 export type AuthControllerMeData = { 1350 - body?: never; 1351 - path?: never; 1352 - query?: never; 1353 - url: "/auth/me"; 1366 + body?: never; 1367 + path?: never; 1368 + query?: never; 1369 + url: '/auth/me'; 1354 1370 }; 1355 1371 1356 1372 export type AuthControllerMeErrors = { 1357 - /** 1358 - * Not authenticated 1359 - */ 1360 - 401: unknown; 1373 + /** 1374 + * Not authenticated 1375 + */ 1376 + 401: unknown; 1361 1377 }; 1362 1378 1363 1379 export type AuthControllerMeResponses = { 1364 - 200: UserDto; 1380 + 200: UserDto; 1365 1381 }; 1366 1382 1367 - export type AuthControllerMeResponse = 1368 - AuthControllerMeResponses[keyof AuthControllerMeResponses]; 1383 + export type AuthControllerMeResponse = AuthControllerMeResponses[keyof AuthControllerMeResponses]; 1369 1384 1370 1385 export type AuthControllerBlueskyProfileStatusData = { 1371 - body?: never; 1372 - path?: never; 1373 - query?: never; 1374 - url: "/auth/me/bluesky-profile-status"; 1386 + body?: never; 1387 + path?: never; 1388 + query?: never; 1389 + url: '/auth/me/bluesky-profile-status'; 1375 1390 }; 1376 1391 1377 1392 export type AuthControllerBlueskyProfileStatusErrors = { 1378 - /** 1379 - * Not authenticated 1380 - */ 1381 - 401: unknown; 1393 + /** 1394 + * Not authenticated 1395 + */ 1396 + 401: unknown; 1382 1397 }; 1383 1398 1384 1399 export type AuthControllerBlueskyProfileStatusResponses = { 1385 - 200: BlueskyProfileStatusDto; 1400 + 200: BlueskyProfileStatusDto; 1386 1401 }; 1387 1402 1388 - export type AuthControllerBlueskyProfileStatusResponse = 1389 - AuthControllerBlueskyProfileStatusResponses[keyof AuthControllerBlueskyProfileStatusResponses]; 1403 + export type AuthControllerBlueskyProfileStatusResponse = AuthControllerBlueskyProfileStatusResponses[keyof AuthControllerBlueskyProfileStatusResponses]; 1390 1404 1391 1405 export type AuthControllerLogoutData = { 1392 - body?: never; 1393 - path?: never; 1394 - query?: never; 1395 - url: "/auth/logout"; 1406 + body?: never; 1407 + path?: never; 1408 + query?: never; 1409 + url: '/auth/logout'; 1396 1410 }; 1397 1411 1398 1412 export type AuthControllerLogoutResponses = { 1399 - /** 1400 - * Logged out successfully 1401 - */ 1402 - 200: unknown; 1413 + /** 1414 + * Logged out successfully 1415 + */ 1416 + 200: unknown; 1403 1417 }; 1404 1418 1405 1419 export type ShowsControllerSearchShowsData = { 1406 - body?: never; 1407 - path?: never; 1408 - query: { 1409 - /** 1410 - * Search term 1411 - */ 1412 - query: string; 1413 - }; 1414 - url: "/shows/search"; 1420 + body?: never; 1421 + path?: never; 1422 + query: { 1423 + /** 1424 + * Search term 1425 + */ 1426 + query: string; 1427 + }; 1428 + url: '/shows/search'; 1415 1429 }; 1416 1430 1417 1431 export type ShowsControllerSearchShowsResponses = { 1418 - 200: SearchShowsResultsDto; 1432 + 200: SearchShowsResultsDto; 1419 1433 }; 1420 1434 1421 - export type ShowsControllerSearchShowsResponse = 1422 - ShowsControllerSearchShowsResponses[keyof ShowsControllerSearchShowsResponses]; 1435 + export type ShowsControllerSearchShowsResponse = ShowsControllerSearchShowsResponses[keyof ShowsControllerSearchShowsResponses]; 1423 1436 1424 1437 export type ShowsControllerDiscoverShowsData = { 1425 - body?: never; 1426 - path?: never; 1427 - query?: never; 1428 - url: "/shows/discover"; 1438 + body?: never; 1439 + path?: never; 1440 + query?: never; 1441 + url: '/shows/discover'; 1429 1442 }; 1430 1443 1431 1444 export type ShowsControllerDiscoverShowsResponses = { 1432 - 200: SearchShowsResultsDto; 1445 + 200: SearchShowsResultsDto; 1433 1446 }; 1434 1447 1435 - export type ShowsControllerDiscoverShowsResponse = 1436 - ShowsControllerDiscoverShowsResponses[keyof ShowsControllerDiscoverShowsResponses]; 1448 + export type ShowsControllerDiscoverShowsResponse = ShowsControllerDiscoverShowsResponses[keyof ShowsControllerDiscoverShowsResponses]; 1437 1449 1438 1450 export type ShowsControllerGetShowDetailsData = { 1439 - body?: never; 1440 - path: { 1441 - showId: string; 1442 - }; 1443 - query?: never; 1444 - url: "/shows/tmdb/{showId}"; 1451 + body?: never; 1452 + path: { 1453 + showId: string; 1454 + }; 1455 + query?: never; 1456 + url: '/shows/tmdb/{showId}'; 1445 1457 }; 1446 1458 1447 1459 export type ShowsControllerGetShowDetailsResponses = { 1448 - 200: TmdbShowDetailDto; 1460 + 200: TmdbShowDetailDto; 1449 1461 }; 1450 1462 1451 - export type ShowsControllerGetShowDetailsResponse = 1452 - ShowsControllerGetShowDetailsResponses[keyof ShowsControllerGetShowDetailsResponses]; 1463 + export type ShowsControllerGetShowDetailsResponse = ShowsControllerGetShowDetailsResponses[keyof ShowsControllerGetShowDetailsResponses]; 1453 1464 1454 1465 export type ShowsControllerGetSeasonDetailsData = { 1455 - body?: never; 1456 - path: { 1457 - showId: string; 1458 - seasonNumber: string; 1459 - }; 1460 - query?: never; 1461 - url: "/shows/tmdb/{showId}/season/{seasonNumber}"; 1466 + body?: never; 1467 + path: { 1468 + showId: string; 1469 + seasonNumber: string; 1470 + }; 1471 + query?: never; 1472 + url: '/shows/tmdb/{showId}/season/{seasonNumber}'; 1462 1473 }; 1463 1474 1464 1475 export type ShowsControllerGetSeasonDetailsResponses = { 1465 - 200: TmdbSeasonDetailDto; 1476 + 200: TmdbSeasonDetailDto; 1477 + }; 1478 + 1479 + export type ShowsControllerGetSeasonDetailsResponse = ShowsControllerGetSeasonDetailsResponses[keyof ShowsControllerGetSeasonDetailsResponses]; 1480 + 1481 + export type ShowsControllerGetLocalSeasonsData = { 1482 + body?: never; 1483 + path: { 1484 + showId: string; 1485 + }; 1486 + query?: never; 1487 + url: '/shows/tmdb/{showId}/local-seasons'; 1488 + }; 1489 + 1490 + export type ShowsControllerGetLocalSeasonsResponses = { 1491 + 200: Array<LocalSeasonDto>; 1492 + }; 1493 + 1494 + export type ShowsControllerGetLocalSeasonsResponse = ShowsControllerGetLocalSeasonsResponses[keyof ShowsControllerGetLocalSeasonsResponses]; 1495 + 1496 + export type ShowsControllerGetLocalEpisodesData = { 1497 + body?: never; 1498 + path: { 1499 + showId: string; 1500 + seasonNumber: string; 1501 + }; 1502 + query?: never; 1503 + url: '/shows/tmdb/{showId}/season/{seasonNumber}/local-episodes'; 1504 + }; 1505 + 1506 + export type ShowsControllerGetLocalEpisodesResponses = { 1507 + 200: Array<LocalEpisodeDto>; 1466 1508 }; 1467 1509 1468 - export type ShowsControllerGetSeasonDetailsResponse = 1469 - ShowsControllerGetSeasonDetailsResponses[keyof ShowsControllerGetSeasonDetailsResponses]; 1510 + export type ShowsControllerGetLocalEpisodesResponse = ShowsControllerGetLocalEpisodesResponses[keyof ShowsControllerGetLocalEpisodesResponses]; 1470 1511 1471 1512 export type ShowsControllerGetEpisodeDetailsData = { 1472 - body?: never; 1473 - path: { 1474 - showId: string; 1475 - seasonNumber: string; 1476 - episodeNumber: string; 1477 - }; 1478 - query?: never; 1479 - url: "/shows/tmdb/{showId}/season/{seasonNumber}/episode/{episodeNumber}"; 1513 + body?: never; 1514 + path: { 1515 + showId: string; 1516 + seasonNumber: string; 1517 + episodeNumber: string; 1518 + }; 1519 + query?: never; 1520 + url: '/shows/tmdb/{showId}/season/{seasonNumber}/episode/{episodeNumber}'; 1480 1521 }; 1481 1522 1482 1523 export type ShowsControllerGetEpisodeDetailsResponses = { 1483 - 200: TmdbEpisodeDto; 1524 + 200: TmdbEpisodeDto; 1484 1525 }; 1485 1526 1486 - export type ShowsControllerGetEpisodeDetailsResponse = 1487 - ShowsControllerGetEpisodeDetailsResponses[keyof ShowsControllerGetEpisodeDetailsResponses]; 1527 + export type ShowsControllerGetEpisodeDetailsResponse = ShowsControllerGetEpisodeDetailsResponses[keyof ShowsControllerGetEpisodeDetailsResponses]; 1488 1528 1489 1529 export type ShowsControllerGetUserShowsData = { 1490 - body?: never; 1491 - path: { 1492 - userDid: string; 1493 - }; 1494 - query?: never; 1495 - url: "/shows/user/{userDid}"; 1530 + body?: never; 1531 + path: { 1532 + userDid: string; 1533 + }; 1534 + query?: never; 1535 + url: '/shows/user/{userDid}'; 1496 1536 }; 1497 1537 1498 1538 export type ShowsControllerGetUserShowsResponses = { 1499 - 200: Array<TrackedShowSummaryDto>; 1539 + 200: Array<TrackedShowSummaryDto>; 1500 1540 }; 1501 1541 1502 - export type ShowsControllerGetUserShowsResponse = 1503 - ShowsControllerGetUserShowsResponses[keyof ShowsControllerGetUserShowsResponses]; 1542 + export type ShowsControllerGetUserShowsResponse = ShowsControllerGetUserShowsResponses[keyof ShowsControllerGetUserShowsResponses]; 1504 1543 1505 1544 export type ShowsControllerGetUserUpNextData = { 1506 - body?: never; 1507 - path: { 1508 - userDid: string; 1509 - }; 1510 - query?: { 1511 - /** 1512 - * Page number to return 1513 - */ 1514 - page?: number; 1515 - /** 1516 - * Number of items to return per page 1517 - */ 1518 - pageSize?: number; 1519 - }; 1520 - url: "/shows/user/{userDid}/up-next"; 1545 + body?: never; 1546 + path: { 1547 + userDid: string; 1548 + }; 1549 + query?: { 1550 + /** 1551 + * Page number to return 1552 + */ 1553 + page?: number; 1554 + /** 1555 + * Number of items to return per page 1556 + */ 1557 + pageSize?: number; 1558 + /** 1559 + * Sort field 1560 + */ 1561 + sortBy?: 'lastWatched' | 'title' | 'progress'; 1562 + /** 1563 + * Sort direction 1564 + */ 1565 + sortOrder?: 'asc' | 'desc'; 1566 + }; 1567 + url: '/shows/user/{userDid}/up-next'; 1521 1568 }; 1522 1569 1523 1570 export type ShowsControllerGetUserUpNextResponses = { 1524 - 200: PaginatedUpNextResponseDto; 1571 + 200: PaginatedUpNextResponseDto; 1525 1572 }; 1526 1573 1527 - export type ShowsControllerGetUserUpNextResponse = 1528 - ShowsControllerGetUserUpNextResponses[keyof ShowsControllerGetUserUpNextResponses]; 1574 + export type ShowsControllerGetUserUpNextResponse = ShowsControllerGetUserUpNextResponses[keyof ShowsControllerGetUserUpNextResponses]; 1529 1575 1530 1576 export type ShowsControllerGetUserReleaseCalendarData = { 1531 - body?: never; 1532 - path: { 1533 - userDid: string; 1534 - }; 1535 - query?: never; 1536 - url: "/shows/user/{userDid}/release-calendar"; 1577 + body?: never; 1578 + path: { 1579 + userDid: string; 1580 + }; 1581 + query?: never; 1582 + url: '/shows/user/{userDid}/release-calendar'; 1537 1583 }; 1538 1584 1539 1585 export type ShowsControllerGetUserReleaseCalendarResponses = { 1540 - 200: ReleaseCalendarResponseDto; 1586 + 200: ReleaseCalendarResponseDto; 1541 1587 }; 1542 1588 1543 - export type ShowsControllerGetUserReleaseCalendarResponse = 1544 - ShowsControllerGetUserReleaseCalendarResponses[keyof ShowsControllerGetUserReleaseCalendarResponses]; 1589 + export type ShowsControllerGetUserReleaseCalendarResponse = ShowsControllerGetUserReleaseCalendarResponses[keyof ShowsControllerGetUserReleaseCalendarResponses]; 1545 1590 1546 1591 export type ShowsControllerGetUserEpisodesPaginatedData = { 1547 - body?: never; 1548 - path: { 1549 - userDid: string; 1550 - }; 1551 - query?: { 1552 - /** 1553 - * Number of items to return 1554 - */ 1555 - limit?: number; 1556 - /** 1557 - * Cursor for pagination (last item ID from previous page) 1558 - */ 1559 - cursor?: string; 1560 - }; 1561 - url: "/shows/user/{userDid}/episodes"; 1592 + body?: never; 1593 + path: { 1594 + userDid: string; 1595 + }; 1596 + query?: { 1597 + /** 1598 + * Number of items to return 1599 + */ 1600 + limit?: number; 1601 + /** 1602 + * Cursor for pagination (last item ID from previous page) 1603 + */ 1604 + cursor?: string; 1605 + }; 1606 + url: '/shows/user/{userDid}/episodes'; 1562 1607 }; 1563 1608 1564 1609 export type ShowsControllerGetUserEpisodesPaginatedResponses = { 1565 - 200: PaginatedEpisodesResponseDto; 1610 + 200: PaginatedEpisodesResponseDto; 1566 1611 }; 1567 1612 1568 - export type ShowsControllerGetUserEpisodesPaginatedResponse = 1569 - ShowsControllerGetUserEpisodesPaginatedResponses[keyof ShowsControllerGetUserEpisodesPaginatedResponses]; 1613 + export type ShowsControllerGetUserEpisodesPaginatedResponse = ShowsControllerGetUserEpisodesPaginatedResponses[keyof ShowsControllerGetUserEpisodesPaginatedResponses]; 1570 1614 1571 1615 export type ShowsControllerMarkWatchedData = { 1572 - body: MarkEpisodeWatchedDto; 1573 - path?: never; 1574 - query?: never; 1575 - url: "/shows/watched"; 1616 + body: MarkEpisodeWatchedDto; 1617 + path?: never; 1618 + query?: never; 1619 + url: '/shows/watched'; 1576 1620 }; 1577 1621 1578 1622 export type ShowsControllerMarkWatchedErrors = { 1579 - /** 1580 - * Not authenticated 1581 - */ 1582 - 401: unknown; 1623 + /** 1624 + * Not authenticated 1625 + */ 1626 + 401: unknown; 1583 1627 }; 1584 1628 1585 1629 export type ShowsControllerMarkWatchedResponses = { 1586 - 201: TrackedEpisodeDto; 1630 + 201: TrackedEpisodeDto; 1587 1631 }; 1588 1632 1589 - export type ShowsControllerMarkWatchedResponse = 1590 - ShowsControllerMarkWatchedResponses[keyof ShowsControllerMarkWatchedResponses]; 1633 + export type ShowsControllerMarkWatchedResponse = ShowsControllerMarkWatchedResponses[keyof ShowsControllerMarkWatchedResponses]; 1591 1634 1592 1635 export type ShowsControllerUnmarkWatchedData = { 1593 - body?: never; 1594 - path: { 1595 - showId: string; 1596 - }; 1597 - query?: { 1598 - /** 1599 - * Remove mode: latest (default) removes most recent, all removes all 1600 - */ 1601 - mode?: "latest" | "all"; 1602 - /** 1603 - * Optional filter by episode 1604 - */ 1605 - episodeNumber?: unknown; 1606 - /** 1607 - * Optional filter by season 1608 - */ 1609 - seasonNumber?: unknown; 1610 - }; 1611 - url: "/shows/watched/{showId}"; 1636 + body?: never; 1637 + path: { 1638 + showId: string; 1639 + }; 1640 + query?: { 1641 + /** 1642 + * Remove mode: latest (default) removes most recent, all removes all 1643 + */ 1644 + mode?: 'latest' | 'all'; 1645 + /** 1646 + * Optional filter by episode 1647 + */ 1648 + episodeNumber?: unknown; 1649 + /** 1650 + * Optional filter by season 1651 + */ 1652 + seasonNumber?: unknown; 1653 + }; 1654 + url: '/shows/watched/{showId}'; 1612 1655 }; 1613 1656 1614 1657 export type ShowsControllerUnmarkWatchedResponses = { 1615 - /** 1616 - * Episode unmarked as watched 1617 - */ 1618 - 204: void; 1658 + /** 1659 + * Episode unmarked as watched 1660 + */ 1661 + 204: void; 1619 1662 }; 1620 1663 1621 - export type ShowsControllerUnmarkWatchedResponse = 1622 - ShowsControllerUnmarkWatchedResponses[keyof ShowsControllerUnmarkWatchedResponses]; 1664 + export type ShowsControllerUnmarkWatchedResponse = ShowsControllerUnmarkWatchedResponses[keyof ShowsControllerUnmarkWatchedResponses]; 1623 1665 1624 1666 export type ShowsControllerGetShowData = { 1625 - body?: never; 1626 - path: { 1627 - showId: string; 1628 - }; 1629 - query?: never; 1630 - url: "/shows/{showId}"; 1667 + body?: never; 1668 + path: { 1669 + showId: string; 1670 + }; 1671 + query?: never; 1672 + url: '/shows/{showId}'; 1631 1673 }; 1632 1674 1633 1675 export type ShowsControllerGetShowResponses = { 1634 - 200: TrackedShowSummaryDto; 1676 + 200: TrackedShowSummaryDto; 1635 1677 }; 1636 1678 1637 - export type ShowsControllerGetShowResponse = 1638 - ShowsControllerGetShowResponses[keyof ShowsControllerGetShowResponses]; 1679 + export type ShowsControllerGetShowResponse = ShowsControllerGetShowResponses[keyof ShowsControllerGetShowResponses]; 1639 1680 1640 1681 export type ShowsControllerGetShowWatchHistoryData = { 1641 - body?: never; 1642 - path: { 1643 - /** 1644 - * User DID 1645 - */ 1646 - userDid: string; 1647 - /** 1648 - * TMDB show ID 1649 - */ 1650 - showId: string; 1651 - }; 1652 - query?: never; 1653 - url: "/shows/user/{userDid}/show/{showId}/history"; 1682 + body?: never; 1683 + path: { 1684 + /** 1685 + * User DID 1686 + */ 1687 + userDid: string; 1688 + /** 1689 + * TMDB show ID 1690 + */ 1691 + showId: string; 1692 + }; 1693 + query?: never; 1694 + url: '/shows/user/{userDid}/show/{showId}/history'; 1654 1695 }; 1655 1696 1656 1697 export type ShowsControllerGetShowWatchHistoryErrors = { 1657 - /** 1658 - * Not authenticated 1659 - */ 1660 - 401: unknown; 1698 + /** 1699 + * Not authenticated 1700 + */ 1701 + 401: unknown; 1661 1702 }; 1662 1703 1663 1704 export type ShowsControllerGetShowWatchHistoryResponses = { 1664 - /** 1665 - * Watch history retrieved successfully 1666 - */ 1667 - 200: Array<EpisodeHistoryItemDto>; 1705 + /** 1706 + * Watch history retrieved successfully 1707 + */ 1708 + 200: Array<EpisodeHistoryItemDto>; 1668 1709 }; 1669 1710 1670 - export type ShowsControllerGetShowWatchHistoryResponse = 1671 - ShowsControllerGetShowWatchHistoryResponses[keyof ShowsControllerGetShowWatchHistoryResponses]; 1711 + export type ShowsControllerGetShowWatchHistoryResponse = ShowsControllerGetShowWatchHistoryResponses[keyof ShowsControllerGetShowWatchHistoryResponses]; 1672 1712 1673 1713 export type ShowsControllerDeleteEpisodeWatchHistoryEntryData = { 1674 - body?: never; 1675 - path: { 1676 - /** 1677 - * Tracked episode entry ID 1678 - */ 1679 - trackedEpisodeId: string; 1680 - }; 1681 - query?: never; 1682 - url: "/shows/history/{trackedEpisodeId}"; 1714 + body?: never; 1715 + path: { 1716 + /** 1717 + * Tracked episode entry ID 1718 + */ 1719 + trackedEpisodeId: string; 1720 + }; 1721 + query?: never; 1722 + url: '/shows/history/{trackedEpisodeId}'; 1683 1723 }; 1684 1724 1685 1725 export type ShowsControllerDeleteEpisodeWatchHistoryEntryErrors = { 1686 - /** 1687 - * Not authenticated 1688 - */ 1689 - 401: unknown; 1690 - /** 1691 - * Tracked episode entry not found 1692 - */ 1693 - 404: unknown; 1726 + /** 1727 + * Not authenticated 1728 + */ 1729 + 401: unknown; 1730 + /** 1731 + * Tracked episode entry not found 1732 + */ 1733 + 404: unknown; 1694 1734 }; 1695 1735 1696 1736 export type ShowsControllerDeleteEpisodeWatchHistoryEntryResponses = { 1697 - /** 1698 - * Watch history entry deleted 1699 - */ 1700 - 204: void; 1737 + /** 1738 + * Watch history entry deleted 1739 + */ 1740 + 204: void; 1701 1741 }; 1702 1742 1703 - export type ShowsControllerDeleteEpisodeWatchHistoryEntryResponse = 1704 - ShowsControllerDeleteEpisodeWatchHistoryEntryResponses[keyof ShowsControllerDeleteEpisodeWatchHistoryEntryResponses]; 1743 + export type ShowsControllerDeleteEpisodeWatchHistoryEntryResponse = ShowsControllerDeleteEpisodeWatchHistoryEntryResponses[keyof ShowsControllerDeleteEpisodeWatchHistoryEntryResponses]; 1705 1744 1706 1745 export type ShowsControllerMarkSeasonWatchedData = { 1707 - body: MarkSeasonWatchedDto; 1708 - path?: never; 1709 - query?: never; 1710 - url: "/shows/season/watched"; 1746 + body: MarkSeasonWatchedDto; 1747 + path?: never; 1748 + query?: never; 1749 + url: '/shows/season/watched'; 1711 1750 }; 1712 1751 1713 1752 export type ShowsControllerMarkSeasonWatchedErrors = { 1714 - /** 1715 - * Not authenticated 1716 - */ 1717 - 401: unknown; 1753 + /** 1754 + * Not authenticated 1755 + */ 1756 + 401: unknown; 1718 1757 }; 1719 1758 1720 1759 export type ShowsControllerMarkSeasonWatchedResponses = { 1721 - 201: MarkedEpisodesResponseDto; 1760 + 201: MarkedEpisodesResponseDto; 1722 1761 }; 1723 1762 1724 - export type ShowsControllerMarkSeasonWatchedResponse = 1725 - ShowsControllerMarkSeasonWatchedResponses[keyof ShowsControllerMarkSeasonWatchedResponses]; 1763 + export type ShowsControllerMarkSeasonWatchedResponse = ShowsControllerMarkSeasonWatchedResponses[keyof ShowsControllerMarkSeasonWatchedResponses]; 1726 1764 1727 1765 export type ShowsControllerMarkShowWatchedData = { 1728 - body: MarkShowWatchedDto; 1729 - path?: never; 1730 - query?: never; 1731 - url: "/shows/show/watched"; 1766 + body: MarkShowWatchedDto; 1767 + path?: never; 1768 + query?: never; 1769 + url: '/shows/show/watched'; 1732 1770 }; 1733 1771 1734 1772 export type ShowsControllerMarkShowWatchedErrors = { 1735 - /** 1736 - * Not authenticated 1737 - */ 1738 - 401: unknown; 1773 + /** 1774 + * Not authenticated 1775 + */ 1776 + 401: unknown; 1739 1777 }; 1740 1778 1741 1779 export type ShowsControllerMarkShowWatchedResponses = { 1742 - 201: MarkedEpisodesResponseDto; 1780 + 201: MarkedEpisodesResponseDto; 1743 1781 }; 1744 1782 1745 - export type ShowsControllerMarkShowWatchedResponse = 1746 - ShowsControllerMarkShowWatchedResponses[keyof ShowsControllerMarkShowWatchedResponses]; 1783 + export type ShowsControllerMarkShowWatchedResponse = ShowsControllerMarkShowWatchedResponses[keyof ShowsControllerMarkShowWatchedResponses]; 1747 1784 1748 1785 export type UsersControllerGetPublicProfileData = { 1749 - body?: never; 1750 - path: { 1751 - handle: string; 1752 - }; 1753 - query?: never; 1754 - url: "/users/{handle}/profile"; 1786 + body?: never; 1787 + path: { 1788 + handle: string; 1789 + }; 1790 + query?: never; 1791 + url: '/users/{handle}/profile'; 1755 1792 }; 1756 1793 1757 1794 export type UsersControllerGetPublicProfileErrors = { 1758 - /** 1759 - * User not found 1760 - */ 1761 - 404: unknown; 1795 + /** 1796 + * User not found 1797 + */ 1798 + 404: unknown; 1762 1799 }; 1763 1800 1764 1801 export type UsersControllerGetPublicProfileResponses = { 1765 - 200: PublicUserProfileDto; 1802 + 200: PublicUserProfileDto; 1766 1803 }; 1767 1804 1768 - export type UsersControllerGetPublicProfileResponse = 1769 - UsersControllerGetPublicProfileResponses[keyof UsersControllerGetPublicProfileResponses]; 1805 + export type UsersControllerGetPublicProfileResponse = UsersControllerGetPublicProfileResponses[keyof UsersControllerGetPublicProfileResponses]; 1770 1806 1771 1807 export type UsersControllerGetAvatarData = { 1772 - body?: never; 1773 - path?: never; 1774 - query: { 1775 - /** 1776 - * User DID 1777 - */ 1778 - did: string; 1779 - /** 1780 - * Blob CID 1781 - */ 1782 - cid: string; 1783 - }; 1784 - url: "/users/avatar"; 1808 + body?: never; 1809 + path?: never; 1810 + query: { 1811 + /** 1812 + * User DID 1813 + */ 1814 + did: string; 1815 + /** 1816 + * Blob CID 1817 + */ 1818 + cid: string; 1819 + }; 1820 + url: '/users/avatar'; 1785 1821 }; 1786 1822 1787 1823 export type UsersControllerGetAvatarResponses = { 1788 - /** 1789 - * Avatar image bytes 1790 - */ 1791 - 200: unknown; 1824 + /** 1825 + * Avatar image bytes 1826 + */ 1827 + 200: unknown; 1792 1828 }; 1793 1829 1794 1830 export type UsersControllerGetMySettingsData = { 1795 - body?: never; 1796 - path?: never; 1797 - query?: never; 1798 - url: "/users/me/settings"; 1831 + body?: never; 1832 + path?: never; 1833 + query?: never; 1834 + url: '/users/me/settings'; 1799 1835 }; 1800 1836 1801 1837 export type UsersControllerGetMySettingsErrors = { 1802 - /** 1803 - * Not authenticated 1804 - */ 1805 - 401: unknown; 1838 + /** 1839 + * Not authenticated 1840 + */ 1841 + 401: unknown; 1806 1842 }; 1807 1843 1808 1844 export type UsersControllerGetMySettingsResponses = { 1809 - 200: UserSettingsDto; 1845 + 200: UserSettingsDto; 1810 1846 }; 1811 1847 1812 - export type UsersControllerGetMySettingsResponse = 1813 - UsersControllerGetMySettingsResponses[keyof UsersControllerGetMySettingsResponses]; 1848 + export type UsersControllerGetMySettingsResponse = UsersControllerGetMySettingsResponses[keyof UsersControllerGetMySettingsResponses]; 1814 1849 1815 1850 export type UsersControllerUpdateMySettingsData = { 1816 - body: UpdateUserSettingsDto; 1817 - path?: never; 1818 - query?: never; 1819 - url: "/users/me/settings"; 1851 + body: UpdateUserSettingsDto; 1852 + path?: never; 1853 + query?: never; 1854 + url: '/users/me/settings'; 1820 1855 }; 1821 1856 1822 1857 export type UsersControllerUpdateMySettingsErrors = { 1823 - /** 1824 - * Not authenticated 1825 - */ 1826 - 401: unknown; 1858 + /** 1859 + * Not authenticated 1860 + */ 1861 + 401: unknown; 1827 1862 }; 1828 1863 1829 1864 export type UsersControllerUpdateMySettingsResponses = { 1830 - 200: UserSettingsDto; 1865 + 200: UserSettingsDto; 1831 1866 }; 1832 1867 1833 - export type UsersControllerUpdateMySettingsResponse = 1834 - UsersControllerUpdateMySettingsResponses[keyof UsersControllerUpdateMySettingsResponses]; 1868 + export type UsersControllerUpdateMySettingsResponse = UsersControllerUpdateMySettingsResponses[keyof UsersControllerUpdateMySettingsResponses]; 1835 1869 1836 1870 export type UsersControllerUpdateMyProfileData = { 1837 - body: UpdateUserProfileDto; 1838 - path?: never; 1839 - query?: never; 1840 - url: "/users/me/profile"; 1871 + body: UpdateUserProfileDto; 1872 + path?: never; 1873 + query?: never; 1874 + url: '/users/me/profile'; 1841 1875 }; 1842 1876 1843 1877 export type UsersControllerUpdateMyProfileErrors = { 1844 - /** 1845 - * Not authenticated 1846 - */ 1847 - 401: unknown; 1878 + /** 1879 + * Not authenticated 1880 + */ 1881 + 401: unknown; 1848 1882 }; 1849 1883 1850 1884 export type UsersControllerUpdateMyProfileResponses = { 1851 - 200: UserProfileDto; 1885 + 200: UserProfileDto; 1852 1886 }; 1853 1887 1854 - export type UsersControllerUpdateMyProfileResponse = 1855 - UsersControllerUpdateMyProfileResponses[keyof UsersControllerUpdateMyProfileResponses]; 1888 + export type UsersControllerUpdateMyProfileResponse = UsersControllerUpdateMyProfileResponses[keyof UsersControllerUpdateMyProfileResponses]; 1856 1889 1857 1890 export type UsersControllerDeleteMyAvatarData = { 1858 - body?: never; 1859 - path?: never; 1860 - query?: never; 1861 - url: "/users/me/profile/avatar"; 1891 + body?: never; 1892 + path?: never; 1893 + query?: never; 1894 + url: '/users/me/profile/avatar'; 1862 1895 }; 1863 1896 1864 1897 export type UsersControllerDeleteMyAvatarResponses = { 1865 - 200: UserProfileDto; 1898 + 200: UserProfileDto; 1866 1899 }; 1867 1900 1868 - export type UsersControllerDeleteMyAvatarResponse = 1869 - UsersControllerDeleteMyAvatarResponses[keyof UsersControllerDeleteMyAvatarResponses]; 1901 + export type UsersControllerDeleteMyAvatarResponse = UsersControllerDeleteMyAvatarResponses[keyof UsersControllerDeleteMyAvatarResponses]; 1870 1902 1871 1903 export type UsersControllerUploadMyAvatarData = { 1872 - body: { 1873 - avatar: Blob | File; 1874 - }; 1875 - path?: never; 1876 - query?: never; 1877 - url: "/users/me/profile/avatar"; 1904 + body: { 1905 + avatar: Blob | File; 1906 + }; 1907 + path?: never; 1908 + query?: never; 1909 + url: '/users/me/profile/avatar'; 1878 1910 }; 1879 1911 1880 1912 export type UsersControllerUploadMyAvatarResponses = { 1881 - 200: UserProfileDto; 1913 + 200: UserProfileDto; 1882 1914 }; 1883 1915 1884 - export type UsersControllerUploadMyAvatarResponse = 1885 - UsersControllerUploadMyAvatarResponses[keyof UsersControllerUploadMyAvatarResponses]; 1916 + export type UsersControllerUploadMyAvatarResponse = UsersControllerUploadMyAvatarResponses[keyof UsersControllerUploadMyAvatarResponses]; 1886 1917 1887 1918 export type UsersControllerDeleteMyAccountData = { 1888 - body: DeleteUserAccountDto; 1889 - path?: never; 1890 - query?: never; 1891 - url: "/users/me/account"; 1919 + body: DeleteUserAccountDto; 1920 + path?: never; 1921 + query?: never; 1922 + url: '/users/me/account'; 1892 1923 }; 1893 1924 1894 1925 export type UsersControllerDeleteMyAccountErrors = { 1895 - /** 1896 - * Not authenticated 1897 - */ 1898 - 401: unknown; 1899 - /** 1900 - * Failed to delete OpnShelf data from the user's PDS, so the account was not deleted 1901 - */ 1902 - 502: unknown; 1926 + /** 1927 + * Not authenticated 1928 + */ 1929 + 401: unknown; 1930 + /** 1931 + * Failed to delete OpnShelf data from the user's PDS, so the account was not deleted 1932 + */ 1933 + 502: unknown; 1903 1934 }; 1904 1935 1905 1936 export type UsersControllerDeleteMyAccountResponses = { 1906 - /** 1907 - * Account deleted successfully 1908 - */ 1909 - 204: void; 1937 + /** 1938 + * Account deleted successfully 1939 + */ 1940 + 204: void; 1910 1941 }; 1911 1942 1912 - export type UsersControllerDeleteMyAccountResponse = 1913 - UsersControllerDeleteMyAccountResponses[keyof UsersControllerDeleteMyAccountResponses]; 1943 + export type UsersControllerDeleteMyAccountResponse = UsersControllerDeleteMyAccountResponses[keyof UsersControllerDeleteMyAccountResponses]; 1914 1944 1915 1945 export type UsersControllerCompleteOnboardingData = { 1916 - body?: never; 1917 - path?: never; 1918 - query?: never; 1919 - url: "/users/me/onboarding/complete"; 1946 + body?: never; 1947 + path?: never; 1948 + query?: never; 1949 + url: '/users/me/onboarding/complete'; 1920 1950 }; 1921 1951 1922 1952 export type UsersControllerCompleteOnboardingErrors = { 1923 - /** 1924 - * Not authenticated 1925 - */ 1926 - 401: unknown; 1953 + /** 1954 + * Not authenticated 1955 + */ 1956 + 401: unknown; 1927 1957 }; 1928 1958 1929 1959 export type UsersControllerCompleteOnboardingResponses = { 1930 - 200: CompleteOnboardingResponseDto; 1960 + 200: CompleteOnboardingResponseDto; 1931 1961 }; 1932 1962 1933 - export type UsersControllerCompleteOnboardingResponse = 1934 - UsersControllerCompleteOnboardingResponses[keyof UsersControllerCompleteOnboardingResponses]; 1963 + export type UsersControllerCompleteOnboardingResponse = UsersControllerCompleteOnboardingResponses[keyof UsersControllerCompleteOnboardingResponses]; 1935 1964 1936 1965 export type UsersControllerFetchMyTraktPublicHistoryData = { 1937 - body: FetchTraktPublicHistoryDto; 1938 - path?: never; 1939 - query?: never; 1940 - url: "/users/me/import/trakt/public/fetch"; 1966 + body: FetchTraktPublicHistoryDto; 1967 + path?: never; 1968 + query?: never; 1969 + url: '/users/me/import/trakt/public/fetch'; 1941 1970 }; 1942 1971 1943 1972 export type UsersControllerFetchMyTraktPublicHistoryErrors = { 1944 - /** 1945 - * Not authenticated 1946 - */ 1947 - 401: unknown; 1973 + /** 1974 + * Not authenticated 1975 + */ 1976 + 401: unknown; 1948 1977 }; 1949 1978 1950 1979 export type UsersControllerFetchMyTraktPublicHistoryResponses = { 1951 - 200: FetchTraktPublicHistoryResponseDto; 1980 + 200: FetchTraktPublicHistoryResponseDto; 1952 1981 }; 1953 1982 1954 - export type UsersControllerFetchMyTraktPublicHistoryResponse = 1955 - UsersControllerFetchMyTraktPublicHistoryResponses[keyof UsersControllerFetchMyTraktPublicHistoryResponses]; 1983 + export type UsersControllerFetchMyTraktPublicHistoryResponse = UsersControllerFetchMyTraktPublicHistoryResponses[keyof UsersControllerFetchMyTraktPublicHistoryResponses]; 1956 1984 1957 1985 export type UsersControllerStartMyTraktImportData = { 1958 - body: StartTraktImportDto; 1959 - path?: never; 1960 - query?: never; 1961 - url: "/users/me/import/trakt/public/start"; 1986 + body: StartTraktImportDto; 1987 + path?: never; 1988 + query?: never; 1989 + url: '/users/me/import/trakt/public/start'; 1962 1990 }; 1963 1991 1964 1992 export type UsersControllerStartMyTraktImportErrors = { 1965 - /** 1966 - * Not authenticated 1967 - */ 1968 - 401: unknown; 1993 + /** 1994 + * Not authenticated 1995 + */ 1996 + 401: unknown; 1969 1997 }; 1970 1998 1971 1999 export type UsersControllerStartMyTraktImportResponses = { 1972 - 200: StartTraktImportResponseDto; 2000 + 200: StartTraktImportResponseDto; 1973 2001 }; 1974 2002 1975 - export type UsersControllerStartMyTraktImportResponse = 1976 - UsersControllerStartMyTraktImportResponses[keyof UsersControllerStartMyTraktImportResponses]; 2003 + export type UsersControllerStartMyTraktImportResponse = UsersControllerStartMyTraktImportResponses[keyof UsersControllerStartMyTraktImportResponses]; 1977 2004 1978 2005 export type UsersControllerGetMyCurrentTraktImportData = { 1979 - body?: never; 1980 - path?: never; 1981 - query?: never; 1982 - url: "/users/me/import/trakt/public/current"; 2006 + body?: never; 2007 + path?: never; 2008 + query?: never; 2009 + url: '/users/me/import/trakt/public/current'; 1983 2010 }; 1984 2011 1985 2012 export type UsersControllerGetMyCurrentTraktImportErrors = { 1986 - /** 1987 - * Not authenticated 1988 - */ 1989 - 401: unknown; 2013 + /** 2014 + * Not authenticated 2015 + */ 2016 + 401: unknown; 1990 2017 }; 1991 2018 1992 2019 export type UsersControllerGetMyCurrentTraktImportResponses = { 1993 - 200: TraktImportJobDto | null; 2020 + /** 2021 + * Current or recent Trakt import job, or null when none exists 2022 + */ 2023 + 200: TraktImportJobDto; 1994 2024 }; 1995 2025 1996 - export type UsersControllerGetMyCurrentTraktImportResponse = 1997 - UsersControllerGetMyCurrentTraktImportResponses[keyof UsersControllerGetMyCurrentTraktImportResponses]; 2026 + export type UsersControllerGetMyCurrentTraktImportResponse = UsersControllerGetMyCurrentTraktImportResponses[keyof UsersControllerGetMyCurrentTraktImportResponses]; 1998 2027 1999 2028 export type UsersControllerImportMyBlueskyFollowsData = { 2000 - body?: never; 2001 - path?: never; 2002 - query?: never; 2003 - url: "/users/me/import/bluesky-follows"; 2029 + body?: never; 2030 + path?: never; 2031 + query?: never; 2032 + url: '/users/me/import/bluesky-follows'; 2004 2033 }; 2005 2034 2006 2035 export type UsersControllerImportMyBlueskyFollowsErrors = { 2007 - /** 2008 - * Not authenticated 2009 - */ 2010 - 401: unknown; 2036 + /** 2037 + * Not authenticated 2038 + */ 2039 + 401: unknown; 2011 2040 }; 2012 2041 2013 2042 export type UsersControllerImportMyBlueskyFollowsResponses = { 2014 - 200: ImportBlueskyFollowsResponseDto; 2043 + 200: ImportBlueskyFollowsResponseDto; 2015 2044 }; 2016 2045 2017 - export type UsersControllerImportMyBlueskyFollowsResponse = 2018 - UsersControllerImportMyBlueskyFollowsResponses[keyof UsersControllerImportMyBlueskyFollowsResponses]; 2046 + export type UsersControllerImportMyBlueskyFollowsResponse = UsersControllerImportMyBlueskyFollowsResponses[keyof UsersControllerImportMyBlueskyFollowsResponses]; 2019 2047 2020 2048 export type UsersControllerImportMyHistoryData = { 2021 - body: ImportHistoryDto; 2022 - path?: never; 2023 - query?: never; 2024 - url: "/users/me/import/history"; 2049 + body: ImportHistoryDto; 2050 + path?: never; 2051 + query?: never; 2052 + url: '/users/me/import/history'; 2025 2053 }; 2026 2054 2027 2055 export type UsersControllerImportMyHistoryErrors = { 2028 - /** 2029 - * Not authenticated 2030 - */ 2031 - 401: unknown; 2056 + /** 2057 + * Not authenticated 2058 + */ 2059 + 401: unknown; 2032 2060 }; 2033 2061 2034 2062 export type UsersControllerImportMyHistoryResponses = { 2035 - 200: ImportHistoryResponseDto; 2063 + 200: ImportHistoryResponseDto; 2036 2064 }; 2037 2065 2038 - export type UsersControllerImportMyHistoryResponse = 2039 - UsersControllerImportMyHistoryResponses[keyof UsersControllerImportMyHistoryResponses]; 2066 + export type UsersControllerImportMyHistoryResponse = UsersControllerImportMyHistoryResponses[keyof UsersControllerImportMyHistoryResponses]; 2040 2067 2041 2068 export type ListsControllerGetUserListsData = { 2042 - body?: never; 2043 - path?: never; 2044 - query?: never; 2045 - url: "/lists"; 2069 + body?: never; 2070 + path?: never; 2071 + query?: never; 2072 + url: '/lists'; 2046 2073 }; 2047 2074 2048 2075 export type ListsControllerGetUserListsErrors = { 2049 - /** 2050 - * Not authenticated 2051 - */ 2052 - 401: unknown; 2076 + /** 2077 + * Not authenticated 2078 + */ 2079 + 401: unknown; 2053 2080 }; 2054 2081 2055 2082 export type ListsControllerGetUserListsResponses = { 2056 - /** 2057 - * List of user's lists 2058 - */ 2059 - 200: Array<ListSummaryDto>; 2083 + /** 2084 + * List of user's lists 2085 + */ 2086 + 200: Array<ListSummaryDto>; 2060 2087 }; 2061 2088 2062 - export type ListsControllerGetUserListsResponse = 2063 - ListsControllerGetUserListsResponses[keyof ListsControllerGetUserListsResponses]; 2089 + export type ListsControllerGetUserListsResponse = ListsControllerGetUserListsResponses[keyof ListsControllerGetUserListsResponses]; 2064 2090 2065 2091 export type ListsControllerCreateListData = { 2066 - body: CreateListDto; 2067 - path?: never; 2068 - query?: never; 2069 - url: "/lists"; 2092 + body: CreateListDto; 2093 + path?: never; 2094 + query?: never; 2095 + url: '/lists'; 2070 2096 }; 2071 2097 2072 2098 export type ListsControllerCreateListErrors = { 2073 - /** 2074 - * Not authenticated 2075 - */ 2076 - 401: unknown; 2099 + /** 2100 + * Not authenticated 2101 + */ 2102 + 401: unknown; 2077 2103 }; 2078 2104 2079 2105 export type ListsControllerCreateListResponses = { 2080 - /** 2081 - * List created 2082 - */ 2083 - 201: ListDto; 2106 + /** 2107 + * List created 2108 + */ 2109 + 201: ListDto; 2084 2110 }; 2085 2111 2086 - export type ListsControllerCreateListResponse = 2087 - ListsControllerCreateListResponses[keyof ListsControllerCreateListResponses]; 2112 + export type ListsControllerCreateListResponse = ListsControllerCreateListResponses[keyof ListsControllerCreateListResponses]; 2088 2113 2089 2114 export type ListsControllerGetPublicUserListsData = { 2090 - body?: never; 2091 - path: { 2092 - /** 2093 - * User DID 2094 - */ 2095 - userDid: string; 2096 - }; 2097 - query?: never; 2098 - url: "/lists/user/{userDid}"; 2115 + body?: never; 2116 + path: { 2117 + /** 2118 + * User DID 2119 + */ 2120 + userDid: string; 2121 + }; 2122 + query?: never; 2123 + url: '/lists/user/{userDid}'; 2099 2124 }; 2100 2125 2101 2126 export type ListsControllerGetPublicUserListsResponses = { 2102 - /** 2103 - * Public list summaries for the user 2104 - */ 2105 - 200: Array<ListSummaryDto>; 2127 + /** 2128 + * Public list summaries for the user 2129 + */ 2130 + 200: Array<ListSummaryDto>; 2106 2131 }; 2107 2132 2108 - export type ListsControllerGetPublicUserListsResponse = 2109 - ListsControllerGetPublicUserListsResponses[keyof ListsControllerGetPublicUserListsResponses]; 2133 + export type ListsControllerGetPublicUserListsResponse = ListsControllerGetPublicUserListsResponses[keyof ListsControllerGetPublicUserListsResponses]; 2110 2134 2111 2135 export type ListsControllerGetPublicUserListData = { 2112 - body?: never; 2113 - path: { 2114 - /** 2115 - * User DID 2116 - */ 2117 - userDid: string; 2118 - /** 2119 - * List slug identifier 2120 - */ 2121 - slug: string; 2122 - }; 2123 - query?: { 2124 - /** 2125 - * Page number to return 2126 - */ 2127 - page?: number; 2128 - /** 2129 - * Number of items to return per page 2130 - */ 2131 - pageSize?: number; 2132 - }; 2133 - url: "/lists/user/{userDid}/{slug}"; 2136 + body?: never; 2137 + path: { 2138 + /** 2139 + * User DID 2140 + */ 2141 + userDid: string; 2142 + /** 2143 + * List slug identifier 2144 + */ 2145 + slug: string; 2146 + }; 2147 + query?: { 2148 + /** 2149 + * Page number to return 2150 + */ 2151 + page?: number; 2152 + /** 2153 + * Number of items to return per page 2154 + */ 2155 + pageSize?: number; 2156 + }; 2157 + url: '/lists/user/{userDid}/{slug}'; 2134 2158 }; 2135 2159 2136 2160 export type ListsControllerGetPublicUserListErrors = { 2137 - /** 2138 - * List not found 2139 - */ 2140 - 404: unknown; 2161 + /** 2162 + * List not found 2163 + */ 2164 + 404: unknown; 2141 2165 }; 2142 2166 2143 2167 export type ListsControllerGetPublicUserListResponses = { 2144 - /** 2145 - * Public list details with items 2146 - */ 2147 - 200: ListWithItemsDto; 2168 + /** 2169 + * Public list details with items 2170 + */ 2171 + 200: ListWithItemsDto; 2148 2172 }; 2149 2173 2150 - export type ListsControllerGetPublicUserListResponse = 2151 - ListsControllerGetPublicUserListResponses[keyof ListsControllerGetPublicUserListResponses]; 2174 + export type ListsControllerGetPublicUserListResponse = ListsControllerGetPublicUserListResponses[keyof ListsControllerGetPublicUserListResponses]; 2152 2175 2153 2176 export type ListsControllerDeleteListData = { 2154 - body?: never; 2155 - path: { 2156 - /** 2157 - * List slug identifier 2158 - */ 2159 - slug: string; 2160 - }; 2161 - query?: never; 2162 - url: "/lists/{slug}"; 2177 + body?: never; 2178 + path: { 2179 + /** 2180 + * List slug identifier 2181 + */ 2182 + slug: string; 2183 + }; 2184 + query?: never; 2185 + url: '/lists/{slug}'; 2163 2186 }; 2164 2187 2165 2188 export type ListsControllerDeleteListErrors = { 2166 - /** 2167 - * Not authenticated 2168 - */ 2169 - 401: unknown; 2170 - /** 2171 - * List not found 2172 - */ 2173 - 404: unknown; 2189 + /** 2190 + * Not authenticated 2191 + */ 2192 + 401: unknown; 2193 + /** 2194 + * List not found 2195 + */ 2196 + 404: unknown; 2174 2197 }; 2175 2198 2176 2199 export type ListsControllerDeleteListResponses = { 2177 - /** 2178 - * List deleted 2179 - */ 2180 - 200: unknown; 2200 + /** 2201 + * List deleted 2202 + */ 2203 + 200: unknown; 2181 2204 }; 2182 2205 2183 2206 export type ListsControllerGetListData = { 2184 - body?: never; 2185 - path: { 2186 - /** 2187 - * List slug identifier 2188 - */ 2189 - slug: string; 2190 - }; 2191 - query?: { 2192 - /** 2193 - * Page number to return 2194 - */ 2195 - page?: number; 2196 - /** 2197 - * Number of items to return per page 2198 - */ 2199 - pageSize?: number; 2200 - }; 2201 - url: "/lists/{slug}"; 2207 + body?: never; 2208 + path: { 2209 + /** 2210 + * List slug identifier 2211 + */ 2212 + slug: string; 2213 + }; 2214 + query?: { 2215 + /** 2216 + * Page number to return 2217 + */ 2218 + page?: number; 2219 + /** 2220 + * Number of items to return per page 2221 + */ 2222 + pageSize?: number; 2223 + }; 2224 + url: '/lists/{slug}'; 2202 2225 }; 2203 2226 2204 2227 export type ListsControllerGetListErrors = { 2205 - /** 2206 - * Not authenticated 2207 - */ 2208 - 401: unknown; 2209 - /** 2210 - * List not found 2211 - */ 2212 - 404: unknown; 2228 + /** 2229 + * Not authenticated 2230 + */ 2231 + 401: unknown; 2232 + /** 2233 + * List not found 2234 + */ 2235 + 404: unknown; 2213 2236 }; 2214 2237 2215 2238 export type ListsControllerGetListResponses = { 2216 - /** 2217 - * List details with items 2218 - */ 2219 - 200: ListWithItemsDto; 2239 + /** 2240 + * List details with items 2241 + */ 2242 + 200: ListWithItemsDto; 2220 2243 }; 2221 2244 2222 - export type ListsControllerGetListResponse = 2223 - ListsControllerGetListResponses[keyof ListsControllerGetListResponses]; 2245 + export type ListsControllerGetListResponse = ListsControllerGetListResponses[keyof ListsControllerGetListResponses]; 2224 2246 2225 2247 export type ListsControllerUpdateListData = { 2226 - body: UpdateListDto; 2227 - path: { 2228 - /** 2229 - * List slug identifier 2230 - */ 2231 - slug: string; 2232 - }; 2233 - query?: never; 2234 - url: "/lists/{slug}"; 2248 + body: UpdateListDto; 2249 + path: { 2250 + /** 2251 + * List slug identifier 2252 + */ 2253 + slug: string; 2254 + }; 2255 + query?: never; 2256 + url: '/lists/{slug}'; 2235 2257 }; 2236 2258 2237 2259 export type ListsControllerUpdateListErrors = { 2238 - /** 2239 - * Not authenticated 2240 - */ 2241 - 401: unknown; 2242 - /** 2243 - * List not found 2244 - */ 2245 - 404: unknown; 2260 + /** 2261 + * Not authenticated 2262 + */ 2263 + 401: unknown; 2264 + /** 2265 + * List not found 2266 + */ 2267 + 404: unknown; 2246 2268 }; 2247 2269 2248 2270 export type ListsControllerUpdateListResponses = { 2249 - /** 2250 - * List updated 2251 - */ 2252 - 200: ListDto; 2271 + /** 2272 + * List updated 2273 + */ 2274 + 200: ListDto; 2253 2275 }; 2254 2276 2255 - export type ListsControllerUpdateListResponse = 2256 - ListsControllerUpdateListResponses[keyof ListsControllerUpdateListResponses]; 2277 + export type ListsControllerUpdateListResponse = ListsControllerUpdateListResponses[keyof ListsControllerUpdateListResponses]; 2257 2278 2258 2279 export type ListsControllerAddItemToListData = { 2259 - body: AddToListDto; 2260 - path: { 2261 - /** 2262 - * List slug identifier 2263 - */ 2264 - slug: string; 2265 - }; 2266 - query?: never; 2267 - url: "/lists/{slug}/items"; 2280 + body: AddToListDto; 2281 + path: { 2282 + /** 2283 + * List slug identifier 2284 + */ 2285 + slug: string; 2286 + }; 2287 + query?: never; 2288 + url: '/lists/{slug}/items'; 2268 2289 }; 2269 2290 2270 2291 export type ListsControllerAddItemToListErrors = { 2271 - /** 2272 - * Not authenticated 2273 - */ 2274 - 401: unknown; 2275 - /** 2276 - * List or media item not found 2277 - */ 2278 - 404: unknown; 2292 + /** 2293 + * Not authenticated 2294 + */ 2295 + 401: unknown; 2296 + /** 2297 + * List or media item not found 2298 + */ 2299 + 404: unknown; 2279 2300 }; 2280 2301 2281 2302 export type ListsControllerAddItemToListResponses = { 2282 - /** 2283 - * Item added to list 2284 - */ 2285 - 200: unknown; 2303 + /** 2304 + * Item added to list 2305 + */ 2306 + 200: unknown; 2286 2307 }; 2287 2308 2288 2309 export type ListsControllerRemoveItemFromListData = { 2289 - body?: never; 2290 - path: { 2291 - /** 2292 - * List slug identifier 2293 - */ 2294 - slug: string; 2295 - /** 2296 - * Media type (movie or show) 2297 - */ 2298 - mediaType: string; 2299 - /** 2300 - * TMDB media ID 2301 - */ 2302 - mediaId: string; 2303 - }; 2304 - query?: never; 2305 - url: "/lists/{slug}/items/{mediaType}/{mediaId}"; 2310 + body?: never; 2311 + path: { 2312 + /** 2313 + * List slug identifier 2314 + */ 2315 + slug: string; 2316 + /** 2317 + * Media type (movie or show) 2318 + */ 2319 + mediaType: string; 2320 + /** 2321 + * TMDB media ID 2322 + */ 2323 + mediaId: string; 2324 + }; 2325 + query?: never; 2326 + url: '/lists/{slug}/items/{mediaType}/{mediaId}'; 2306 2327 }; 2307 2328 2308 2329 export type ListsControllerRemoveItemFromListErrors = { 2309 - /** 2310 - * Not authenticated 2311 - */ 2312 - 401: unknown; 2313 - /** 2314 - * List not found 2315 - */ 2316 - 404: unknown; 2330 + /** 2331 + * Not authenticated 2332 + */ 2333 + 401: unknown; 2334 + /** 2335 + * List not found 2336 + */ 2337 + 404: unknown; 2317 2338 }; 2318 2339 2319 2340 export type ListsControllerRemoveItemFromListResponses = { 2320 - /** 2321 - * Item removed from list 2322 - */ 2323 - 200: unknown; 2341 + /** 2342 + * Item removed from list 2343 + */ 2344 + 200: unknown; 2324 2345 }; 2325 2346 2326 2347 export type ListsControllerGetListsForItemData = { 2327 - body?: never; 2328 - path: { 2329 - /** 2330 - * Media type (movie or show) 2331 - */ 2332 - mediaType: string; 2333 - /** 2334 - * TMDB media ID 2335 - */ 2336 - mediaId: string; 2337 - }; 2338 - query?: never; 2339 - url: "/lists/for-item/{mediaType}/{mediaId}"; 2348 + body?: never; 2349 + path: { 2350 + /** 2351 + * Media type (movie or show) 2352 + */ 2353 + mediaType: string; 2354 + /** 2355 + * TMDB media ID 2356 + */ 2357 + mediaId: string; 2358 + }; 2359 + query?: never; 2360 + url: '/lists/for-item/{mediaType}/{mediaId}'; 2340 2361 }; 2341 2362 2342 2363 export type ListsControllerGetListsForItemErrors = { 2343 - /** 2344 - * Not authenticated 2345 - */ 2346 - 401: unknown; 2364 + /** 2365 + * Not authenticated 2366 + */ 2367 + 401: unknown; 2347 2368 }; 2348 2369 2349 2370 export type ListsControllerGetListsForItemResponses = { 2350 - /** 2351 - * Lists with membership status 2352 - */ 2353 - 200: Array<ListsForItemDto>; 2371 + /** 2372 + * Lists with membership status 2373 + */ 2374 + 200: Array<ListsForItemDto>; 2354 2375 }; 2355 2376 2356 - export type ListsControllerGetListsForItemResponse = 2357 - ListsControllerGetListsForItemResponses[keyof ListsControllerGetListsForItemResponses]; 2377 + export type ListsControllerGetListsForItemResponse = ListsControllerGetListsForItemResponses[keyof ListsControllerGetListsForItemResponses]; 2358 2378 2359 2379 export type SocialControllerSearchPeopleData = { 2360 - body?: never; 2361 - path?: never; 2362 - query: { 2363 - /** 2364 - * Page number to return 2365 - */ 2366 - page?: number; 2367 - /** 2368 - * Number of items to return per page 2369 - */ 2370 - pageSize?: number; 2371 - /** 2372 - * Search term for handle or display name 2373 - */ 2374 - q: string; 2375 - }; 2376 - url: "/social/search"; 2380 + body?: never; 2381 + path?: never; 2382 + query: { 2383 + /** 2384 + * Page number to return 2385 + */ 2386 + page?: number; 2387 + /** 2388 + * Number of items to return per page 2389 + */ 2390 + pageSize?: number; 2391 + /** 2392 + * Search term for handle or display name 2393 + */ 2394 + q: string; 2395 + }; 2396 + url: '/social/search'; 2377 2397 }; 2378 2398 2379 2399 export type SocialControllerSearchPeopleResponses = { 2380 - 200: PaginatedSocialUsersDto; 2400 + 200: PaginatedSocialUsersDto; 2381 2401 }; 2382 2402 2383 - export type SocialControllerSearchPeopleResponse = 2384 - SocialControllerSearchPeopleResponses[keyof SocialControllerSearchPeopleResponses]; 2403 + export type SocialControllerSearchPeopleResponse = SocialControllerSearchPeopleResponses[keyof SocialControllerSearchPeopleResponses]; 2385 2404 2386 2405 export type SocialControllerUnfollowData = { 2387 - body?: never; 2388 - path: { 2389 - targetDid: string; 2390 - }; 2391 - query?: never; 2392 - url: "/social/follows/{targetDid}"; 2406 + body?: never; 2407 + path: { 2408 + targetDid: string; 2409 + }; 2410 + query?: never; 2411 + url: '/social/follows/{targetDid}'; 2393 2412 }; 2394 2413 2395 2414 export type SocialControllerUnfollowResponses = { 2396 - /** 2397 - * Relationship removed 2398 - */ 2399 - 204: void; 2415 + /** 2416 + * Relationship removed 2417 + */ 2418 + 204: void; 2400 2419 }; 2401 2420 2402 - export type SocialControllerUnfollowResponse = 2403 - SocialControllerUnfollowResponses[keyof SocialControllerUnfollowResponses]; 2421 + export type SocialControllerUnfollowResponse = SocialControllerUnfollowResponses[keyof SocialControllerUnfollowResponses]; 2404 2422 2405 2423 export type SocialControllerFollowData = { 2406 - body?: never; 2407 - path: { 2408 - targetDid: string; 2409 - }; 2410 - query?: never; 2411 - url: "/social/follows/{targetDid}"; 2424 + body?: never; 2425 + path: { 2426 + targetDid: string; 2427 + }; 2428 + query?: never; 2429 + url: '/social/follows/{targetDid}'; 2412 2430 }; 2413 2431 2414 2432 export type SocialControllerFollowResponses = { 2415 - 200: UserRelationshipDto; 2433 + 200: UserRelationshipDto; 2416 2434 }; 2417 2435 2418 - export type SocialControllerFollowResponse = 2419 - SocialControllerFollowResponses[keyof SocialControllerFollowResponses]; 2436 + export type SocialControllerFollowResponse = SocialControllerFollowResponses[keyof SocialControllerFollowResponses]; 2420 2437 2421 2438 export type SocialControllerGetRelationshipData = { 2422 - body?: never; 2423 - path: { 2424 - targetDid: string; 2425 - }; 2426 - query?: never; 2427 - url: "/social/relationship/{targetDid}"; 2439 + body?: never; 2440 + path: { 2441 + targetDid: string; 2442 + }; 2443 + query?: never; 2444 + url: '/social/relationship/{targetDid}'; 2428 2445 }; 2429 2446 2430 2447 export type SocialControllerGetRelationshipResponses = { 2431 - 200: UserRelationshipDto; 2448 + 200: UserRelationshipDto; 2432 2449 }; 2433 2450 2434 - export type SocialControllerGetRelationshipResponse = 2435 - SocialControllerGetRelationshipResponses[keyof SocialControllerGetRelationshipResponses]; 2451 + export type SocialControllerGetRelationshipResponse = SocialControllerGetRelationshipResponses[keyof SocialControllerGetRelationshipResponses]; 2436 2452 2437 2453 export type SocialControllerGetFollowersData = { 2438 - body?: never; 2439 - path: { 2440 - handle: string; 2441 - }; 2442 - query?: { 2443 - /** 2444 - * Page number to return 2445 - */ 2446 - page?: number; 2447 - /** 2448 - * Number of items to return per page 2449 - */ 2450 - pageSize?: number; 2451 - }; 2452 - url: "/social/profiles/{handle}/followers"; 2454 + body?: never; 2455 + path: { 2456 + handle: string; 2457 + }; 2458 + query?: { 2459 + /** 2460 + * Page number to return 2461 + */ 2462 + page?: number; 2463 + /** 2464 + * Number of items to return per page 2465 + */ 2466 + pageSize?: number; 2467 + }; 2468 + url: '/social/profiles/{handle}/followers'; 2453 2469 }; 2454 2470 2455 2471 export type SocialControllerGetFollowersResponses = { 2456 - 200: PaginatedSocialUsersDto; 2472 + 200: PaginatedSocialUsersDto; 2457 2473 }; 2458 2474 2459 - export type SocialControllerGetFollowersResponse = 2460 - SocialControllerGetFollowersResponses[keyof SocialControllerGetFollowersResponses]; 2475 + export type SocialControllerGetFollowersResponse = SocialControllerGetFollowersResponses[keyof SocialControllerGetFollowersResponses]; 2461 2476 2462 2477 export type SocialControllerGetFollowingData = { 2463 - body?: never; 2464 - path: { 2465 - handle: string; 2466 - }; 2467 - query?: { 2468 - /** 2469 - * Page number to return 2470 - */ 2471 - page?: number; 2472 - /** 2473 - * Number of items to return per page 2474 - */ 2475 - pageSize?: number; 2476 - }; 2477 - url: "/social/profiles/{handle}/following"; 2478 + body?: never; 2479 + path: { 2480 + handle: string; 2481 + }; 2482 + query?: { 2483 + /** 2484 + * Page number to return 2485 + */ 2486 + page?: number; 2487 + /** 2488 + * Number of items to return per page 2489 + */ 2490 + pageSize?: number; 2491 + }; 2492 + url: '/social/profiles/{handle}/following'; 2478 2493 }; 2479 2494 2480 2495 export type SocialControllerGetFollowingResponses = { 2481 - 200: PaginatedSocialUsersDto; 2496 + 200: PaginatedSocialUsersDto; 2482 2497 }; 2483 2498 2484 - export type SocialControllerGetFollowingResponse = 2485 - SocialControllerGetFollowingResponses[keyof SocialControllerGetFollowingResponses]; 2499 + export type SocialControllerGetFollowingResponse = SocialControllerGetFollowingResponses[keyof SocialControllerGetFollowingResponses]; 2486 2500 2487 2501 export type SocialControllerGetFeedData = { 2488 - body?: never; 2489 - path?: never; 2490 - query?: { 2491 - /** 2492 - * Page number to return 2493 - */ 2494 - page?: number; 2495 - /** 2496 - * Number of items to return per page 2497 - */ 2498 - pageSize?: number; 2499 - }; 2500 - url: "/social/feed"; 2502 + body?: never; 2503 + path?: never; 2504 + query?: { 2505 + /** 2506 + * Page number to return 2507 + */ 2508 + page?: number; 2509 + /** 2510 + * Number of items to return per page 2511 + */ 2512 + pageSize?: number; 2513 + }; 2514 + url: '/social/feed'; 2501 2515 }; 2502 2516 2503 2517 export type SocialControllerGetFeedResponses = { 2504 - 200: FollowedActivityFeedDto; 2518 + 200: FollowedActivityFeedDto; 2505 2519 }; 2506 2520 2507 - export type SocialControllerGetFeedResponse = 2508 - SocialControllerGetFeedResponses[keyof SocialControllerGetFeedResponses]; 2521 + export type SocialControllerGetFeedResponse = SocialControllerGetFeedResponses[keyof SocialControllerGetFeedResponses]; 2509 2522 2510 2523 export type SocialControllerGetWatchersData = { 2511 - body?: never; 2512 - path?: never; 2513 - query: { 2514 - mediaType: "movie" | "show"; 2515 - /** 2516 - * Movie TMDB id or scoped show media id such as "showId", "showId:season:1", or "showId:season:1:episode:2" 2517 - */ 2518 - mediaId: string; 2519 - /** 2520 - * Maximum number of watcher avatars to return 2521 - */ 2522 - pageSize?: number; 2523 - }; 2524 - url: "/social/watchers"; 2524 + body?: never; 2525 + path?: never; 2526 + query: { 2527 + mediaType: 'movie' | 'show'; 2528 + /** 2529 + * Movie TMDB id or scoped show media id such as "showId", "showId:season:1", or "showId:season:1:episode:2" 2530 + */ 2531 + mediaId: string; 2532 + /** 2533 + * Maximum number of watcher avatars to return 2534 + */ 2535 + pageSize?: number; 2536 + }; 2537 + url: '/social/watchers'; 2525 2538 }; 2526 2539 2527 2540 export type SocialControllerGetWatchersResponses = { 2528 - 200: FollowedWatchersDto; 2541 + 200: FollowedWatchersDto; 2529 2542 }; 2530 2543 2531 - export type SocialControllerGetWatchersResponse = 2532 - SocialControllerGetWatchersResponses[keyof SocialControllerGetWatchersResponses]; 2544 + export type SocialControllerGetWatchersResponse = SocialControllerGetWatchersResponses[keyof SocialControllerGetWatchersResponses]; 2533 2545 2534 2546 export type ShelfControllerGetUserShelfData = { 2535 - body?: never; 2536 - path: { 2537 - userDid: string; 2538 - }; 2539 - query?: { 2540 - /** 2541 - * Page number to return 2542 - */ 2543 - page?: number; 2544 - /** 2545 - * Number of items to return per page 2546 - */ 2547 - pageSize?: number; 2548 - }; 2549 - url: "/users/{userDid}/shelf"; 2547 + body?: never; 2548 + path: { 2549 + userDid: string; 2550 + }; 2551 + query?: { 2552 + /** 2553 + * Page number to return 2554 + */ 2555 + page?: number; 2556 + /** 2557 + * Number of items to return per page 2558 + */ 2559 + pageSize?: number; 2560 + }; 2561 + url: '/users/{userDid}/shelf'; 2550 2562 }; 2551 2563 2552 2564 export type ShelfControllerGetUserShelfResponses = { 2553 - 200: ShelfResponseDto; 2565 + 200: ShelfResponseDto; 2554 2566 }; 2555 2567 2556 - export type ShelfControllerGetUserShelfResponse = 2557 - ShelfControllerGetUserShelfResponses[keyof ShelfControllerGetUserShelfResponses]; 2568 + export type ShelfControllerGetUserShelfResponse = ShelfControllerGetUserShelfResponses[keyof ShelfControllerGetUserShelfResponses]; 2558 2569 2559 2570 export type ShelfControllerGetUserActivitySummaryData = { 2560 - body?: never; 2561 - path: { 2562 - userDid: string; 2563 - }; 2564 - query?: never; 2565 - url: "/users/{userDid}/shelf/activity-summary"; 2571 + body?: never; 2572 + path: { 2573 + userDid: string; 2574 + }; 2575 + query?: never; 2576 + url: '/users/{userDid}/shelf/activity-summary'; 2566 2577 }; 2567 2578 2568 2579 export type ShelfControllerGetUserActivitySummaryResponses = { 2569 - 200: ShelfActivitySummaryDto; 2580 + 200: ShelfActivitySummaryDto; 2570 2581 }; 2571 2582 2572 - export type ShelfControllerGetUserActivitySummaryResponse = 2573 - ShelfControllerGetUserActivitySummaryResponses[keyof ShelfControllerGetUserActivitySummaryResponses]; 2583 + export type ShelfControllerGetUserActivitySummaryResponse = ShelfControllerGetUserActivitySummaryResponses[keyof ShelfControllerGetUserActivitySummaryResponses]; 2574 2584 2575 2585 export type SearchControllerSearchAllData = { 2576 - body?: never; 2577 - path?: never; 2578 - query: { 2579 - /** 2580 - * Search term 2581 - */ 2582 - query: string; 2583 - /** 2584 - * Page number 2585 - */ 2586 - page?: number; 2587 - }; 2588 - url: "/search/all"; 2586 + body?: never; 2587 + path?: never; 2588 + query: { 2589 + /** 2590 + * Search term 2591 + */ 2592 + query: string; 2593 + /** 2594 + * Page number 2595 + */ 2596 + page?: number; 2597 + }; 2598 + url: '/search/all'; 2589 2599 }; 2590 2600 2591 2601 export type SearchControllerSearchAllResponses = { 2592 - 200: UnifiedSearchResponseDto; 2602 + 200: UnifiedSearchResponseDto; 2593 2603 }; 2594 2604 2595 - export type SearchControllerSearchAllResponse = 2596 - SearchControllerSearchAllResponses[keyof SearchControllerSearchAllResponses]; 2605 + export type SearchControllerSearchAllResponse = SearchControllerSearchAllResponses[keyof SearchControllerSearchAllResponses]; 2597 2606 2598 2607 export type SearchControllerDiscoverAllData = { 2599 - body?: never; 2600 - path?: never; 2601 - query?: { 2602 - /** 2603 - * Year filter 2604 - */ 2605 - year?: unknown; 2606 - /** 2607 - * Page number 2608 - */ 2609 - page?: unknown; 2610 - /** 2611 - * Sort by 2612 - */ 2613 - sortBy?: unknown; 2614 - }; 2615 - url: "/search/discover"; 2608 + body?: never; 2609 + path?: never; 2610 + query?: { 2611 + /** 2612 + * Year filter 2613 + */ 2614 + year?: unknown; 2615 + /** 2616 + * Page number 2617 + */ 2618 + page?: unknown; 2619 + /** 2620 + * Sort by 2621 + */ 2622 + sortBy?: unknown; 2623 + }; 2624 + url: '/search/discover'; 2616 2625 }; 2617 2626 2618 2627 export type SearchControllerDiscoverAllResponses = { 2619 - 200: UnifiedDiscoverResponseDto; 2628 + 200: UnifiedDiscoverResponseDto; 2620 2629 }; 2621 2630 2622 - export type SearchControllerDiscoverAllResponse = 2623 - SearchControllerDiscoverAllResponses[keyof SearchControllerDiscoverAllResponses]; 2631 + export type SearchControllerDiscoverAllResponse = SearchControllerDiscoverAllResponses[keyof SearchControllerDiscoverAllResponses];