Restored to '551aaee106c3dc6c34e10193d8683fa67e7f9bea'

Replit-Restored-To: 551aaee106
This commit is contained in:
sebastjanartic
2025-08-04 20:10:59 +00:00
parent bb26fd3cdc
commit 9b192c6e1b
27 changed files with 107 additions and 2599 deletions
-64
View File
@@ -1,64 +0,0 @@
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@/lib/queryClient";
import { useToast } from "@/hooks/use-toast";
const CURRENT_USER_ID = "5311f8eb-aba2-4f58-96bf-0ca99fe5907c"; // Test user from database
export function useFavorites() {
const queryClient = useQueryClient();
const { toast } = useToast();
// Check if video is favorited
const useIsFavorited = (videoId: string) => {
return useQuery({
queryKey: ["/api/favorites", CURRENT_USER_ID, videoId],
queryFn: async () => {
const response = await fetch(`/api/favorites/${CURRENT_USER_ID}/${videoId}`);
if (!response.ok) throw new Error('Failed to check favorite status');
return response.json();
},
enabled: !!videoId,
});
};
// Add to favorites
const addToFavoritesMutation = useMutation({
mutationFn: (videoId: string) =>
apiRequest("/api/favorites", "POST", {
userId: CURRENT_USER_ID,
videoId,
}),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/favorites"] });
toast({ title: "Added to favorites!" });
},
onError: (error: any) => {
if (error.message?.includes("already in favorites")) {
toast({ title: "Already in favorites", variant: "destructive" });
} else {
toast({ title: "Failed to add to favorites", variant: "destructive" });
}
},
});
// Remove from favorites
const removeFromFavoritesMutation = useMutation({
mutationFn: (videoId: string) =>
apiRequest(`/api/favorites/${CURRENT_USER_ID}/${videoId}`, "DELETE"),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/favorites"] });
toast({ title: "Removed from favorites" });
},
onError: () => {
toast({ title: "Failed to remove from favorites", variant: "destructive" });
},
});
return {
useIsFavorited,
addToFavorites: addToFavoritesMutation.mutate,
removeFromFavorites: removeFromFavoritesMutation.mutate,
isAddingToFavorites: addToFavoritesMutation.isPending,
isRemovingFromFavorites: removeFromFavoritesMutation.isPending,
};
}
-77
View File
@@ -1,77 +0,0 @@
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@/lib/queryClient";
import { useToast } from "@/hooks/use-toast";
import type { Playlist, InsertPlaylist } from "@shared/schema";
const CURRENT_USER_ID = "5311f8eb-aba2-4f58-96bf-0ca99fe5907c"; // Test user from database
export function usePlaylists() {
const queryClient = useQueryClient();
const { toast } = useToast();
// Get user playlists
const useUserPlaylists = () => {
return useQuery({
queryKey: ["/api/playlists", CURRENT_USER_ID],
});
};
// Get single playlist
const usePlaylist = (playlistId: string) => {
return useQuery({
queryKey: ["/api/playlists", playlistId],
enabled: !!playlistId,
});
};
// Get playlist videos
const usePlaylistVideos = (playlistId: string) => {
return useQuery({
queryKey: ["/api/playlists", playlistId, "videos"],
enabled: !!playlistId,
});
};
// Add video to playlist
const addVideoToPlaylistMutation = useMutation({
mutationFn: ({ playlistId, videoId }: { playlistId: string; videoId: string }) =>
apiRequest(`/api/playlists/${playlistId}/videos`, "POST", {
videoId,
position: 0,
}),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/playlists"] });
toast({ title: "Added to playlist!" });
},
onError: (error: any) => {
if (error.message?.includes("already in playlist")) {
toast({ title: "Video is already in this playlist", variant: "destructive" });
} else {
toast({ title: "Failed to add to playlist", variant: "destructive" });
}
},
});
// Remove video from playlist
const removeVideoFromPlaylistMutation = useMutation({
mutationFn: ({ playlistId, videoId }: { playlistId: string; videoId: string }) =>
apiRequest(`/api/playlists/${playlistId}/videos/${videoId}`, "DELETE"),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/playlists"] });
toast({ title: "Removed from playlist" });
},
onError: () => {
toast({ title: "Failed to remove from playlist", variant: "destructive" });
},
});
return {
useUserPlaylists,
usePlaylist,
usePlaylistVideos,
addVideoToPlaylist: addVideoToPlaylistMutation.mutate,
removeVideoFromPlaylist: removeVideoFromPlaylistMutation.mutate,
isAddingToPlaylist: addVideoToPlaylistMutation.isPending,
isRemovingFromPlaylist: removeVideoFromPlaylistMutation.isPending,
};
}