feat: support YouTube/Dailymotion/SoundCloud embed playback for external content
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 28s
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 28s
This commit is contained in:
parent
39e1ed70ee
commit
d9e69aa76c
@ -1,13 +1,65 @@
|
||||
import { Play, Pause, Volume2, VolumeX, SkipBack, SkipForward } from 'lucide-react'
|
||||
import { useState } from 'react'
|
||||
import { Play, Pause, Volume2, VolumeX, SkipBack, SkipForward, Maximize2, Minimize2 } from 'lucide-react'
|
||||
import { usePlayerStore } from '@/stores/player'
|
||||
import { formatDuration } from '@/lib/utils'
|
||||
import { getEmbedInfo } from '@/lib/embed'
|
||||
import { Avatar } from '@/components/ui/Avatar'
|
||||
|
||||
export function PlayerBar() {
|
||||
const { current, isPlaying, progress, duration, volume, toggle, seek, setVolume } = usePlayerStore()
|
||||
const { current, isPlaying, isExternal, progress, duration, volume, toggle, seek, setVolume } = usePlayerStore()
|
||||
const [expanded, setExpanded] = useState(false)
|
||||
|
||||
if (!current) return null
|
||||
|
||||
const embedInfo = isExternal ? getEmbedInfo(current.audio_url) : null
|
||||
|
||||
// External content: show expandable embed player
|
||||
if (isExternal && embedInfo && isPlaying) {
|
||||
return (
|
||||
<div className={`fixed bottom-0 left-0 right-0 z-50 glass border-t border-border/60 shadow-[0_-4px_30px_rgba(30,27,51,0.08)] transition-all duration-300 ${expanded ? 'h-[70vh]' : 'h-[4.75rem]'}`}>
|
||||
{expanded && (
|
||||
<div className="w-full h-[calc(100%-4.75rem)] bg-black/95">
|
||||
<iframe
|
||||
src={embedInfo.embedUrl}
|
||||
className="w-full h-full"
|
||||
allow="autoplay; encrypted-media; picture-in-picture"
|
||||
allowFullScreen
|
||||
title={current.title}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
<div className="max-w-6xl mx-auto px-4 sm:px-6 h-[4.75rem] flex items-center gap-4">
|
||||
<div className="flex items-center gap-3 min-w-0 flex-1">
|
||||
<div className="relative shrink-0">
|
||||
{current.cover_url ? (
|
||||
<img src={current.cover_url} alt="" className="w-11 h-11 rounded-xl object-cover shadow-organic-sm" />
|
||||
) : (
|
||||
<Avatar name={current.title} size="md" className="!rounded-xl" />
|
||||
)}
|
||||
<div className="absolute -bottom-0.5 -right-0.5 flex items-end gap-[2px] h-3 p-[2px] bg-surface rounded-md">
|
||||
<div className="wave-bar" /><div className="wave-bar" /><div className="wave-bar" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="min-w-0">
|
||||
<p className="text-[13px] font-semibold truncate">{current.title}</p>
|
||||
<p className="text-[11px] text-text-secondary truncate">
|
||||
{current.creator?.username} · via {embedInfo.platform === 'youtube' ? 'YouTube' : embedInfo.platform === 'dailymotion' ? 'Dailymotion' : 'SoundCloud'}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
onClick={() => setExpanded(!expanded)}
|
||||
className="w-11 h-11 rounded-full bg-gradient-to-br from-primary to-[#7B6AEF] text-white flex items-center justify-center hover:shadow-[0_2px_20px_rgba(91,76,219,0.4)] transition-all active:scale-95 cursor-pointer"
|
||||
>
|
||||
{expanded ? <Minimize2 size={17} /> : <Maximize2 size={17} />}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
// Native audio player
|
||||
return (
|
||||
<div className="fixed bottom-0 left-0 right-0 z-50 glass border-t border-border/60 shadow-[0_-4px_30px_rgba(30,27,51,0.08)]">
|
||||
{/* Progress bar */}
|
||||
|
||||
46
src/lib/embed.ts
Normal file
46
src/lib/embed.ts
Normal file
@ -0,0 +1,46 @@
|
||||
export type EmbedInfo = {
|
||||
platform: 'youtube' | 'dailymotion' | 'soundcloud'
|
||||
id: string
|
||||
embedUrl: string
|
||||
}
|
||||
|
||||
export function getEmbedInfo(url: string): EmbedInfo | null {
|
||||
// YouTube
|
||||
const ytMatch = url.match(
|
||||
/(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/,
|
||||
)
|
||||
if (ytMatch) {
|
||||
return {
|
||||
platform: 'youtube',
|
||||
id: ytMatch[1],
|
||||
embedUrl: `https://www.youtube.com/embed/${ytMatch[1]}?autoplay=1`,
|
||||
}
|
||||
}
|
||||
|
||||
// Dailymotion
|
||||
const dmMatch = url.match(
|
||||
/(?:dailymotion\.com\/video\/|dai\.ly\/)([a-zA-Z0-9]+)/,
|
||||
)
|
||||
if (dmMatch) {
|
||||
return {
|
||||
platform: 'dailymotion',
|
||||
id: dmMatch[1],
|
||||
embedUrl: `https://www.dailymotion.com/embed/video/${dmMatch[1]}?autoplay=1`,
|
||||
}
|
||||
}
|
||||
|
||||
// SoundCloud
|
||||
if (url.includes('soundcloud.com/')) {
|
||||
return {
|
||||
platform: 'soundcloud',
|
||||
id: url,
|
||||
embedUrl: `https://w.soundcloud.com/player/?url=${encodeURIComponent(url)}&auto_play=true&visual=true`,
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
export function isExternalUrl(url: string): boolean {
|
||||
return getEmbedInfo(url) !== null
|
||||
}
|
||||
@ -4,6 +4,7 @@ import { Play, Pause, Heart, MessageCircle, Clock, Share2 } from 'lucide-react'
|
||||
import { supabase } from '@/lib/supabase'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import { usePlayerStore } from '@/stores/player'
|
||||
import { getEmbedInfo } from '@/lib/embed'
|
||||
import type { Podcast, Comment } from '@/types'
|
||||
import { formatDuration, timeAgo } from '@/lib/utils'
|
||||
import { Avatar } from '@/components/ui/Avatar'
|
||||
@ -163,6 +164,23 @@ export function PodcastDetail() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Embedded player for external content */}
|
||||
{(() => {
|
||||
const embed = getEmbedInfo(podcast.audio_url)
|
||||
if (!embed) return null
|
||||
return (
|
||||
<div className="rounded-2xl overflow-hidden shadow-md border border-border/50 aspect-video">
|
||||
<iframe
|
||||
src={embed.embedUrl.replace('autoplay=1', 'autoplay=0')}
|
||||
className="w-full h-full"
|
||||
allow="autoplay; encrypted-media; picture-in-picture"
|
||||
allowFullScreen
|
||||
title={podcast.title}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
})()}
|
||||
|
||||
{podcast.description && (
|
||||
<div>
|
||||
<h2 className="text-lg font-heading font-bold mb-2">Description</h2>
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
import { create } from 'zustand'
|
||||
import type { Podcast } from '@/types'
|
||||
import { isExternalUrl } from '@/lib/embed'
|
||||
|
||||
interface PlayerState {
|
||||
current: Podcast | null
|
||||
isPlaying: boolean
|
||||
isExternal: boolean
|
||||
progress: number
|
||||
duration: number
|
||||
volume: number
|
||||
@ -21,6 +23,7 @@ interface PlayerState {
|
||||
export const usePlayerStore = create<PlayerState>((set, get) => ({
|
||||
current: null,
|
||||
isPlaying: false,
|
||||
isExternal: false,
|
||||
progress: 0,
|
||||
duration: 0,
|
||||
volume: 0.8,
|
||||
@ -28,11 +31,18 @@ export const usePlayerStore = create<PlayerState>((set, get) => ({
|
||||
|
||||
play: (podcast) => {
|
||||
const { audio, current } = get()
|
||||
const external = isExternalUrl(podcast.audio_url)
|
||||
|
||||
if (current?.id === podcast.id && audio) {
|
||||
audio.play()
|
||||
set({ isPlaying: true })
|
||||
return
|
||||
if (current?.id === podcast.id) {
|
||||
if (external) {
|
||||
set({ isPlaying: true })
|
||||
return
|
||||
}
|
||||
if (audio) {
|
||||
audio.play()
|
||||
set({ isPlaying: true })
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if (audio) {
|
||||
@ -40,6 +50,12 @@ export const usePlayerStore = create<PlayerState>((set, get) => ({
|
||||
audio.removeAttribute('src')
|
||||
}
|
||||
|
||||
// External URLs are handled by embed iframe, not HTMLAudioElement
|
||||
if (external) {
|
||||
set({ audio: null, current: podcast, isPlaying: true, isExternal: true, progress: 0, duration: podcast.duration_seconds || 0 })
|
||||
return
|
||||
}
|
||||
|
||||
const newAudio = new Audio(podcast.audio_url)
|
||||
newAudio.volume = get().volume
|
||||
|
||||
@ -54,7 +70,7 @@ export const usePlayerStore = create<PlayerState>((set, get) => ({
|
||||
})
|
||||
|
||||
newAudio.play()
|
||||
set({ audio: newAudio, current: podcast, isPlaying: true, progress: 0 })
|
||||
set({ audio: newAudio, current: podcast, isPlaying: true, isExternal: false, progress: 0 })
|
||||
},
|
||||
|
||||
toggle: () => {
|
||||
|
||||
@ -1,220 +1,387 @@
|
||||
-- ==============================================
|
||||
-- We Talk — Seed Data
|
||||
-- Podcasts libres de droit (Creative Commons)
|
||||
-- Source: Hacker Public Radio (archive.org)
|
||||
-- Podcasts from Alice Underground & Small Talk
|
||||
-- Audio from Audiomeans RSS feeds (public)
|
||||
-- ==============================================
|
||||
|
||||
-- 1. Create demo users in auth.users first (required for FK on profiles)
|
||||
-- NOTE: Run this AFTER the migration 001_initial_schema.sql
|
||||
-- 1. Create demo users in auth.users (required for FK on profiles)
|
||||
|
||||
INSERT INTO auth.users (id, instance_id, email, encrypted_password, email_confirmed_at, aud, role, raw_app_meta_data, raw_user_meta_data, created_at, updated_at, confirmation_token) VALUES
|
||||
('a1000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000000', 'ahuka@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"ahuka"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000002', '00000000-0000-0000-0000-000000000000', 'sgoti@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"sgoti"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000003', '00000000-0000-0000-0000-000000000000', 'klaatu@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"klaatu"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000004', '00000000-0000-0000-0000-000000000000', 'windigo@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"windigo"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000005', '00000000-0000-0000-0000-000000000000', 'corydoctorow@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"corydoctorow"}', NOW(), NOW(), '')
|
||||
('a1000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000000', 'alice@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"alice_underground"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000002', '00000000-0000-0000-0000-000000000000', 'david@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"david_dcl"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000003', '00000000-0000-0000-0000-000000000000', 'sara@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"sara_f"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000004', '00000000-0000-0000-0000-000000000000', 'bigflo@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"bigflo"}', NOW(), NOW(), ''),
|
||||
('a1000000-0000-0000-0000-000000000005', '00000000-0000-0000-0000-000000000000', 'mika@demo.wetalk.fr', crypt('demo-password-123', gen_salt('bf')), NOW(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"username":"mika_music"}', NOW(), NOW(), '')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- Also insert into auth.identities (required by Supabase Auth)
|
||||
INSERT INTO auth.identities (id, user_id, provider_id, provider, identity_data, last_sign_in_at, created_at, updated_at) VALUES
|
||||
('a1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000001', 'email', '{"sub":"a1000000-0000-0000-0000-000000000001","email":"ahuka@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000002', 'email', '{"sub":"a1000000-0000-0000-0000-000000000002","email":"sgoti@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000003', 'email', '{"sub":"a1000000-0000-0000-0000-000000000003","email":"klaatu@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000004', 'email', '{"sub":"a1000000-0000-0000-0000-000000000004","email":"windigo@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000005', 'email', '{"sub":"a1000000-0000-0000-0000-000000000005","email":"corydoctorow@demo.wetalk.fr"}', NOW(), NOW(), NOW())
|
||||
('a1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000001', 'email', '{"sub":"a1000000-0000-0000-0000-000000000001","email":"alice@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000002', 'email', '{"sub":"a1000000-0000-0000-0000-000000000002","email":"david@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000003', 'email', '{"sub":"a1000000-0000-0000-0000-000000000003","email":"sara@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000004', 'email', '{"sub":"a1000000-0000-0000-0000-000000000004","email":"bigflo@demo.wetalk.fr"}', NOW(), NOW(), NOW()),
|
||||
('a1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000005', 'email', '{"sub":"a1000000-0000-0000-0000-000000000005","email":"mika@demo.wetalk.fr"}', NOW(), NOW(), NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- Now insert profiles (the trigger handle_new_user won't fire on direct auth.users inserts)
|
||||
-- 2. Profiles
|
||||
|
||||
INSERT INTO public.profiles (id, username, avatar_url, bio, is_premium, free_listens_count) VALUES
|
||||
('a1000000-0000-0000-0000-000000000001', 'ahuka', NULL, 'Passionné de technologie et de logiciels libres. Contributeur Hacker Public Radio.', true, 0),
|
||||
('a1000000-0000-0000-0000-000000000002', 'sgoti', NULL, 'Podcaster et bricoleur informatique. J''aime parler de tout et de rien.', false, 3),
|
||||
('a1000000-0000-0000-0000-000000000003', 'klaatu', NULL, 'Explorateur numerique. Voyage, technologie et culture libre.', true, 0),
|
||||
('a1000000-0000-0000-0000-000000000004', 'windigo', NULL, 'Administrateur systeme le jour, podcaster la nuit.', false, 7),
|
||||
('a1000000-0000-0000-0000-000000000005', 'corydoctorow', NULL, 'Auteur, journaliste, activiste. Electronic Frontier Foundation.', true, 0)
|
||||
('a1000000-0000-0000-0000-000000000001', 'alice_underground', 'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg', 'Photographe, realisatrice et creatrice du Trippy Talk Show. Chaque episode est un univers unique.', true, 0),
|
||||
('a1000000-0000-0000-0000-000000000002', 'david_dcl', 'https://static.audiomeans.fr/img/podcast/279b0aa2-ff30-435e-90e0-5cdfa115ea33.jpg', 'Presentateur de Small Talk chez Konbini. On parle de tout sauf de ce qui vous a rendu celebre.', true, 0),
|
||||
('a1000000-0000-0000-0000-000000000003', 'sara_f', NULL, 'Actrice et invitee recurrente. J''aime les conversations sans filtre.', false, 5),
|
||||
('a1000000-0000-0000-0000-000000000004', 'bigflo', NULL, 'Rappeur, entrepreneur, patron. Invitee d''Alice Underground.', false, 2),
|
||||
('a1000000-0000-0000-0000-000000000005', 'mika_music', NULL, 'Chanteur, conteur, personnage. Invite sur les deux podcasts.', true, 0)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- 2. Create tags
|
||||
-- 3. Tags
|
||||
|
||||
INSERT INTO public.tags (id, name, slug) VALUES
|
||||
('b1000000-0000-0000-0000-000000000001', 'Technologie', 'technologie'),
|
||||
('b1000000-0000-0000-0000-000000000002', 'Open Source', 'open-source'),
|
||||
('b1000000-0000-0000-0000-000000000003', 'Jeux Video', 'jeux-video'),
|
||||
('b1000000-0000-0000-0000-000000000004', 'Tutoriel', 'tutoriel'),
|
||||
('b1000000-0000-0000-0000-000000000005', 'Culture', 'culture'),
|
||||
('b1000000-0000-0000-0000-000000000001', 'Talk Show', 'talk-show'),
|
||||
('b1000000-0000-0000-0000-000000000002', 'Comedie', 'comedie'),
|
||||
('b1000000-0000-0000-0000-000000000003', 'Culture', 'culture'),
|
||||
('b1000000-0000-0000-0000-000000000004', 'Musique', 'musique'),
|
||||
('b1000000-0000-0000-0000-000000000005', 'Cinema', 'cinema'),
|
||||
('b1000000-0000-0000-0000-000000000006', 'Voyage', 'voyage'),
|
||||
('b1000000-0000-0000-0000-000000000007', 'Productivite', 'productivite'),
|
||||
('b1000000-0000-0000-0000-000000000008', 'Vie Quotidienne', 'vie-quotidienne'),
|
||||
('b1000000-0000-0000-0000-000000000009', 'Droit Numerique', 'droit-numerique'),
|
||||
('b1000000-0000-0000-0000-000000000010', 'Windows', 'windows'),
|
||||
('b1000000-0000-0000-0000-000000000011', 'Linux', 'linux'),
|
||||
('b1000000-0000-0000-0000-000000000012', 'Podcasting', 'podcasting')
|
||||
('b1000000-0000-0000-0000-000000000007', 'Societe', 'societe'),
|
||||
('b1000000-0000-0000-0000-000000000008', 'Rap', 'rap'),
|
||||
('b1000000-0000-0000-0000-000000000009', 'Humour', 'humour'),
|
||||
('b1000000-0000-0000-0000-000000000010', 'Interview', 'interview'),
|
||||
('b1000000-0000-0000-0000-000000000011', 'French Touch', 'french-touch'),
|
||||
('b1000000-0000-0000-0000-000000000012', 'Noel', 'noel')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- 3. Insert podcasts (audio from archive.org, Creative Commons)
|
||||
-- 4. Podcasts — Alice Underground
|
||||
|
||||
INSERT INTO public.podcasts (id, creator_id, title, description, audio_url, duration_seconds, cover_url, plays_count, created_at) VALUES
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000001',
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Creative Commons Search Engine',
|
||||
'Decouvrez Openverse, le nouveau moteur de recherche pour le contenu Creative Commons. Une evolution de l''ancien CC Search developpe par Creative Commons, repris par WordPress, et qui continue d''evoluer.',
|
||||
'https://archive.org/download/hpr3977/hpr3977.mp3',
|
||||
358,
|
||||
NULL,
|
||||
247,
|
||||
NOW() - INTERVAL '2 days'
|
||||
'God Save Stephane Bern',
|
||||
'Stephane Bern partage ses anecdotes sur la royaute, les Windsor et Versailles dans le Trippy Talk Show d''Alice.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/bcd67c67-cae7-481b-9aa6-ebcfa6067969.mp3',
|
||||
3661,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
1247,
|
||||
'2026-04-08'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000002',
|
||||
'a1000000-0000-0000-0000-000000000003',
|
||||
'Playing Alpha Centauri, Part 1',
|
||||
'Premiere partie de nos conseils pour jouer a Alpha Centauri. On commence par regarder comment approcher ce jeu de strategie classique et les bases pour bien demarrer.',
|
||||
'https://archive.org/download/hpr3970/hpr3970.mp3',
|
||||
1102,
|
||||
NULL,
|
||||
183,
|
||||
NOW() - INTERVAL '5 days'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Dans notre bulle avec Sara Forestier',
|
||||
'Sara Forestier parle de desir et de sexualite avec humour et franchise dans un episode sans tabou.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/4215b52f-8f0b-42d8-9310-55181e3860f1.mp3',
|
||||
3254,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
983,
|
||||
'2026-04-01'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000003',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Comment se faire des amis sur Internet',
|
||||
'Sgoti et Mugs discutent avec des amis de la facon de creer des liens authentiques en ligne. Un echange decontracte sur les relations humaines a l''ere du numerique.',
|
||||
'https://archive.org/download/hpr3971/hpr3971.mp3',
|
||||
2245,
|
||||
NULL,
|
||||
412,
|
||||
NOW() - INTERVAL '3 days'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'C''est qui le patron ? Avec Bigflo',
|
||||
'Le rappeur Bigflo se confie sur le business, l''ambition et la vie d''artiste avec son style caracteristique.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/5497f8c6-0fc3-4393-b77c-2d47627068d8.mp3',
|
||||
4189,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
2134,
|
||||
'2026-03-25'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000004',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Filtrage Thunderbird : garder une boite mail propre',
|
||||
'Sgoti explique comment filtrer efficacement votre boite de reception Thunderbird pour rester organise et productif au quotidien.',
|
||||
'https://archive.org/download/hpr3972/hpr3972.mp3',
|
||||
743,
|
||||
NULL,
|
||||
156,
|
||||
NOW() - INTERVAL '7 days'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Touching grass, avec Berengere Krief',
|
||||
'Alice et Berengere Krief explorent les relations, l''autonomie du corps et le desir en pleine nature.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/d4aa4571-6b0a-4f73-9b2d-72aabfeef066.mp3',
|
||||
3311,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
756,
|
||||
'2026-03-18'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000005',
|
||||
'a1000000-0000-0000-0000-000000000004',
|
||||
'Creer un preset d''equalisation pour vos podcasts',
|
||||
'Une methode pour creer un traitement audio reproductible pour vos episodes de podcast. Apprenez a standardiser la qualite sonore de vos productions.',
|
||||
'https://archive.org/download/hpr3973/hpr3973.mp3',
|
||||
1019,
|
||||
NULL,
|
||||
298,
|
||||
NOW() - INTERVAL '4 days'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Un sosie presque parfait avec Laurent Lafitte',
|
||||
'L''acteur tout juste cesairse Laurent Lafitte se prete au jeu avec humour, charme et secrets inattendus.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/e38e2aaa-4e2d-4581-981f-50423256b801.mp3',
|
||||
2233,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
654,
|
||||
'2026-03-04'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000006',
|
||||
'a1000000-0000-0000-0000-000000000004',
|
||||
'Decouverte de USBimager',
|
||||
'Pourquoi vous devriez utiliser USBimager. Introduction a cet outil pratique pour ecrire des images sur des peripheriques de stockage en toute simplicite.',
|
||||
'https://archive.org/download/hpr3974/hpr3974.mp3',
|
||||
1019,
|
||||
NULL,
|
||||
89,
|
||||
NOW() - INTERVAL '10 days'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Elementaire mon cher Augustin Trapenard',
|
||||
'Le journaliste Augustin Trapenard et Alice menent l''enquete sur la litterature et la culture en detectives amateurs.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/4f41d0c9-88b9-4b54-a4e6-2fae3076e74c.mp3',
|
||||
4591,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
1876,
|
||||
'2026-02-25'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000007',
|
||||
'a1000000-0000-0000-0000-000000000003',
|
||||
'Mesa Verde : journal de voyage Colorado',
|
||||
'Notre recit d''une journee de visite a Mesa Verde, Colorado. Nous etions la pour un mariage et avons profite pour explorer ce site remarquable.',
|
||||
'https://archive.org/download/hpr3975/hpr3975.mp3',
|
||||
730,
|
||||
NULL,
|
||||
321,
|
||||
NOW() - INTERVAL '1 day'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Les baddies font du ski avec Lolo Zouai',
|
||||
'L''artiste franco-americaine Lolo Zouai et Alice parlent musique, identite et culture sur les pistes de ski.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/8a2bcffc-f767-4132-9403-b8c4be072be4.mp3',
|
||||
3161,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
543,
|
||||
'2026-02-18'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000008',
|
||||
'a1000000-0000-0000-0000-000000000004',
|
||||
'L''evolution de l''outil Capture d''ecran Windows',
|
||||
'KD retrace l''histoire de l''evolution des outils de capture d''ecran sous Windows, du Print Screen au Snipping Tool moderne.',
|
||||
'https://archive.org/download/hpr3976/hpr3976.mp3',
|
||||
429,
|
||||
NULL,
|
||||
134,
|
||||
NOW() - INTERVAL '6 days'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'La cavalerie arrive avec Myd',
|
||||
'Episode live au festival Spotify RADAR avec le DJ Myd. Musique, fun et bonne humeur au programme.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/2ce710d2-4b18-41da-b165-1a2b0fdf8041.mp3',
|
||||
2371,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
412,
|
||||
'2026-02-04'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000009',
|
||||
'a1000000-0000-0000-0000-000000000005',
|
||||
'Les trolls du droit d''auteur Creative Commons',
|
||||
'Discussion sur Pixsy, un nouveau type de troll du droit d''auteur qui cible les utilisateurs de Creative Commons. Lecture et analyse d''un article de fond sur ce sujet preoccupant.',
|
||||
'https://archive.org/download/Cory_Doctorow_Podcast_412/Cory_Doctorow_Podcast_412_-_A_Bug_in_Early_Creative_Commons_Licenses.mp3',
|
||||
2441,
|
||||
NULL,
|
||||
567,
|
||||
NOW() - INTERVAL '8 days'
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Elfes in black avec Kiddy Smile',
|
||||
'Le DJ et producteur Kiddy Smile se livre avec franchise sur la musique, ses experiences et ses secrets.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/71e76ea0-64bf-4ff4-81f2-f1aefa1d0519.mp3',
|
||||
4411,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
789,
|
||||
'2026-01-28'
|
||||
),
|
||||
(
|
||||
'c1000000-0000-0000-0000-000000000010',
|
||||
'a1000000-0000-0000-0000-000000000001',
|
||||
'Dans la foret avec Mika',
|
||||
'Le chanteur Mika revele des histoires sur sa carriere, ses rencontres celebres et ses secrets de famille.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/054a325f-9887-4b4d-9982-a76a2ac03c20.mp3',
|
||||
3180,
|
||||
'https://static.audiomeans.fr/img/podcast/e113761f-a5db-4bf2-80db-b99fe2448d10.jpg',
|
||||
1567,
|
||||
'2026-01-14'
|
||||
);
|
||||
|
||||
-- 4. Associate tags to podcasts
|
||||
-- 5. Podcasts — Small Talk (Konbini)
|
||||
|
||||
INSERT INTO public.podcasts (id, creator_id, title, description, audio_url, duration_seconds, cover_url, plays_count, created_at) VALUES
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000001',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Clara Morgane et les grands-meres en laisse',
|
||||
'David explore des sujets inattendus avec Clara Morgane. Revelations sur les poils de corps et introspection personnelle.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/25cb9c26-6faf-416a-9588-432debd1519d.mp3',
|
||||
4646,
|
||||
'https://static.audiomeans.fr/img/episode/f6c68dc9-191e-4565-bb1e-311efac91042.jpg',
|
||||
3421,
|
||||
'2026-04-08'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000002',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Francois Damiens et le complet slip-basket',
|
||||
'Francois Damiens tente d''esquiver les questions pieges de David dans un episode hilarant et imprevisible.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/c74aa7df-11f4-4e43-88eb-af5656d9e942.mp3',
|
||||
3448,
|
||||
'https://static.audiomeans.fr/img/episode/6ebe8e28-344e-43c3-9aa6-726229e5d441.jpg',
|
||||
2876,
|
||||
'2026-03-25'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000003',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Caballero & JeanJass & la pipeline d''eau minerale',
|
||||
'Le duo de rappeurs belges se prete au jeu des questions absurdes. Passoire a connards pleinement fonctionnelle.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/aeb16e4b-9417-485a-9be9-2f3a9ee6191a.mp3',
|
||||
4906,
|
||||
'https://static.audiomeans.fr/img/episode/5c363325-7e7d-47f9-9d05-9545f48a14c7.jpg',
|
||||
1987,
|
||||
'2026-03-18'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000004',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Jeremy Ferrari et les vengeances actives',
|
||||
'On commence deep, on finit deep et on rigole au milieu. Jeremy Ferrari dans toute sa splendeur.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/0b4967c5-bf51-4006-a9fc-86a2b54b7f48.mp3',
|
||||
4788,
|
||||
'https://static.audiomeans.fr/img/episode/126423ee-f543-41d3-a1cb-2432dabe7b0b.jpg',
|
||||
4532,
|
||||
'2026-03-04'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000005',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Tayc et le reculage de dents',
|
||||
'Le roi de l''afrolove fait des revelations choc. Confessions surprenantes de l''artiste Afrobeats.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/7c54e552-e242-4dc2-a43d-07c0aa08080b.mp3',
|
||||
4708,
|
||||
'https://static.audiomeans.fr/img/episode/df2f2dff-6b32-441b-9f99-8aa13590437a.png',
|
||||
1654,
|
||||
'2026-02-26'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000006',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Cyprien et le palmares des sueurs',
|
||||
'Deux personnes dont les zones du corps se rejoignent par les poils. Un episode mythique avec le youtubeur.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/5d21ba37-18a4-43b9-8277-d1b29fcfd421.mp3',
|
||||
3365,
|
||||
'https://static.audiomeans.fr/img/episode/1acc2e6c-cf8b-4608-8eb7-a98cd5f81fae.jpg',
|
||||
5234,
|
||||
'2026-02-18'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000007',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Pierre Niney et le reseau tentaculaire de baby-sitting',
|
||||
'Que Zeus benisse, Pierre Niney est dans Small Talk. L''acteur revele ses reseaux insoupconnes.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/493d9e44-7f97-4cf3-907a-701a83933e09.mp3',
|
||||
3663,
|
||||
'https://static.audiomeans.fr/img/episode/835154f2-adfe-4942-8a40-5f4e6c102b08.jpg',
|
||||
3876,
|
||||
'2026-01-21'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000008',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Julien Dore et la matification cezanesque',
|
||||
'David decouvre la raison de sa depression vieille de 20 ans. Un episode introspectif et touchant avec Julien Dore.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/4089b170-240e-4073-bbec-72392abc1075.mp3',
|
||||
5127,
|
||||
'https://static.audiomeans.fr/img/episode/8b0163a4-6ecf-498a-b597-8166cde8a1fd.jpg',
|
||||
6543,
|
||||
'2026-01-07'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000009',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Episode de Noel avec Mika',
|
||||
'Mika a un cousin exorciste et un dealer de Guignols. L''episode special Noel le plus dingue de Small Talk.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/0385fc90-d888-4776-b4e6-95199cad49d1.mp3',
|
||||
5096,
|
||||
'https://static.audiomeans.fr/img/episode/b4ed8cea-4d48-4825-9712-f6315a8b7872.jpg',
|
||||
7821,
|
||||
'2025-12-24'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000010',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Rim''K et le bolossage de la Foire du Trone',
|
||||
'Caler ou coffrer ? Telle est la question. Rim''K raconte ses aventures de jeunesse et ses choix de vie.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/f5d1d1dd-ad64-40aa-bab9-270bf0112dd9.mp3',
|
||||
4833,
|
||||
'https://static.audiomeans.fr/img/episode/df201cf6-c681-40b5-b3d2-7642233ef830.jpg',
|
||||
2345,
|
||||
'2025-12-10'
|
||||
),
|
||||
(
|
||||
'c2000000-0000-0000-0000-000000000011',
|
||||
'a1000000-0000-0000-0000-000000000002',
|
||||
'Fabrice Eboue et la guerre du pourboire',
|
||||
'Fabrice Eboue nous apprend a maitriser l''art du tips. Etiquette, differences culturelles et anecdotes.',
|
||||
'https://audio.audiomeans.fr/file/jxBCsdLAGN/af20ed5c-c3ff-452d-a92e-77a4c1327eaa.mp3',
|
||||
4237,
|
||||
'https://static.audiomeans.fr/img/episode/8fd10e53-385b-4be5-ab1e-919dc0ffef28.jpg',
|
||||
1987,
|
||||
'2025-12-03'
|
||||
);
|
||||
|
||||
-- 6. Associate tags to podcasts
|
||||
|
||||
INSERT INTO public.podcast_tags (podcast_id, tag_id) VALUES
|
||||
-- Creative Commons Search Engine
|
||||
('c1000000-0000-0000-0000-000000000001', 'b1000000-0000-0000-0000-000000000002'), -- Open Source
|
||||
('c1000000-0000-0000-0000-000000000001', 'b1000000-0000-0000-0000-000000000001'), -- Technologie
|
||||
-- Alpha Centauri
|
||||
('c1000000-0000-0000-0000-000000000002', 'b1000000-0000-0000-0000-000000000003'), -- Jeux Video
|
||||
('c1000000-0000-0000-0000-000000000002', 'b1000000-0000-0000-0000-000000000004'), -- Tutoriel
|
||||
-- Comment se faire des amis
|
||||
('c1000000-0000-0000-0000-000000000003', 'b1000000-0000-0000-0000-000000000008'), -- Vie Quotidienne
|
||||
('c1000000-0000-0000-0000-000000000003', 'b1000000-0000-0000-0000-000000000005'), -- Culture
|
||||
-- Thunderbird
|
||||
('c1000000-0000-0000-0000-000000000004', 'b1000000-0000-0000-0000-000000000007'), -- Productivite
|
||||
('c1000000-0000-0000-0000-000000000004', 'b1000000-0000-0000-0000-000000000001'), -- Technologie
|
||||
-- Equalisation podcast
|
||||
('c1000000-0000-0000-0000-000000000005', 'b1000000-0000-0000-0000-000000000012'), -- Podcasting
|
||||
('c1000000-0000-0000-0000-000000000005', 'b1000000-0000-0000-0000-000000000004'), -- Tutoriel
|
||||
-- USBimager
|
||||
('c1000000-0000-0000-0000-000000000006', 'b1000000-0000-0000-0000-000000000011'), -- Linux
|
||||
('c1000000-0000-0000-0000-000000000006', 'b1000000-0000-0000-0000-000000000002'), -- Open Source
|
||||
-- Mesa Verde
|
||||
('c1000000-0000-0000-0000-000000000007', 'b1000000-0000-0000-0000-000000000006'), -- Voyage
|
||||
('c1000000-0000-0000-0000-000000000007', 'b1000000-0000-0000-0000-000000000005'), -- Culture
|
||||
-- Snipping Tool
|
||||
('c1000000-0000-0000-0000-000000000008', 'b1000000-0000-0000-0000-000000000010'), -- Windows
|
||||
('c1000000-0000-0000-0000-000000000008', 'b1000000-0000-0000-0000-000000000001'), -- Technologie
|
||||
-- Cory Doctorow - Copyright trolls
|
||||
('c1000000-0000-0000-0000-000000000009', 'b1000000-0000-0000-0000-000000000009'), -- Droit Numerique
|
||||
('c1000000-0000-0000-0000-000000000009', 'b1000000-0000-0000-0000-000000000002'); -- Open Source
|
||||
-- Alice Underground
|
||||
('c1000000-0000-0000-0000-000000000001', 'b1000000-0000-0000-0000-000000000001'), -- Talk Show
|
||||
('c1000000-0000-0000-0000-000000000001', 'b1000000-0000-0000-0000-000000000003'), -- Culture
|
||||
('c1000000-0000-0000-0000-000000000002', 'b1000000-0000-0000-0000-000000000005'), -- Cinema
|
||||
('c1000000-0000-0000-0000-000000000002', 'b1000000-0000-0000-0000-000000000007'), -- Societe
|
||||
('c1000000-0000-0000-0000-000000000003', 'b1000000-0000-0000-0000-000000000008'), -- Rap
|
||||
('c1000000-0000-0000-0000-000000000003', 'b1000000-0000-0000-0000-000000000010'), -- Interview
|
||||
('c1000000-0000-0000-0000-000000000004', 'b1000000-0000-0000-0000-000000000002'), -- Comedie
|
||||
('c1000000-0000-0000-0000-000000000004', 'b1000000-0000-0000-0000-000000000007'), -- Societe
|
||||
('c1000000-0000-0000-0000-000000000005', 'b1000000-0000-0000-0000-000000000005'), -- Cinema
|
||||
('c1000000-0000-0000-0000-000000000005', 'b1000000-0000-0000-0000-000000000009'), -- Humour
|
||||
('c1000000-0000-0000-0000-000000000006', 'b1000000-0000-0000-0000-000000000003'), -- Culture
|
||||
('c1000000-0000-0000-0000-000000000006', 'b1000000-0000-0000-0000-000000000010'), -- Interview
|
||||
('c1000000-0000-0000-0000-000000000007', 'b1000000-0000-0000-0000-000000000004'), -- Musique
|
||||
('c1000000-0000-0000-0000-000000000007', 'b1000000-0000-0000-0000-000000000011'), -- French Touch
|
||||
('c1000000-0000-0000-0000-000000000008', 'b1000000-0000-0000-0000-000000000004'), -- Musique
|
||||
('c1000000-0000-0000-0000-000000000008', 'b1000000-0000-0000-0000-000000000011'), -- French Touch
|
||||
('c1000000-0000-0000-0000-000000000009', 'b1000000-0000-0000-0000-000000000004'), -- Musique
|
||||
('c1000000-0000-0000-0000-000000000009', 'b1000000-0000-0000-0000-000000000001'), -- Talk Show
|
||||
('c1000000-0000-0000-0000-000000000010', 'b1000000-0000-0000-0000-000000000004'), -- Musique
|
||||
('c1000000-0000-0000-0000-000000000010', 'b1000000-0000-0000-0000-000000000010'), -- Interview
|
||||
-- Small Talk
|
||||
('c2000000-0000-0000-0000-000000000001', 'b1000000-0000-0000-0000-000000000009'), -- Humour
|
||||
('c2000000-0000-0000-0000-000000000001', 'b1000000-0000-0000-0000-000000000010'), -- Interview
|
||||
('c2000000-0000-0000-0000-000000000002', 'b1000000-0000-0000-0000-000000000002'), -- Comedie
|
||||
('c2000000-0000-0000-0000-000000000002', 'b1000000-0000-0000-0000-000000000009'), -- Humour
|
||||
('c2000000-0000-0000-0000-000000000003', 'b1000000-0000-0000-0000-000000000008'), -- Rap
|
||||
('c2000000-0000-0000-0000-000000000003', 'b1000000-0000-0000-0000-000000000009'), -- Humour
|
||||
('c2000000-0000-0000-0000-000000000004', 'b1000000-0000-0000-0000-000000000002'), -- Comedie
|
||||
('c2000000-0000-0000-0000-000000000004', 'b1000000-0000-0000-0000-000000000001'), -- Talk Show
|
||||
('c2000000-0000-0000-0000-000000000005', 'b1000000-0000-0000-0000-000000000004'), -- Musique
|
||||
('c2000000-0000-0000-0000-000000000005', 'b1000000-0000-0000-0000-000000000010'), -- Interview
|
||||
('c2000000-0000-0000-0000-000000000006', 'b1000000-0000-0000-0000-000000000009'), -- Humour
|
||||
('c2000000-0000-0000-0000-000000000006', 'b1000000-0000-0000-0000-000000000007'), -- Societe
|
||||
('c2000000-0000-0000-0000-000000000007', 'b1000000-0000-0000-0000-000000000005'), -- Cinema
|
||||
('c2000000-0000-0000-0000-000000000007', 'b1000000-0000-0000-0000-000000000010'), -- Interview
|
||||
('c2000000-0000-0000-0000-000000000008', 'b1000000-0000-0000-0000-000000000004'), -- Musique
|
||||
('c2000000-0000-0000-0000-000000000008', 'b1000000-0000-0000-0000-000000000003'), -- Culture
|
||||
('c2000000-0000-0000-0000-000000000009', 'b1000000-0000-0000-0000-000000000004'), -- Musique
|
||||
('c2000000-0000-0000-0000-000000000009', 'b1000000-0000-0000-0000-000000000012'), -- Noel
|
||||
('c2000000-0000-0000-0000-000000000010', 'b1000000-0000-0000-0000-000000000008'), -- Rap
|
||||
('c2000000-0000-0000-0000-000000000010', 'b1000000-0000-0000-0000-000000000001'), -- Talk Show
|
||||
('c2000000-0000-0000-0000-000000000011', 'b1000000-0000-0000-0000-000000000002'), -- Comedie
|
||||
('c2000000-0000-0000-0000-000000000011', 'b1000000-0000-0000-0000-000000000009'); -- Humour
|
||||
|
||||
-- 7. Likes
|
||||
|
||||
-- 5. Add some likes
|
||||
INSERT INTO public.likes (user_id, podcast_id) VALUES
|
||||
('a1000000-0000-0000-0000-000000000001', 'c1000000-0000-0000-0000-000000000003'),
|
||||
('a1000000-0000-0000-0000-000000000001', 'c1000000-0000-0000-0000-000000000009'),
|
||||
-- Alice likes Small Talk episodes
|
||||
('a1000000-0000-0000-0000-000000000001', 'c2000000-0000-0000-0000-000000000004'),
|
||||
('a1000000-0000-0000-0000-000000000001', 'c2000000-0000-0000-0000-000000000008'),
|
||||
('a1000000-0000-0000-0000-000000000001', 'c2000000-0000-0000-0000-000000000009'),
|
||||
-- David likes Alice Underground episodes
|
||||
('a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000001'),
|
||||
('a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000007'),
|
||||
('a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000009'),
|
||||
('a1000000-0000-0000-0000-000000000003', 'c1000000-0000-0000-0000-000000000005'),
|
||||
('a1000000-0000-0000-0000-000000000003', 'c1000000-0000-0000-0000-000000000003'),
|
||||
('a1000000-0000-0000-0000-000000000004', 'c1000000-0000-0000-0000-000000000001'),
|
||||
('a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000006'),
|
||||
('a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000010'),
|
||||
-- Sara likes various
|
||||
('a1000000-0000-0000-0000-000000000003', 'c1000000-0000-0000-0000-000000000002'),
|
||||
('a1000000-0000-0000-0000-000000000003', 'c2000000-0000-0000-0000-000000000007'),
|
||||
('a1000000-0000-0000-0000-000000000003', 'c2000000-0000-0000-0000-000000000006'),
|
||||
-- Bigflo likes rap episodes
|
||||
('a1000000-0000-0000-0000-000000000004', 'c2000000-0000-0000-0000-000000000003'),
|
||||
('a1000000-0000-0000-0000-000000000004', 'c2000000-0000-0000-0000-000000000010'),
|
||||
('a1000000-0000-0000-0000-000000000004', 'c1000000-0000-0000-0000-000000000003'),
|
||||
('a1000000-0000-0000-0000-000000000004', 'c1000000-0000-0000-0000-000000000007'),
|
||||
('a1000000-0000-0000-0000-000000000005', 'c1000000-0000-0000-0000-000000000003'),
|
||||
('a1000000-0000-0000-0000-000000000005', 'c1000000-0000-0000-0000-000000000005'),
|
||||
('a1000000-0000-0000-0000-000000000005', 'c1000000-0000-0000-0000-000000000007');
|
||||
-- Mika likes his own episodes and others
|
||||
('a1000000-0000-0000-0000-000000000005', 'c1000000-0000-0000-0000-000000000006'),
|
||||
('a1000000-0000-0000-0000-000000000005', 'c2000000-0000-0000-0000-000000000008'),
|
||||
('a1000000-0000-0000-0000-000000000005', 'c2000000-0000-0000-0000-000000000001');
|
||||
|
||||
-- 8. Comments
|
||||
|
||||
-- 6. Add some comments
|
||||
INSERT INTO public.comments (id, user_id, podcast_id, content, created_at) VALUES
|
||||
('d1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000001', 'Super episode ! Je ne connaissais pas Openverse, merci pour la decouverte.', NOW() - INTERVAL '1 day'),
|
||||
('d1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000003', 'c1000000-0000-0000-0000-000000000001', 'Tres utile pour trouver du contenu libre. Je recommande aussi ccMixter pour la musique.', NOW() - INTERVAL '12 hours'),
|
||||
('d1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000001', 'c1000000-0000-0000-0000-000000000003', 'J''adore ce format de discussion decontractee. On s''y retrouve tous un peu !', NOW() - INTERVAL '2 days'),
|
||||
('d1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000004', 'c1000000-0000-0000-0000-000000000003', 'Tellement vrai ce qui est dit sur les communautes en ligne. Bel episode.', NOW() - INTERVAL '2 days'),
|
||||
('d1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000005', 'c1000000-0000-0000-0000-000000000009', 'Ce sujet me tient a coeur. Les trolls du copyright sont un vrai probleme pour le libre.', NOW() - INTERVAL '7 days'),
|
||||
('d1000000-0000-0000-0000-000000000006', 'a1000000-0000-0000-0000-000000000001', 'c1000000-0000-0000-0000-000000000005', 'Exactement ce qu''il me fallait pour ameliorer le son de mon podcast. Merci !', NOW() - INTERVAL '3 days'),
|
||||
('d1000000-0000-0000-0000-000000000007', 'a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000007', 'Mesa Verde a l''air magnifique. Ca donne envie de voyager !', NOW() - INTERVAL '20 hours'),
|
||||
('d1000000-0000-0000-0000-000000000008', 'a1000000-0000-0000-0000-000000000003', 'c1000000-0000-0000-0000-000000000002', 'Alpha Centauri, quel classique ! J''attends la partie 2 avec impatience.', NOW() - INTERVAL '4 days');
|
||||
('d1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000003', 'c1000000-0000-0000-0000-000000000002', 'Merci Alice pour cet episode, ca fait du bien d''entendre des conversations aussi libres !', NOW() - INTERVAL '1 day'),
|
||||
('d1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000004', 'c1000000-0000-0000-0000-000000000003', 'Le passage sur le business est tellement vrai. Bigflo c''est un vrai patron.', NOW() - INTERVAL '2 days'),
|
||||
('d1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000006', 'Trapenard en detective amateur c''est exactement le contenu dont on avait besoin.', NOW() - INTERVAL '3 days'),
|
||||
('d1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000001', 'c2000000-0000-0000-0000-000000000004', 'Jeremy Ferrari est incroyable dans cet episode. David sait poser les bonnes questions !', NOW() - INTERVAL '1 day'),
|
||||
('d1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000005', 'c2000000-0000-0000-0000-000000000009', 'Mon episode prefere ! Le cousin exorciste m''a tue de rire.', NOW() - INTERVAL '5 days'),
|
||||
('d1000000-0000-0000-0000-000000000006', 'a1000000-0000-0000-0000-000000000003', 'c2000000-0000-0000-0000-000000000007', 'Pierre Niney est tellement drole quand il parle de baby-sitting. Chef d''oeuvre.', NOW() - INTERVAL '4 days'),
|
||||
('d1000000-0000-0000-0000-000000000007', 'a1000000-0000-0000-0000-000000000004', 'c2000000-0000-0000-0000-000000000003', 'Caballero & JeanJass dans Small Talk c''est le crossover qu''on attendait tous.', NOW() - INTERVAL '2 days'),
|
||||
('d1000000-0000-0000-0000-000000000008', 'a1000000-0000-0000-0000-000000000002', 'c1000000-0000-0000-0000-000000000010', 'Mika est un conteur ne. L''episode dans la foret est magique.', NOW() - INTERVAL '6 days'),
|
||||
('d1000000-0000-0000-0000-000000000009', 'a1000000-0000-0000-0000-000000000001', 'c2000000-0000-0000-0000-000000000008', 'L''episode avec Julien Dore m''a fait pleurer et rire en meme temps. Bravo David.', NOW() - INTERVAL '3 days'),
|
||||
('d1000000-0000-0000-0000-000000000010', 'a1000000-0000-0000-0000-000000000005', 'c2000000-0000-0000-0000-000000000006', 'Cyprien dans Small Talk, on en redemande ! Le palmares des sueurs est legendaire.', NOW() - INTERVAL '7 days');
|
||||
|
||||
-- 9. Follows
|
||||
|
||||
-- 7. Add some follows
|
||||
INSERT INTO public.follows (follower_id, following_id) VALUES
|
||||
('a1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000005'),
|
||||
('a1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000001'),
|
||||
('a1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000003'),
|
||||
('a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000002'),
|
||||
('a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000005'),
|
||||
('a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000001'),
|
||||
('a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000002'),
|
||||
('a1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000003');
|
||||
('a1000000-0000-0000-0000-000000000002', 'a1000000-0000-0000-0000-000000000001'), -- David suit Alice
|
||||
('a1000000-0000-0000-0000-000000000001', 'a1000000-0000-0000-0000-000000000002'), -- Alice suit David
|
||||
('a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000001'), -- Sara suit Alice
|
||||
('a1000000-0000-0000-0000-000000000003', 'a1000000-0000-0000-0000-000000000002'), -- Sara suit David
|
||||
('a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000001'), -- Bigflo suit Alice
|
||||
('a1000000-0000-0000-0000-000000000004', 'a1000000-0000-0000-0000-000000000002'), -- Bigflo suit David
|
||||
('a1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000001'), -- Mika suit Alice
|
||||
('a1000000-0000-0000-0000-000000000005', 'a1000000-0000-0000-0000-000000000002'); -- Mika suit David
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user