Restored to 'da5c38c23546b6ac8177dac9774fb40023d30283'

Replit-Restored-To: da5c38c235
This commit is contained in:
sebastjanartic
2025-08-04 20:37:56 +00:00
parent 5bbf9e6c1b
commit 76f430775e
9 changed files with 13 additions and 538 deletions
+1 -79
View File
@@ -1,4 +1,4 @@
import { sql, relations } from "drizzle-orm";
import { sql } from "drizzle-orm";
import { pgTable, text, varchar, integer, timestamp } from "drizzle-orm/pg-core";
import { createInsertSchema } from "drizzle-zod";
import { z } from "zod";
@@ -17,88 +17,10 @@ export const videos = pgTable("videos", {
createdAt: timestamp("created_at").notNull().default(sql`CURRENT_TIMESTAMP`),
});
// User playlists table
export const playlists = pgTable("playlists", {
id: varchar("id").primaryKey().default(sql`gen_random_uuid()`),
name: text("name").notNull(),
description: text("description"),
isPublic: integer("is_public").notNull().default(0), // 0 = private, 1 = public
userId: varchar("user_id"), // For future user authentication
createdAt: timestamp("created_at").notNull().default(sql`CURRENT_TIMESTAMP`),
updatedAt: timestamp("updated_at").notNull().default(sql`CURRENT_TIMESTAMP`),
});
// Junction table for playlist-video relationships
export const playlistVideos = pgTable("playlist_videos", {
id: varchar("id").primaryKey().default(sql`gen_random_uuid()`),
playlistId: varchar("playlist_id").notNull(),
videoId: varchar("video_id").notNull(),
position: integer("position").notNull().default(0), // Order within playlist
addedAt: timestamp("added_at").notNull().default(sql`CURRENT_TIMESTAMP`),
});
// Favorites table (simplified playlist for favorites)
export const favorites = pgTable("favorites", {
id: varchar("id").primaryKey().default(sql`gen_random_uuid()`),
videoId: varchar("video_id").notNull(),
userId: varchar("user_id"), // For future user authentication
addedAt: timestamp("added_at").notNull().default(sql`CURRENT_TIMESTAMP`),
});
export const insertVideoSchema = createInsertSchema(videos).omit({
id: true,
createdAt: true,
});
export const insertPlaylistSchema = createInsertSchema(playlists).omit({
id: true,
createdAt: true,
updatedAt: true,
});
export const insertPlaylistVideoSchema = createInsertSchema(playlistVideos).omit({
id: true,
addedAt: true,
});
export const insertFavoriteSchema = createInsertSchema(favorites).omit({
id: true,
addedAt: true,
});
// Relations
export const playlistsRelations = relations(playlists, ({ many }) => ({
playlistVideos: many(playlistVideos),
}));
export const playlistVideosRelations = relations(playlistVideos, ({ one }) => ({
playlist: one(playlists, {
fields: [playlistVideos.playlistId],
references: [playlists.id],
}),
video: one(videos, {
fields: [playlistVideos.videoId],
references: [videos.id],
}),
}));
export const videosRelations = relations(videos, ({ many }) => ({
playlistVideos: many(playlistVideos),
favorites: many(favorites),
}));
export const favoritesRelations = relations(favorites, ({ one }) => ({
video: one(videos, {
fields: [favorites.videoId],
references: [videos.id],
}),
}));
export type InsertVideo = z.infer<typeof insertVideoSchema>;
export type Video = typeof videos.$inferSelect;
export type Playlist = typeof playlists.$inferSelect;
export type InsertPlaylist = z.infer<typeof insertPlaylistSchema>;
export type PlaylistVideo = typeof playlistVideos.$inferSelect;
export type InsertPlaylistVideo = z.infer<typeof insertPlaylistVideoSchema>;
export type Favorite = typeof favorites.$inferSelect;
export type InsertFavorite = z.infer<typeof insertFavoriteSchema>;