Files
screenclipper/packages/db/prisma/schema.prisma
T
ayrisdevandClaude Sonnet 5 3e01116729 feat: kanal başına segment süresini panelden ayarlama
Channel.segmentTimeSec (nullable, null = global SEGMENT_TIME_SEC env
var'ı kullan) eklendi. Kanal detay sayfasından dakika cinsinden
girilebiliyor, StreamIngestJob'a taşınıp streamIngest.ts'te ffmpeg'in
-segment_time argümanına yansıyor. Sadece o kanal için bundan sonra
başlayacak yeni kayıt oturumlarını etkiler — halihazırda çalışan bir
ffmpeg process'inin segment süresi zaten sabitlenmiş durumda.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-02 15:14:09 +03:00

120 lines
3.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum RawSegmentStatus {
PENDING
PROCESSED
DISCARDED
}
enum CandidateSegmentStatus {
PENDING_STT
TRANSCRIBED
FAILED
}
enum ShortVideoStatus {
PENDING
RENDERING
READY
FAILED
}
model Channel {
id String @id @default(cuid())
name String
youtubeHandle String @map("youtube_handle")
channelId String @unique @map("channel_id")
isActive Boolean @default(true) @map("is_active")
lastCheckedAt DateTime? @map("last_checked_at")
createdAt DateTime @default(now()) @map("created_at")
// null = global varsayılanı (SEGMENT_TIME_SEC env var) kullan
segmentTimeSec Int? @map("segment_time_sec")
sessions StreamSession[]
@@map("channels")
}
model StreamSession {
id String @id @default(cuid())
channelId String @map("channel_id")
channel Channel @relation(fields: [channelId], references: [id])
liveVideoId String? @map("live_video_id")
startedAt DateTime @default(now()) @map("started_at")
endedAt DateTime? @map("ended_at")
totalSegments Int @default(0) @map("total_segments")
segments RawSegment[]
@@map("stream_sessions")
}
model RawSegment {
id String @id @default(cuid())
sessionId String @map("session_id")
session StreamSession @relation(fields: [sessionId], references: [id])
filePath String @map("file_path")
duration Int
startedAt DateTime @map("started_at")
status RawSegmentStatus @default(PENDING)
createdAt DateTime @default(now()) @map("created_at")
candidates CandidateSegment[]
@@map("raw_segments")
}
model CandidateSegment {
id String @id @default(cuid())
rawSegmentId String @map("raw_segment_id")
rawSegment RawSegment @relation(fields: [rawSegmentId], references: [id])
startSec Int @map("start_sec")
endSec Int @map("end_sec")
audioPeakScore Float? @map("audio_peak_score")
chatVelocityScore Float? @map("chat_velocity_score")
transcriptJson Json? @map("transcript_json")
status CandidateSegmentStatus @default(PENDING_STT)
createdAt DateTime @default(now()) @map("created_at")
short ShortVideo?
@@map("candidate_segments")
}
model ShortVideo {
id String @id @default(cuid())
candidateId String @unique @map("candidate_id")
candidate CandidateSegment @relation(fields: [candidateId], references: [id])
filePath String? @map("file_path")
status ShortVideoStatus @default(PENDING)
errorMessage String? @map("error_message")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("short_videos")
}
model AppSetting {
key String @id
value String
updatedAt DateTime @updatedAt @map("updated_at")
@@map("app_settings")
}
model User {
id String @id @default(cuid())
username String @unique
passwordHash String @map("password_hash")
createdAt DateTime @default(now()) @map("created_at")
@@map("users")
}